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.
WebGLActiveInfo WebGLRenderingContext.getActiveUniform(program, index);
program
WebGLProgram
specifying the WebGL shader program from which to obtain the uniform variable's information.index
GLuint
specifying the index of the uniform attribute to get. This value is an index 0 to N - 1 as returned by gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS)
.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
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_2D
gl.SAMPLER_3D
gl.SAMPLER_CUBE
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:
uniform vec4 a;
will result in a
.[0]
. E.g. uniform vec4 b[];
will result in b[0]
.uniform struct { float foo; vec4 bar; } c;
will result in c.foo
and c.bar
.uniform struct { float foo; vec4 bar; } d[2];
will result in: d[0].foo
d[0].bar
d[1].foo
d[1].bar
uniform Block { float foo; };
will result in foo
, and uniform Block { float bar; } e;
will result in Block.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).
gl.INVALID_VALUE
is generated if the program WebGLProgram
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].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); }
Specification | Status | Comment |
---|---|---|
WebGL 1.0 The definition of 'getActiveUniform' in that specification. | Recommendation | Initial definition. |
OpenGL ES 2.0 The definition of 'glGetActiveUniform' in that specification. | Standard | Man page of the OpenGL API. |
Desktop | ||||||
---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
Basic support | 9 | 12 | 4 | 11 | 12 | 5.1 |
Mobile | |||||||
---|---|---|---|---|---|---|---|
Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
Basic support | Yes | 25 | Yes | Yes | 12 | 8.1 | Yes |
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/getActiveUniform