Exemplo n.º 1
0
        public void Bind(GLShaderProgram shaderProgram)
        {
            shaderProgram.SetUniform("diffuseColor", DiffuseColor);
            shaderProgram.SetUniform("ambientColor", AmbientColor);
            shaderProgram.SetUniform("specularColor", SpecularColor);
            //shaderProgram.SetUniform( "emissionColor", EmissionColor );
            shaderProgram.SetUniform("specularPower", Shininess);

            int textureIndex = 0;

            void ActivateTexture(GLTexture texture, string uniformName, TextureTarget target = TextureTarget.Texture2D)
            {
                GL.ActiveTexture(TextureUnit.Texture0 + textureIndex);
                GL.BindTexture(target, texture?.Id ?? 0);
                shaderProgram.SetUniform($"has{uniformName}", texture != null);
                shaderProgram.SetUniform(uniformName, textureIndex++);
            }

            ActivateTexture(Diffuse, "diffuseTexture");
            ActivateTexture(Ambient, "ambientTexture");
            ActivateTexture(Normal, "normalTexture");
            ActivateTexture(Specular, "specularTexture");
            ActivateTexture(Reflection, "reflectionTexture", TextureTarget.TextureCubeMap);
            ActivateTexture(SpecularPower, "specularPowerTexture");
        }
Exemplo n.º 2
0
 public void Draw(GLShaderProgram shaderProgram)
 {
     foreach (var mesh in Meshes)
     {
         mesh.Draw(shaderProgram);
     }
 }
Exemplo n.º 3
0
        public void Draw(GLShaderProgram shaderProgram)
        {
            Material.Bind(shaderProgram);
            ElementBuffer.Bind();

            GL.DrawElements(PrimitiveType, ElementBuffer.Length, DrawElementsType.UnsignedShort, 0);
        }
Exemplo n.º 4
0
 public void Draw(GLShaderProgram shaderProgram)
 {
     foreach (var subMesh in SubMeshes)
     {
         subMesh.Draw(shaderProgram);
     }
 }
Exemplo n.º 5
0
        public void Draw(GLShaderProgram shaderProgram)
        {
            shaderProgram.SetUniform("hasNormal", NormalBuffer != null);
            shaderProgram.SetUniform("hasTexCoord", TexCoordBuffer != null);
            shaderProgram.SetUniform("hasTexCoord2", TexCoord2Buffer != null);
            shaderProgram.SetUniform("hasColor", ColorBuffer != null);
            shaderProgram.SetUniform("hasTangent", TangentBuffer != null);

            GL.BindVertexArray(VertexArrayId);

            foreach (var indexTable in IndexTables)
            {
                indexTable.Draw(shaderProgram);
            }
        }
Exemplo n.º 6
0
        public static GLShaderProgram Create(string shaderName)
        {
            if (sShaderPrograms.TryGetValue(shaderName, out GLShaderProgram shaderProgram))
            {
                return(shaderProgram);
            }

            var fragmentShaderFilePath = ResourceStore.GetPath(Path.Combine("Shaders", shaderName + ".frag"));
            var vertexShaderFilePath   = ResourceStore.GetPath(Path.Combine("Shaders", shaderName + ".vert"));

            if (!File.Exists(fragmentShaderFilePath) || !File.Exists(vertexShaderFilePath))
            {
                return(null);
            }

            int fragmentShader = CreateShader(ShaderType.FragmentShader, File.ReadAllText(fragmentShaderFilePath));

            if (fragmentShader == -1)
            {
                return(null);
            }

            int vertexShader = CreateShader(ShaderType.VertexShader, File.ReadAllText(vertexShaderFilePath));

            if (vertexShader == -1)
            {
                return(null);
            }

            var shaderProgramId = GL.CreateProgram();

            GL.AttachShader(shaderProgramId, fragmentShader);
            GL.AttachShader(shaderProgramId, vertexShader);
            GL.LinkProgram(shaderProgramId);

            GL.DeleteShader(fragmentShader);
            GL.DeleteShader(vertexShader);

            shaderProgram = new GLShaderProgram(shaderName, shaderProgramId);
            sShaderPrograms.Add(shaderName, shaderProgram);
            return(shaderProgram);
        }