Spec-Zone.ru › Web APIs

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_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

При вызове 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].foo
    • d[0].bar
    • d[1].foo
    • d[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

См. также

  • WebGLActiveInfo
  • WebGLRenderingContext.getUniformLocation()

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API