示例#1
0
        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();
        }