WebGLRenderingContext: метод getActiveUniform()
Базовая поддержка Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.
Примечание: Эта функция доступна в рабочих потоках.
Метод WebGLRenderingContext.getActiveUniform() API WebGL возвращает объект WebGLActiveInfo, содержащий размер, тип и имя атрибута униформы. Он обычно используется для запроса неизвестных униформ, как для отладки, так и для создания универсальных библиотек.
Синтаксис
getActiveUniform(program, index)
Параметры
program-
WebGLProgram, определяющий WebGL программу шейдеров, из которой нужно получить информацию об униформенной переменной. index-
GLuint, определяющий индекс атрибута униформы для получения. Это значение является индексом от 0 до N - 1, как возвращается методомgl.getProgramParameter(program, gl.ACTIVE_UNIFORMS).
Возвращаемое значение
Объект WebGLActiveInfo, описывающий униформу.
Атрибут type возвращаемого значения будет одним из следующих:
-
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 -
При использовании контекста WebGL 2, дополнительно возможны следующие значения:
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
При вызове gl.linkProgram, WebGL создает список активных униформ. Это возможные значения атрибута name значений, возвращаемых getActiveUniform. WebGL генерирует одну или несколько записей в списке в зависимости от объявленного типа униформы в шейдере:
-
Единственный базовый тип: одна запись с именем униформы. Например,
uniform vec4 a;приведет кa. -
Массив базового типа: одна запись с именем униформы, дополненная суффиксом
[0]. Например,uniform vec4 b[];приведет кb[0]. -
Тип структуры: одна запись для каждого элемента структуры. Например,
uniform struct { float foo; vec4 bar; } c;приведет кc.fooиc.bar. -
Массивы структур или массивов: каждый элемент массива сгенерирует свои собственные записи. Например,
uniform struct { float foo; vec4 bar; } d[2];приведет к:d[0].food[0].bard[1].food[1].bar
-
Блоки униформ: одна запись для каждого элемента. Если блок униформ имеет имя экземпляра, имя блока добавляется в префикс. Например,
uniform Block { float foo; };приведет кfoo, аuniform Block { float bar; } e;приведет кe.bar.
Атрибут size возвращаемого значения соответствует длине массива для униформ, объявленных как массивы. В противном случае он равен 1 (это включает блоки интерфейса, проинстанцированные массивами).
Исключения
-
gl.INVALID_VALUEгенерируется, если программаWebGLProgramнедействительна (не связана, удалена и т. д.). -
gl.INVALID_VALUEгенерируется, если index не находится в диапазоне [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);
}
Спецификации
| Спецификация |
|---|
| Спецификация WebGL # 5.14.10 |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
getActiveUniform |
9 | 12 | 4 | 12 | 5.1 | 25 | 4 | 12 | 8 | 1.5 | 4.4.3 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/getActiveUniform