Name
glGetUniformLocation — Returns the location of a uniform variableC Specification
GLint glGetUniformLocation( | GLuint | program, |
const GLchar * | name) ; |
Parameters
program
- Specifies the program object to be queried.
name
- Points to a null terminated string containing the name of the uniform variable whose location is to be queried.
Description
glGetUniformLocation
returns an integer that represents the location of a specific uniform variable within a program object. name
must be a null terminated string that contains no white space. name
must be an active uniform variable name in program
that is not a structure, an array of structures, or a subcomponent of a vector or a matrix. This function returns -1 if name
does not correspond to an active uniform variable in program
or if name
starts with the reserved prefix "gl_".Uniform variables that are structures or arrays of structures may be queried by calling
glGetUniformLocation
for each field within the structure. The array element operator "[]" and the structure field operator "." may be used in name
in order to select elements within an array or fields within a structure. The result of using these operators is not allowed to be another structure, an array of structures, or a subcomponent of a vector or a matrix. Except if the last part of name
indicates a uniform variable array, the location of the first element of an array can be retrieved by using the name of the array, or by using the name appended by "[0]".The actual locations assigned to uniform variables are not known until the program object is linked successfully. After linking has occurred, the command
glGetUniformLocation
can be used to obtain the location of a uniform variable. This location value can then be passed to glUniform to set the value of the uniform variable or to glGetUniform in order to query the current value of the uniform variable. After a program object has been linked successfully, the index values for uniform variables remain fixed until the next link command occurs. Uniform variable locations and values can only be queried after a link if the link was successful.Notes
glGetUniformLocation
is available only if the GL version is 2.0 or greater.Errors
GL_INVALID_VALUE
is generated if program
is not a value generated by OpenGL.GL_INVALID_OPERATION
is generated if program
is not a program object.GL_INVALID_OPERATION
is generated if program
has not been successfully linked.GL_INVALID_OPERATION
is generated if glGetUniformLocation
is executed between the execution of glBegin and the corresponding execution of glEnd.Associated Gets
glGetActiveUniform with argumentsprogram
and the index of an active uniform variableglGetProgram with arguments
program
and GL_ACTIVE_UNIFORMS
or GL_ACTIVE_UNIFORM_MAX_LENGTH
glGetUniform with arguments
program
and the name of a uniform variableglIsProgram
Copyright
Copyright © 2003-2005 3Dlabs Inc. Ltd. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.Example
// Shader codeuniform sampler2D normalMap : TEXUNIT0,
uniform samplerCUBE normalizeCube : TEXUNIT1,
uniform samplerCUBE normalizeCube2 : TEXUNIT2
// C code to reference the uniform.
//
GLint loc = glGetUniformLocation(program, "normalMap");
glUniformi(loc, 0);
loc = glGetUniformLocation(program, "normalizeCube");
glUniformi(loc, 1);
loc = glGetUniformLocation(program, "normalizeCube2");
glUniformi(loc, 2);