/// <summary> /// Creates the shader program. /// </summary> /// <param name="gl">The gl.</param> /// <param name="vertexShaderSource">The vertex shader source.</param> /// <param name="fragmentShaderSource">The fragment shader source.</param> /// <param name="attributeLocations">The attribute locations. This is an optional array of /// uint attribute locations to their names.</param> /// <exception cref="ShaderCompilationException"></exception> public void Create(OpenGL gl, string vertexShaderSource, string fragmentShaderSource, string geometryShaderSource, Dictionary <uint, string> attributeLocations) { // Create the shaders. vertexShader.Create(gl, OpenGL.GL_VERTEX_SHADER, vertexShaderSource); fragmentShader.Create(gl, OpenGL.GL_FRAGMENT_SHADER, fragmentShaderSource); geometryShader.Create(gl, OpenGL.GL_GEOMETRY_SHADER, geometryShaderSource); // Create the program, attach the shaders. shaderProgramObject = gl.CreateProgram(); gl.AttachShader(shaderProgramObject, vertexShader.ShaderObject); gl.AttachShader(shaderProgramObject, fragmentShader.ShaderObject); gl.AttachShader(shaderProgramObject, geometryShader.ShaderObject); // Before we link, bind any vertex attribute locations. if (attributeLocations != null) { foreach (var vertexAttributeLocation in attributeLocations) { gl.BindAttribLocation(shaderProgramObject, vertexAttributeLocation.Key, vertexAttributeLocation.Value); } } // Now we can link the program. gl.LinkProgram(shaderProgramObject); // Now that we've compiled and linked the shader, check it's link status. If it's not linked properly, we're // going to throw an exception. if (GetLinkStatus(gl) == false) { throw new ShaderCompilationException(string.Format("Failed to link shader program with ID {0}.", shaderProgramObject), GetInfoLog(gl)); } }
/// <summary> /// Creates the shader program. /// </summary> /// <param name="gl">The gl.</param> /// <param name="vertexShaderSource">The vertex shader source.</param> /// <param name="fragmentShaderSource">The fragment shader source.</param> /// <param name="attributeLocations">The attribute locations. This is an optional array of /// uint attribute locations to their names.</param> /// <exception cref="ShaderCompilationException"></exception> public void Create(OpenGL gl, string vertexShaderSource, string fragmentShaderSource, Dictionary<uint, string> attributeLocations) { // Create the shaders. vertexShader.Create(gl, OpenGL.GL_VERTEX_SHADER, vertexShaderSource); fragmentShader.Create(gl, OpenGL.GL_FRAGMENT_SHADER, fragmentShaderSource); // Create the program, attach the shaders. shaderProgramObject = gl.CreateProgram(); gl.AttachShader(shaderProgramObject, vertexShader.ShaderObject); gl.AttachShader(shaderProgramObject, fragmentShader.ShaderObject); // Before we link, bind any vertex attribute locations. if (attributeLocations != null) { foreach (var vertexAttributeLocation in attributeLocations) gl.BindAttribLocation(shaderProgramObject, vertexAttributeLocation.Key, vertexAttributeLocation.Value); } // Now we can link the program. gl.LinkProgram(shaderProgramObject); // Now that we've compiled and linked the shader, check it's link status. If it's not linked properly, we're // going to throw an exception. if (GetLinkStatus(gl) == false) { throw new ShaderCompilationException(string.Format("Failed to link shader program with ID {0}.", shaderProgramObject), GetInfoLog(gl)); } }
public void BindAttributeLocation(OpenGL gl, uint location, string attribute) { gl.BindAttribLocation(shaderProgramObject, location, attribute); // If necessary we must call link program again as else the new attribute location isn't set. if (linkProgramDone) { // Now we link the program again. gl.LinkProgram(shaderProgramObject); // Now that we've compiled and linked the shader, check it's link status. If it's not linked properly, we're // going to throw an exception. if (GetLinkStatus(gl) == false) { throw new ShaderCompilationException(string.Format("Failed to link shader program with ID {0}.", shaderProgramObject), GetInfoLog(gl)); } } }
public void BindAttributeLocation(OpenGL gl, uint location, string attribute) { gl.BindAttribLocation(shaderProgramObject, location, attribute); }