public void RenderShaderDataOwnerMesh(DrawableMesh mesh, IShaderDataOwner owner) { if (mesh == null) { Logger.LogError(Logger.ErrorState.Critical, "RenderMesh, no mesh given"); return; } SetActiveShader(mesh.ShaderProgram); if (activeProgram == null) { Logger.LogError(Logger.ErrorState.Critical, "RenderMesh, no active shader"); return; } List <ShaderUniformName> ownerUniforms = owner.GetUniforms(); ShaderUniformManager man = ShaderUniformManager.GetSingleton(); foreach (ShaderUniformName name in ownerUniforms) { man.SetData(activeProgram, name, owner); } if (mesh != owner) { List <ShaderUniformName> meshUniforms = mesh.GetUniforms(); foreach (ShaderUniformName name in meshUniforms) { man.SetData(activeProgram, name, mesh); } } if (mesh.BoundMaterial != null) { MaterialManager matMan = MaterialManager.GetSingleton(); matMan.SetMaterialToShader(mesh.BoundMaterial, activeProgram); } mesh.draw(); }