示例#1
0
    public void ResetMemory()
    {
        bOptimitzedMenory = true;
        currFadeMatTable  = null;
        if (OtherLoadedResTable.Count <= 0 || AlwaysUnOptimitzedMemory)
        {
            return;
        }
        foreach (SceneMaterialConfig r in ConfigDataList)
        {
            if (!r.SharedMaterial)
            {
                continue;
            }
            if (UnOptimitzedMaterials.ContainsKey(r.SharedMaterial))
            {
                int refCount = --UnOptimitzedMaterials[r.SharedMaterial];
                if (refCount <= 0)
                {
                    foreach (SceneTextureConfigData rt in r.TextureConfigList)
                    {
                        if (!rt.ShaderKeyWordName.Equals(MainTexKeyWorld))
                        {
                            Material orginalInstanceMat = null;

                            Orginal_AlphaInstanceTable.TryGetValue(r.SharedMaterial, out orginalInstanceMat);
                            if (rt.ShaderKeyWordVariantName.Count != 0)
                            {
                                foreach (string var in rt.ShaderKeyWordVariantName)
                                {
                                    if (orginalInstanceMat)
                                    {
                                        orginalInstanceMat.DisableKeyword(var);
                                    }
                                    r.SharedMaterial.DisableKeyword(var);
                                }
                            }
                            if (orginalInstanceMat)
                            {
                                orginalInstanceMat.SetTexture(rt.ShaderKeyWordName, null);
                            }

                            r.SharedMaterial.SetTexture(rt.ShaderKeyWordName, null);
                        }
                    }
                    ResetEmissonTexture(r.SharedMaterial);
                    ResetSurfaceDefineTexture(r.SharedMaterial);
                    UnOptimitzedMaterials.Remove(r.SharedMaterial);
                }
            }
        }
        foreach (ResNode res in OtherLoadedResTable.Values)
        {
            ResNode temp = res;
            AssetBundleManager.DeleteAssetsAsync(ref temp, this, false);
        }
        OtherLoadedResTable.Clear();
    }
示例#2
0
    /// <summary>
    /// 不优化内存
    /// </summary>
    public void UnOptimitzedMemory()
    {
        //可见才能不优化
        if (!bOptimitzedMenory || bOptimitzedRendering || AlwaysUnOptimitzedMemory)
        {
            return;
        }
        foreach (SceneMaterialConfig r in ConfigDataList)
        {
            if (!r.SharedMaterial)
            {
                continue;
            }

            if (!UnOptimitzedMaterials.ContainsKey(r.SharedMaterial))
            {
                UnOptimitzedMaterials.Add(r.SharedMaterial, 1);
            }
            else
            {
                UnOptimitzedMaterials[r.SharedMaterial]++;
            }

            foreach (SceneTextureConfigData rt in r.TextureConfigList)
            {
                if (!rt.ShaderKeyWordName.Equals(MainTexKeyWorld))
                {
                    ResNode re = null;
                    if (!OtherLoadedResTable.ContainsKey(rt))
                    {
                        re = AssetBundleManager.GetAssetsAsync(AssetType.Asset_Texture, rt, this, r);
                        if (!ResNode.isNullOrEmpty(re))
                        {
                            OtherLoadedResTable.Add(rt, re);
                        }
                    }
                }
            }
        }

        bOptimitzedMenory = false;
    }
示例#3
0
    public void ClearMemory()
    {
        foreach (SceneMaterialConfig r in ConfigDataList)
        {
            if (!r.SharedMaterial)
            {
                continue;
            }
            if (UnOptimitzedMaterials.ContainsKey(r.SharedMaterial))
            {
                int refCount = --UnOptimitzedMaterials[r.SharedMaterial];
                if (refCount <= 0)
                {
                    foreach (SceneTextureConfigData rt in r.TextureConfigList)
                    {
                        if (rt.ShaderKeyWordVariantName.Count != 0)
                        {
                            foreach (string variant in rt.ShaderKeyWordVariantName)
                            {
                                r.SharedMaterial.DisableKeyword(variant);
                            }
                        }

                        r.SharedMaterial.SetTexture(rt.ShaderKeyWordName, null);
                    }
                    UnOptimitzedMaterials.Remove(r.SharedMaterial);
                    ResetEmissonTexture(r.SharedMaterial);
                    ResetSurfaceDefineTexture(r.SharedMaterial);
                }
            }
            else
            {
                foreach (SceneTextureConfigData rt in r.TextureConfigList)
                {
                    if (rt.ShaderKeyWordVariantName.Count != 0)
                    {
                        foreach (string variant in rt.ShaderKeyWordVariantName)
                        {
                            r.SharedMaterial.DisableKeyword(variant);
                        }
                    }

                    r.SharedMaterial.SetTexture(rt.ShaderKeyWordName, null);
                }
                UnOptimitzedMaterials.Remove(r.SharedMaterial);
                ResetEmissonTexture(r.SharedMaterial);
                ResetSurfaceDefineTexture(r.SharedMaterial);
            }
        }
        foreach (ResNode res in OtherLoadedResTable.Values)
        {
            ResNode temp = res;
            AssetBundleManager.DeleteAssetsAsync(ref temp, this, true);
        }
        OtherLoadedResTable.Clear();

        foreach (ResNode res in MainTexLoadedResTable.Values)
        {
            ResNode temp = res;
            AssetBundleManager.DeleteAssets(ref temp, true);
        }
        MainTexLoadedResTable.Clear();
        ConfigDataList.Clear();
    }