WebGLRenderingContext.getActiveUniform() - Web APIs 编辑
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
WebGLActiveInfo WebGLRenderingContext.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 inBlock.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
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 | 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. |
Browser compatibility
BCD tables only load in the browser
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
See also
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论