public static Material GetStencilMaterial(Material baseMaterial, int stencilID) { if (!baseMaterial.HasProperty(ShaderUtilities.ID_StencilID)) { Debug.LogWarning("Selected Shader does not support Stencil Masking. Please select the Distance Field or Mobile Distance Field Shader."); return(baseMaterial); } int num = MaterialManager.m_materialList.FindIndex((MaterialManager.MaskingMaterial item) => item.baseMaterial == baseMaterial && item.stencilID == stencilID); Material material; if (num == -1) { material = new Material(baseMaterial); material.hideFlags = (HideFlags.HideInHierarchy | HideFlags.DontSaveInEditor | HideFlags.NotEditable); Material expr_6F = material; expr_6F.name = expr_6F.name + " Masking ID:" + stencilID; material.shaderKeywords = baseMaterial.shaderKeywords; ShaderUtilities.GetShaderPropertyIDs(); material.SetFloat(ShaderUtilities.ID_StencilID, (float)stencilID); material.SetFloat(ShaderUtilities.ID_StencilComp, 3f); MaterialManager.MaskingMaterial maskingMaterial = new MaterialManager.MaskingMaterial(); maskingMaterial.baseMaterial = baseMaterial; maskingMaterial.stencilMaterial = material; maskingMaterial.stencilID = stencilID; maskingMaterial.count = 1; MaterialManager.m_materialList.Add(maskingMaterial); } else { material = MaterialManager.m_materialList.get_Item(num).stencilMaterial; MaterialManager.m_materialList.get_Item(num).count++; } MaterialManager.ListMaterials(); return(material); }
public static void ReleaseBaseMaterial(Material baseMaterial) { int num = MaterialManager.m_materialList.FindIndex((MaterialManager.MaskingMaterial item) => item.baseMaterial == baseMaterial); if (num == -1) { Debug.Log("No Masking Material exists for " + baseMaterial.name); } else if (MaterialManager.m_materialList.get_Item(num).count > 1) { MaterialManager.m_materialList.get_Item(num).count--; Debug.Log(string.Concat(new object[] { "Removed (1) reference to ", MaterialManager.m_materialList.get_Item(num).stencilMaterial.name, ". There are ", MaterialManager.m_materialList.get_Item(num).count, " references left." })); } else { Debug.Log(string.Concat(new object[] { "Removed last reference to ", MaterialManager.m_materialList.get_Item(num).stencilMaterial.name, " with ID ", MaterialManager.m_materialList.get_Item(num).stencilMaterial.GetInstanceID() })); Object.DestroyImmediate(MaterialManager.m_materialList.get_Item(num).stencilMaterial); MaterialManager.m_materialList.RemoveAt(num); } MaterialManager.ListMaterials(); }
public static void RemoveStencilMaterial(Material stencilMaterial) { int num = MaterialManager.m_materialList.FindIndex((MaterialManager.MaskingMaterial item) => item.stencilMaterial == stencilMaterial); if (num != -1) { MaterialManager.m_materialList.RemoveAt(num); } MaterialManager.ListMaterials(); }
public static void ReleaseStencilMaterial(Material stencilMaterial) { int num = MaterialManager.m_materialList.FindIndex((MaterialManager.MaskingMaterial item) => item.stencilMaterial == stencilMaterial); if (num != -1) { if (MaterialManager.m_materialList.get_Item(num).count > 1) { MaterialManager.m_materialList.get_Item(num).count--; } else { Object.DestroyImmediate(MaterialManager.m_materialList.get_Item(num).stencilMaterial); MaterialManager.m_materialList.RemoveAt(num); } } MaterialManager.ListMaterials(); }