/// <summary>
        /// 推入网格,比如带子系统,绘制的是网格,不是Render
        /// </summary>
        /// <param name="m">网格</param>
        /// <param name="matrix">矩阵</param>
        /// <param name="mat">材质球</param>
        public void PushMesh(Mesh m, Matrix4x4 matrix, Material mat)
        {
            if (DebugMode)
            {
                return;
            }
            GlowMeshInfo info = new GlowMeshInfo();

            info.mesh   = m;
            info.matrix = matrix;
            info.mat    = mat;
            string GlowTags = mat.GetTag("DissolveGolw", false);

            info.MaterialTag = GlowTags;
            if (GlowDissloveOpaqueMaterial)
            {
                Material instanceMat = null;
                //有同一个材质球了,直接用同一个,引用计数+1
                if (Orginal_DissloveGlowMatTable.TryGetValue(mat, out instanceMat))
                {
                    info.InstanceMaterial = instanceMat;
                    Orginal_DissloveGlowMatRefCountTable[mat]++;
                }
                else
                {
                    info.InstanceMaterial = GetDissloveGlowMaterialInstance(GlowTags);
                    info.InstanceMaterial.CopyPropertiesFromMaterial(info.mat);
                    info.InstanceMaterial.shaderKeywords = mat.shaderKeywords;
                    Orginal_DissloveGlowMatTable.Add(info.mat, info.InstanceMaterial);
                    Orginal_DissloveGlowMatRefCountTable.Add(info.mat, 1);
                }
            }
            m_MeshInfoList.AddLast(info);
        }
Example #2
0
        /// <summary>
        /// 推入网格,比如带子系统,绘制的是网格,不是Render
        /// </summary>
        /// <param name="m">网格</param>
        /// <param name="matrix">矩阵</param>
        /// <param name="mat">材质球</param>
        public void PushMesh(Mesh m, Matrix4x4 matrix, Material mat)
        {
            if (DebugMode)
            {
                return;
            }
            GlowMeshInfo info = new GlowMeshInfo();

            info.mesh   = m;
            info.matrix = matrix;
            info.mat    = mat;
            if (GlowOutLineMaterial)
            {
                Material instanceMat = null;
                //有同一个材质球了,直接用同一个,引用计数+1
                if (Orginal_GlowOutLineMatTable.TryGetValue(mat, out instanceMat))
                {
                    info.InstanceMaterial = instanceMat;
                    Orginal_GlowOutLineMatRefCountTable[mat]++;
                }
                else
                {
                    info.InstanceMaterial = GetGlowOutLineMaterialInstance();
                    info.InstanceMaterial.CopyPropertiesFromMaterial(info.mat);
                    info.InstanceMaterial.shaderKeywords = mat.shaderKeywords;
                    Orginal_GlowOutLineMatTable.Add(info.mat, info.InstanceMaterial);
                    Orginal_GlowOutLineMatRefCountTable.Add(info.mat, 1);
                }
            }
            m_MeshInfoList.AddLast(info);
        }
        public void RemoveMesh(GlowMeshInfo info)
        {
            if (DebugMode)
            {
                return;
            }

            if (Orginal_DissloveGlowMatTable.ContainsKey(info.mat))
            {
                int refCout = Orginal_DissloveGlowMatRefCountTable[info.mat];
                refCout--;
                if (refCout <= 0)
                {
                    Orginal_DissloveGlowMatTable.Remove(info.mat);
                    Orginal_DissloveGlowMatRefCountTable.Remove(info.mat);
                    CacheDissloveGlowMaterial(info.InstanceMaterial, info.MaterialTag);
                }
                else
                {
                    Orginal_DissloveGlowMatRefCountTable[info.mat] = refCout;
                }
            }
        }
Example #4
0
        public void RemoveMesh(GlowMeshInfo info)
        {
            if (DebugMode)
            {
                return;
            }

            if (Orginal_GlowOutLineMatTable.ContainsKey(info.mat))
            {
                int refCout = Orginal_GlowOutLineMatRefCountTable[info.mat];
                refCout--;
                if (refCout <= 0)
                {
                    Orginal_GlowOutLineMatTable.Remove(info.mat);
                    Orginal_GlowOutLineMatRefCountTable.Remove(info.mat);

                    GlowOutLineMaterialInstanceCacheList.Enqueue(info.InstanceMaterial);
                }
                else
                {
                    Orginal_GlowOutLineMatRefCountTable[info.mat] = refCout;
                }
            }
        }