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"); }
public void Draw(GLShaderProgram shaderProgram) { foreach (var mesh in Meshes) { mesh.Draw(shaderProgram); } }
public void Draw(GLShaderProgram shaderProgram) { Material.Bind(shaderProgram); ElementBuffer.Bind(); GL.DrawElements(PrimitiveType, ElementBuffer.Length, DrawElementsType.UnsignedShort, 0); }
public void Draw(GLShaderProgram shaderProgram) { foreach (var subMesh in SubMeshes) { subMesh.Draw(shaderProgram); } }
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); } }
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); }