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 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 subMesh in SubMeshes) { subMesh.Draw(shaderProgram); } }
public void Bind(GLShaderProgram shaderProgram) { shaderProgram.SetUniform("uDiffuseColor", DiffuseColor); shaderProgram.SetUniform("uSpecularColor", SpecularColor); shaderProgram.SetUniform("uSpecularPower", Shininess); shaderProgram.SetUniform("uUseAniso", UseAniso); 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($"uHas{uniformName}", texture != null); shaderProgram.SetUniform($"u{uniformName}", textureIndex++); } ActivateTexture(Diffuse, "DiffuseTexture"); ActivateTexture(Ambient, "AmbientTexture"); ActivateTexture(Normal, "NormalTexture"); ActivateTexture(Specular, "SpecularTexture"); ActivateTexture(Reflection, "ReflectionTexture", TextureTarget.TextureCubeMap); ActivateTexture(Tangent, "TangentTexture"); }
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 void Draw(GLShaderProgram shaderProgram) { shaderProgram.SetUniform("uHasNormal", NormalBuffer != null); shaderProgram.SetUniform("uHasTexCoord0", TexCoord0Buffer != null); shaderProgram.SetUniform("uHasTexCoord1", TexCoord1Buffer != null); shaderProgram.SetUniform("uHasColor0", Color0Buffer != null); shaderProgram.SetUniform("uHasTangent", TangentBuffer != null); GL.BindVertexArray(VertexArrayId); foreach (var subMesh in SubMeshes) { subMesh.Draw(shaderProgram); } }
public static GLShaderProgram Create(string shaderName) { if (sShaderPrograms.TryGetValue(shaderName, out var shaderProgram)) { return(shaderProgram); } string fragmentShaderFilePath = ResourceStore.GetPath(Path.Combine("Shaders", shaderName + ".frag")); string 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); } int 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); }
public static GLShaderProgram Create(string shaderName) { if (sShaderPrograms.TryGetValue(shaderName, out GLShaderProgram shaderProgram)) { return(shaderProgram); } var fragmentShaderFilePath = Path.Combine(ShaderDirectoryPath, shaderName + ".frag"); var vertexShaderFilePath = Path.Combine(ShaderDirectoryPath, 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); }