The uniform variable is returned as a
WebGLUniformLocation object, which is an opaque identifier used to
specify where in the GPU's memory that uniform variable is located.
Once you have the uniform's location, you can access the uniform itself using one of the other uniform access methods, passing in the uniform location as one of the inputs:
- : Returns the value of the uniform at the given location.
: Sets the uniform's value to the specified matrix, possibly with transposition. The
value is represented as a sequence of
GLfloatvalues or as a
- : Sets the uniform's value to the specified matrix, possibly with transposition. The value is represented as a sequence of
The uniform itself is declared in the shader program using GLSL.
WebGLProgramin which to locate the specified uniform variable.
A string specifying the name of the uniform variable whose location is to be returned. The name can't have any whitespace in it, and you can't use this function to get the location of any uniforms starting with the reserved string
"gl_", since those are internal to the WebGL layer.
The possible values correspond to the uniform names returned by
getActiveUniform; see that function for specifics on how declared uniforms map to uniform location names.
Additionally, for uniforms declared as arrays, the following names are also valid:
The uniform name without the
suffix. E.g. the location returned for
arrayUniformis equivalent to the one for
The uniform name indexed with an integer. E.g. the location returned for
arrayUniformwould point directly to the third entry of the
- The uniform name without the
WebGLUniformLocation is an opaque value used to uniquely identify the
location in the GPU's memory at which the uniform variable is located. With this value
in hand, you can call other WebGL methods to access the value of the uniform variable.
WebGLUniformLocation type is compatible with the
GLint type when specifying the index or location of a uniform
The following errors may occur; to check for errors after
getUniformLocation() returns, call
programparameter is not a value or object generated by WebGL.
programparameter doesn't correspond to a GLSL program generated by WebGL, or the specified program hasn't been linked successfully.
In this example, taken from the
animateScene() method in the article A basic 2D WebGL animation example, obtains the locations of three uniforms from
the shading program, then sets the value of each of the three uniforms.
gl.useProgram(shaderProgram); uScalingFactor = gl.getUniformLocation(shaderProgram, "uScalingFactor"); uGlobalColor = gl.getUniformLocation(shaderProgram, "uGlobalColor"); uRotationVector = gl.getUniformLocation(shaderProgram, "uRotationVector"); gl.uniform2fv(uScalingFactor, currentScale); gl.uniform2fv(uRotationVector, currentRotation); gl.uniform4fv(uGlobalColor, [0.1, 0.7, 0.2, 1.0]);
Note: This code snippet is taken from the function
animateScene() in "A basic 2D WebGL animation example."
See that article for the full sample and to see the resulting animation in action.
After setting the current shading program to
shaderProgram, this code
fetches the three uniforms
getUniformLocation() once for
Then the three uniforms' values are set:
uScalingFactoruniform — a 2-component vertex — receives the horizontal and vertical scaling factors from the variable
uRotationVectoris set to the contents of the variable
currentRotation. This, too, is a 2-component vertex.
Finally, the uniform
uGlobalColoris set to the color
[0.1, 0.7, 0.2, 1.0], the components in this 4-component vector represent the values of red, green, blue, and alpha, respectively.
Having done this, the next time the shading functions are called, their own variables
|WebGL Specification |
BCD tables only load in the browser