private void MakeRenderOpaque(Renderer renderer) { if (renderer == null) { return; } CTransparentObject info = null; foreach (var v in _AlphaRenderInfos) { if (v.RendererObject == renderer) { info = v; break; } } if (info == null) { return; } info.RendererObject.sharedMaterials = info.OriginMaterials; // revert materials info.RendererObject = null; info.OriginMaterials = null; foreach (var v in info.CurrentMaterials) { if (v != null) { MaterialPool.Instance.Recycle(v); } } info.CurrentMaterials.Clear(); }
private void MakeRenderTransparent(Renderer renderer) { if (renderer == null) { return; } CTransparentObject info = null; foreach (var v in _AlphaRenderInfos) { if (!v.IsInUsed()) { info = v; break; } } if (info == null) { info = new CTransparentObject(); _AlphaRenderInfos.Add(info); } info.RendererObject = renderer; info.OriginMaterials = info.RendererObject.sharedMaterials; for (int i = 0; i < info.OriginMaterials.Length; ++i) { if (info.OriginMaterials[i] != null) { var mat = MaterialPool.Instance.Get(info.OriginMaterials[i]); info.CurrentMaterials.Add(mat); string shaderName = info.OriginMaterials[i].shader.name; if (_CamtransOpaqueShaderNames.Contains(shaderName)) { var shader = ShaderManager.Instance.MobileCamtransOpaqueShader; if (shader != null) { info.CurrentMaterials[i].shader = shader; } } else if (_MobileCamtransShaderNames.Contains(shaderName)) { var shader = ShaderManager.Instance.MobileCamtransShader; if (shader != null) { info.CurrentMaterials[i].shader = shader; } } else if (!_UnsupportedSet.Contains(shaderName)) { _UnsupportedSet.Add(shaderName); Common.HobaDebuger.LogWarningFormat("CRenderInfo.InitFromRenderer Unsupported Shader - {0}", shaderName); } } else { info.CurrentMaterials.Add(null); } } // use cam trans materials int nLen = info.OriginMaterials.Length; Material[] newMats = null; foreach (var v in _ReusableMatArrays) { if (v != null && v.Length == nLen) { newMats = v; break; } } if (newMats == null) { newMats = new Material[nLen]; _ReusableMatArrays.Add(newMats); } for (int i = 0; i < nLen; ++i) { newMats[i] = info.CurrentMaterials[i]; //设置半透material } info.RendererObject.sharedMaterials = newMats; for (int i = 0; i < nLen; ++i) { newMats[i] = null; } }