public static void CleanupFallbackMaterials() { if (TMP_MaterialManager.m_fallbackCleanupList.Count == 0) { return; } for (int i = 0; i < TMP_MaterialManager.m_fallbackCleanupList.Count; i++) { TMP_MaterialManager.FallbackMaterial fallbackMaterial = TMP_MaterialManager.m_fallbackCleanupList[i]; if (fallbackMaterial.count < 1) { Material fallbackMaterial2 = fallbackMaterial.fallbackMaterial; TMP_MaterialManager.m_fallbackMaterials.Remove(fallbackMaterial.fallbackID); TMP_MaterialManager.m_fallbackMaterialLookup.Remove(fallbackMaterial2.GetInstanceID()); Object.DestroyImmediate(fallbackMaterial2); } } TMP_MaterialManager.m_fallbackCleanupList.Clear(); }
public static Material GetFallbackMaterial(Material sourceMaterial, Material targetMaterial) { int instanceID = sourceMaterial.GetInstanceID(); Texture texture = targetMaterial.GetTexture(ShaderUtilities.ID_MainTex); int instanceID2 = texture.GetInstanceID(); long num = (long)instanceID << 32 | (long)((ulong)instanceID2); TMP_MaterialManager.FallbackMaterial fallbackMaterial; if (TMP_MaterialManager.m_fallbackMaterials.TryGetValue(num, out fallbackMaterial)) { return(fallbackMaterial.fallbackMaterial); } Material material; if (sourceMaterial.HasProperty(ShaderUtilities.ID_GradientScale) && targetMaterial.HasProperty(ShaderUtilities.ID_GradientScale)) { material = new Material(sourceMaterial); material.hideFlags = HideFlags.HideAndDontSave; material.SetTexture(ShaderUtilities.ID_MainTex, texture); material.SetFloat(ShaderUtilities.ID_GradientScale, targetMaterial.GetFloat(ShaderUtilities.ID_GradientScale)); material.SetFloat(ShaderUtilities.ID_TextureWidth, targetMaterial.GetFloat(ShaderUtilities.ID_TextureWidth)); material.SetFloat(ShaderUtilities.ID_TextureHeight, targetMaterial.GetFloat(ShaderUtilities.ID_TextureHeight)); material.SetFloat(ShaderUtilities.ID_WeightNormal, targetMaterial.GetFloat(ShaderUtilities.ID_WeightNormal)); material.SetFloat(ShaderUtilities.ID_WeightBold, targetMaterial.GetFloat(ShaderUtilities.ID_WeightBold)); } else { material = new Material(targetMaterial); } fallbackMaterial = new TMP_MaterialManager.FallbackMaterial(); fallbackMaterial.baseID = instanceID; fallbackMaterial.baseMaterial = sourceMaterial; fallbackMaterial.fallbackID = num; fallbackMaterial.fallbackMaterial = material; fallbackMaterial.count = 0; TMP_MaterialManager.m_fallbackMaterials.Add(num, fallbackMaterial); TMP_MaterialManager.m_fallbackMaterialLookup.Add(material.GetInstanceID(), num); return(material); }