Esempio n. 1
0
    private void AddVisibleTexture(Texture texture, Material ownerMat, GameObject ownerObj)
    {
        if (texture != null)
        {
            if (!_visibleTextures.ContainsKey(texture))
            {
                _visibleTextures.Add(texture, new HashSet <Material>());
            }
            _visibleTextures[texture].Add(ownerMat);

            if (!_visibleGameObjects.ContainsKey(texture))
            {
                _visibleGameObjects.Add(texture, new List <GameObject>());
            }
            _visibleGameObjects[texture].Add(ownerObj);

            // refresh the size
            if (!_textureSizeLut.ContainsKey(texture))
            {
                //_textureSizeLut[texture] = UsTextureUtil.CalculateTextureSizeBytes(texture);
                _textureSizeLut[texture] =
#if JX3M
                    KProfiler.GetRuntimeMemorySize(texture);
#else
                    (int)Profiler.GetRuntimeMemorySizeLong(texture);
#endif
            }

            // refresh the category
            if (!_textureCatLut.ContainsKey(texture))
            {
                _textureCatLut[texture] = TextureCategorizing.GetTextureCategory(ownerObj);
            }
        }
    }
Esempio n. 2
0
    private void RefreshTextureInfoTables()
    {
        _visibleMaterials.Clear();
        _visibleTextures.Clear();
        _visibleGameObjects.Clear();

        TextureCategorizing.RefreshRootObjects();

        Renderer[] meshRenderers = UnityEngine.Object.FindObjectsOfType(typeof(Renderer)) as Renderer[];
        foreach (Renderer mr in meshRenderers)
        {
            if (mr.isVisible)
            {
                GameObject go = mr.gameObject;
                //if (_meshLut.AddMesh(go))
                {
                    _nameLut[go.GetInstanceID()] = go.name;

                    //Debug.Log(string.Format("CollectFrameData(): adding game object. {0}, name {1}, name count {2}",
                    //                        go.GetInstanceID(),
                    //                        go.name,
                    //                        _nameLut.Count));

                    foreach (var mat in mr.sharedMaterials)
                    {
                        AddVisibleMaterial(mat, mr.gameObject);

                        if (mat != null)
                        {
#if UNITY_EDITOR
                            if (Application.isEditor)
                            {
                                int cnt = ShaderUtil.GetPropertyCount(mat.shader);
                                for (int i = 0; i < cnt; i++)
                                {
                                    if (ShaderUtil.GetPropertyType(mat.shader, i) == ShaderUtil.ShaderPropertyType.TexEnv)
                                    {
                                        string propName = ShaderUtil.GetPropertyName(mat.shader, i);
                                        AddVisibleTexture(mat.GetTexture(propName), mat, go);
                                    }
                                }
                            }
                            else
#endif
                            {
                                AddVisibleTexture(mat.mainTexture, mat, go);
                            }
                        }
                    }
                }
            }
        }


#if JX3M
        HashSet <Texture> textures = new HashSet <Texture>();
        UISprite[]        sprites  = UnityEngine.Object.FindObjectsOfType(typeof(UISprite)) as UISprite[];
        foreach (UISprite s in sprites)
        {
            if (!textures.Contains(s.mainTexture))
            {
                AddVisibleTexture(s.mainTexture, s.material, s.gameObject);
            }
        }
#endif

        //UIAtlas[] atlases = UnityEngine.Object.FindObjectsOfType(typeof(UIAtlas)) as UIAtlas[];
        //foreach (UIAtlas a in atlases)
        //{
        //    AddVisibleTexture(a.texture, a.spriteMaterial, a.gameObject);
        //}

        Debug.Log(string.Format("{0} visible materials ({1}), visible textures ({2})",
                                DateTime.Now.ToLongTimeString(),
                                VisibleMaterials.Count,
                                VisibleTextures.Count));

        Dictionary <int, int> countDict = new Dictionary <int, int>();
        Dictionary <int, int> sizeDict  = new Dictionary <int, int>();

        countDict[(int)TextureCategory.All] = 0;
        sizeDict[(int)TextureCategory.All]  = 0;

        List <object> entries = new List <object>();
        foreach (var p in VisibleTextures)
        {
            TextureInfoItem si = new TextureInfoItem();
            si.TextureName   = p.Key.name;
            si.TextureWidth  = p.Key.width;
            si.TextureHeight = p.Key.height;
            si.TextureSize   = _textureSizeLut[p.Key];
            si.TextureCat    = _textureCatLut[p.Key];
            si.TextureObject = p.Key;

            if (_selectedCategory == (TextureCategory)si.TextureCat || _selectedCategory == TextureCategory.All)
            {
                entries.Add(si);
            }

            if (!sizeDict.ContainsKey(si.TextureCat))
            {
                sizeDict.Add(si.TextureCat, 0);
            }
            sizeDict[si.TextureCat]            += si.TextureSize;
            sizeDict[(int)TextureCategory.All] += si.TextureSize;

            if (!countDict.ContainsKey(si.TextureCat))
            {
                countDict.Add(si.TextureCat, 0);
            }
            countDict[si.TextureCat]            += 1;
            countDict[(int)TextureCategory.All] += 1;
        }
        _textureInfoTable.RefreshData(entries);
        _textureInfoTiles.RefreshData(entries);

        _totalVisibleTextureCount = countDict[(int)TextureCategory.All];
        _totalVisibleTextureSize  = sizeDict[(int)TextureCategory.All];

        List <object> catEntries = new List <object>();
        for (int i = 0; i < (int)TextureCategory.Num; ++i)
        {
            TextureCategoryItem cat = new TextureCategoryItem();
            cat.TextureCat      = i;
            cat.TextureCatName  = ((TextureCategory)i).ToString();
            cat.TextureCatSize  = sizeDict.ContainsKey(i) ? sizeDict[i] : 0;
            cat.TextureCatCount = countDict.ContainsKey(i) ? countDict[i] : 0;
            catEntries.Add(cat);
        }
        _textureCatTable.RefreshData(catEntries);

        Repaint();
    }