WebGLRenderingContext: getActiveUniform() Methode
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die WebGLRenderingContext.getActiveUniform()-Methode der WebGL-API gibt ein WebGLActiveInfo-Objekt zurück, das Größe, Typ und Namen eines Uniform-Attributs enthält. Sie wird im Allgemeinen verwendet, wenn unbekannte Uniforms abgefragt werden, sei es für Debugging oder die Erstellung generischer Bibliotheken.
Syntax
getActiveUniform(program, index)
Parameter
program-
Ein
WebGLProgram, das das WebGL-Shader-Programm angibt, von dem die Informationen über die Uniform-Variable abgerufen werden sollen. index-
Ein
GLuint, der den Index des Uniform-Attributs angibt, das abgerufen werden soll. Dieser Wert ist ein Index von 0 bis N - 1, wie zurückgegeben vongl.getProgramParameter(program, gl.ACTIVE_UNIFORMS).
Rückgabewert
Ein WebGLActiveInfo-Objekt, das das Uniform beschreibt.
Das type-Attribut des Rückgabewerts wird einer der folgenden sein:
gl.FLOATgl.FLOAT_VEC2gl.FLOAT_VEC3gl.FLOAT_VEC4gl.INTgl.INT_VEC2gl.INT_VEC3gl.INT_VEC4gl.BOOLgl.BOOL_VEC2gl.BOOL_VEC3gl.BOOL_VEC4gl.FLOAT_MAT2gl.FLOAT_MAT3gl.FLOAT_MAT4gl.SAMPLER_2Dgl.SAMPLER_CUBE- Beim Verwenden eines WebGL 2-Kontexts sind zusätzlich folgende Werte möglich:
gl.UNSIGNED_INTgl.UNSIGNED_INT_VEC2gl.UNSIGNED_INT_VEC3gl.UNSIGNED_INT_VEC4gl.FLOAT_MAT2x3gl.FLOAT_MAT2x4gl.FLOAT_MAT3x2gl.FLOAT_MAT3x4gl.FLOAT_MAT4x2gl.FLOAT_MAT4x3gl.SAMPLER_3Dgl.SAMPLER_2D_SHADOWgl.SAMPLER_2D_ARRAYgl.SAMPLER_2D_ARRAY_SHADOWgl.SAMPLER_CUBE_SHADOWgl.INT_SAMPLER_2Dgl.INT_SAMPLER_3Dgl.INT_SAMPLER_CUBEgl.INT_SAMPLER_2D_ARRAYgl.UNSIGNED_INT_SAMPLER_2Dgl.UNSIGNED_INT_SAMPLER_3Dgl.UNSIGNED_INT_SAMPLER_CUBEgl.UNSIGNED_INT_SAMPLER_2D_ARRAY
Wenn gl.linkProgram aufgerufen wird, erstellt WebGL eine Liste von aktiven Uniforms. Dies sind mögliche Werte des name-Attributs der Rückgabewerte von getActiveUniform. WebGL generiert einen oder mehrere Einträge in der Liste abhängig von dem im Shader deklarierten Typ des Uniform:
-
Einzelner Basistyp: ein Eintrag mit dem Namen des Uniforms. Z.B.
uniform vec4 a;ergibta. -
Array eines Basistyps: ein Eintrag mit dem Namen des Uniforms, gefolgt von
[0]. Z.B.uniform vec4 b[];ergibtb[0]. -
Strukt-Typ: ein Eintrag für jedes Mitglied der Struktur. Z.B.
uniform struct { float foo; vec4 bar; } c;ergibtc.fooundc.bar. -
Arrays von Strukturen oder Arrays: jeder Eintrag im Array erzeugt eigene Einträge. Z.B.
uniform struct { float foo; vec4 bar; } d[2];ergibt:d[0].food[0].bard[1].food[1].bar
-
Uniform-Blöcke: ein Eintrag für jedes Mitglied. Wenn der Uniform-Block einen Instanznamen hat, wird der Blockname vorangestellt. Z.B.
uniform Block { float foo; };ergibtfoo, unduniform Block { float bar; } e;ergibte.bar.
Das size-Attribut des Rückgabewerts entspricht der Länge des Arrays für Uniforms, die als Arrays deklariert sind. Andernfalls ist es 1 (dies schließt Interface-Blöcke ein, die mit Arrays instanziiert sind).
Ausnahmen
gl.INVALID_VALUEwird generiert, wenn das ProgrammWebGLProgramungültig ist (nicht verlinkt, gelöscht, etc.).gl.INVALID_VALUEwird generiert, wenn der Index nicht im Bereich [0,gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS)- 1] liegt.
Beispiele
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);
}
Spezifikationen
| Specification |
|---|
| WebGL Specification> # 5.14.10> |
Browser-Kompatibilität
Loading…