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
 by `gl.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 in `a`.
* Array of basic type: one entry with the name of the uniform suffixed with
 `[0]`. E.g. `uniform vec4 b[];` will result in
 `b[0]`.
* Struct type: one entry for each member of the struct. E.g.
 `uniform struct { float foo; vec4 bar; } c;` will result in
 `c.foo` and `c.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 in `foo`, and `uniform Block { float bar; } e;` will
 result in `e.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 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].
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 with JavaScript enabled. Enable JavaScript to view data.

See also
--------

* `WebGLActiveInfo`
* `WebGLRenderingContext.getUniformLocation()`