Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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();
        }