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