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(); }
/// <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; }
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(); }