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