WebGLRenderingContext: getActiveUniform() method
The WebGLRenderingContext.getActiveUniform()
method of
the WebGL API returns a
WebGLActiveInfo
object containing size, type, and name of a uniform
attribute. It is generally used when querying unknown uniforms either for debugging or
generic library creation.
Syntax
js
getActiveUniform(program, index)
Parameters
program
-
A
WebGLProgram
specifying the WebGL shader program from which to obtain the uniform variable's information. index
-
A
GLuint
specifying the index of the uniform attribute to get. This value is an index 0 to N - 1 as returned bygl.getProgramParameter(program, gl.ACTIVE_UNIFORMS)
.
Return value
A WebGLActiveInfo
object describing the uniform.
The type
attribute of the return value will be one of the following:
gl.FLOAT
gl.FLOAT_VEC2
gl.FLOAT_VEC3
gl.FLOAT_VEC4
gl.INT
gl.INT_VEC2
gl.INT_VEC3
gl.INT_VEC4
gl.BOOL
gl.BOOL_VEC2
gl.BOOL_VEC3
gl.BOOL_VEC4
gl.FLOAT_MAT2
gl.FLOAT_MAT3
gl.FLOAT_MAT4
gl.SAMPLER_2D
gl.SAMPLER_CUBE
-
When using a WebGL 2 context, the
following values are possible additionally:
gl.UNSIGNED_INT
gl.UNSIGNED_INT_VEC2
gl.UNSIGNED_INT_VEC3
gl.UNSIGNED_INT_VEC4
gl.FLOAT_MAT2x3
gl.FLOAT_MAT2x4
gl.FLOAT_MAT3x2
gl.FLOAT_MAT3x4
gl.FLOAT_MAT4x2
gl.FLOAT_MAT4x3
gl.SAMPLER_3D
gl.SAMPLER_2D_SHADOW
gl.SAMPLER_2D_ARRAY
gl.SAMPLER_2D_ARRAY_SHADOW
gl.SAMPLER_CUBE_SHADOW
gl.INT_SAMPLER_2D
gl.INT_SAMPLER_3D
gl.INT_SAMPLER_CUBE
gl.INT_SAMPLER_2D_ARRAY
gl.UNSIGNED_INT_SAMPLER_2D
gl.UNSIGNED_INT_SAMPLER_3D
gl.UNSIGNED_INT_SAMPLER_CUBE
gl.UNSIGNED_INT_SAMPLER_2D_ARRAY
When gl.linkProgram
is called, WebGL creates a list of active uniforms.
These are possible values of the name
attribute of return values of
getActiveUniform
. WebGL
generates one or more entries in the list depending on the declared type of the uniform
in the shader:
-
Single basic type: one entry with the name of the uniform. E.g.
uniform vec4 a;
will result ina
. -
Array of basic type: one entry with the name of the uniform suffixed with
[0]
. E.g.uniform vec4 b[];
will result inb[0]
. -
Struct type: one entry for each member of the struct. E.g.
uniform struct { float foo; vec4 bar; } c;
will result inc.foo
andc.bar
. -
Arrays of structs or arrays: each entry of the array will generate its own entries.
E.g.
uniform struct { float foo; vec4 bar; } d[2];
will result in:d[0].foo
d[0].bar
d[1].foo
d[1].bar
-
Uniform blocks: one entry for each member. If the uniform block has an instance
name, the block name is prefixed. E.g.
uniform Block { float foo; };
will result infoo
, anduniform Block { float bar; } e;
will result ine.bar
.
The size
attribute of the return value corresponds to the length of the
array for uniforms declared as arrays. Otherwise, it is 1 (this includes interface
blocks instanced with arrays).
Exceptions
-
gl.INVALID_VALUE
is generated if the programWebGLProgram
is invalid (not linked, deleted, etc.). -
gl.INVALID_VALUE
is generated if index is not in the range [0,gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS)
- 1].
Examples
js
const numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
for (let i = 0; i < numUniforms; ++i) {
const info = gl.getActiveUniform(program, i);
console.log("name:", info.name, "type:", info.type, "size:", info.size);
}
Specifications
Specification |
---|
WebGL Specification # 5.14.10 |
Browser compatibility
BCD tables only load in the browser