/// <summary> /// Links a vertex shader and a fragment shader to this program. /// </summary> /// <param name="vShader">The VertexShader.</param> /// <param name="fShader">The FragmentShader.</param> public void Link(VertexShader vShader, FragmentShader fShader) { OpenGLInterops.AttachShader(Id, vShader.Id); OpenGLInterops.AttachShader(Id, fShader.Id); OpenGLInterops.BindFragDataLocation(Id, 0, "outColor"); OpenGLInterops.LinkProgram(Id); }
/// <summary> /// Sets an uniform. /// </summary> /// <param name="name">The Name.</param> /// <param name="data">The Data.</param> public void SetUniform(string name, params float[] data) { int propertyLoc = OpenGLInterops.GetUniformLocation(Id, name); switch (data.Length) { case 1: OpenGLInterops.Uniform1(propertyLoc, data[0]); break; case 2: OpenGLInterops.Uniform2(propertyLoc, data[0], data[1]); break; case 3: OpenGLInterops.Uniform3(propertyLoc, data[0], data[1], data[2]); break; case 4: OpenGLInterops.Uniform4(propertyLoc, data[0], data[1], data[2], data[3]); break; default: throw new InvalidOperationException("Invalid argument length."); } }
/// <summary> /// Deletes the shader program. /// </summary> public void Delete() { try { OpenGLInterops.DeleteProgram(Id); } catch { LogManager.GetClassLogger().Warn("Unable to dispose."); } }
/// <summary> /// Deletes the shader. /// </summary> public void Delete() { OpenGLInterops.DeleteShader(Id); }
/// <summary> /// Compiles the shader. /// </summary> /// <param name="sourceCode">The SourceCode.</param> public void Compile(string sourceCode) { OpenGLInterops.ShaderSource(Id, sourceCode); OpenGLInterops.CompileShader(Id); }
/// <summary> /// Initializes a new VertexShader class. /// </summary> public VertexShader() { Id = OpenGLInterops.CreateShader(OpenGLInterops.GL_VERTEX_SHADER); }
/// <summary> /// Initializes a new FragmentShader class. /// </summary> public FragmentShader() { Id = OpenGLInterops.CreateShader(OpenGLInterops.GL_FRAGMENT_SHADER); }
/// <summary> /// Sets an Uniform matrix. /// </summary> /// <param name="name">The Name.</param> /// <param name="data">The Data.</param> public void SetUniformMatrix(string name, float[] data) { int propertyLoc = OpenGLInterops.GetUniformLocation(Id, name); OpenGLInterops.UniformMatrix4(propertyLoc, 1, false, data); }
/// <summary> /// Initializes a new ShaderProgram class. /// </summary> public ShaderProgram() { Id = OpenGLInterops.CreateProgram(); }
/// <summary> /// Unbinds the shader program. /// </summary> public void Unbind() { OpenGLInterops.UseProgram(0); }
/// <summary> /// Binds the shader program. /// </summary> public void Bind() { OpenGLInterops.UseProgram(Id); }
/// <summary> /// Gets the attribute location. /// </summary> /// <param name="name">The Name.</param> /// <returns>UInt.</returns> public uint GetAttribLocation(string name) { return((uint)OpenGLInterops.GetAttribLocation(Id, name)); }