Spec-Zone.ru › Web APIs

WebGLRenderingContext: метод getUniformLocation()

Базовая линия Широко поддерживается

Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Web Workers.

Как часть API WebGL, метод WebGLRenderingContext getUniformLocation() возвращает расположение конкретной переменной uniform, которая входит в состав заданной WebGLProgram.

Переменная uniform возвращается как объект WebGLUniformLocation, который представляет собой некий идентификатор, используемый для указания места в памяти графического процессора, где расположена переменная uniform.

После получения расположения uniform, вы можете получить доступ к самой uniform, используя один из других методов доступа к uniform, передав расположение uniform в качестве одного из входных параметров:

getUniform()

Возвращает значение uniform в заданном расположении.

WebGLRenderingContext.uniform[1234][fi][v]()

Устанавливает значение uniform в указанное значение, которое может быть одним плавающим или целым числом, или вектором с 2-4 компонентами, указанным либо как список значений, либо как Float32Array или Int32Array.

WebGLRenderingContext.uniformMatrix[234][fv]()

Устанавливает значение uniform в указанную матрицу, возможно с транспонированием. Значение представлено как последовательность GLfloat значений или как Float32Array.

Сама uniform объявляется в программе шейдера с помощью GLSL.

Синтаксис

getUniformLocation(program, name)

Параметры

program

WebGLProgram программа, в которой необходимо найти указанную переменную uniform.

name

Строка, определяющая имя переменной uniform, расположение которой требуется вернуть. Имя не может содержать пробелы, и вы не можете использовать эту функцию для получения расположения uniform, начинающихся со зарезервированной строки "gl_", так как они являются внутренними для уровня WebGL.

Возможные значения соответствуют именам uniform, возвращаемым функцией getActiveUniform; см. эту функцию для получения подробностей о том, как объявленные uniform сопоставляются с именами расположений uniform.

Кроме того, для uniform, объявленных как массивы, также допустимы следующие имена:

  • Имя uniform без суффикса [0]. Например, расположение, возвращаемое для arrayUniform, эквивалентно расположению для arrayUniform[0].
  • Имя uniform с индексом целого числа. Например, расположение, возвращаемое для arrayUniform[2], указывает непосредственно на третий элемент uniform arrayUniform.

Значение, возвращаемое функцией

Значение WebGLUniformLocation, указывающее на расположение переменной, если она существует. Если указанная переменная не найдена, возвращается null.

WebGLUniformLocation — это непрозрачное значение, используемое для уникальной идентификации расположения в памяти графического процессора, где расположена переменная uniform. Имея это значение, вы можете вызвать другие методы WebGL для доступа к значению переменной uniform.

Примечание: Тип WebGLUniformLocation совместим с типом GLint при указании индекса или расположения атрибута uniform.

Ошибки

Могут возникнуть следующие ошибки; чтобы проверить наличие ошибок после того, как getUniformLocation() вернёт результат, вызовите getError().

GL_INVALID_VALUE

Параметр program не является значением или объектом, сгенерированным WebGL.

GL_INVALID_OPERATION

Параметр program не соответствует программе GLSL, сгенерированной WebGL, или указанная программа не была успешно связана.

Примеры

В этом примере, взятом из метода animateScene() в статье Пример анимации 2D WebGL, получаются расположения трёх uniform из программы шейдеров, а затем устанавливаются значения каждой из трёх uniform.

gl.useProgram(shaderProgram);

uScalingFactor = gl.getUniformLocation(shaderProgram, "uScalingFactor");
uGlobalColor = gl.getUniformLocation(shaderProgram, "uGlobalColor");
uRotationVector = gl.getUniformLocation(shaderProgram, "uRotationVector");

gl.uniform2fv(uScalingFactor, currentScale);
gl.uniform2fv(uRotationVector, currentRotation);
gl.uniform4fv(uGlobalColor, [0.1, 0.7, 0.2, 1.0]);

Примечание: Этот фрагмент кода взят из функции animateScene() в примере анимации 2D WebGL. См. эту статью для полного примера и для того, чтобы увидеть анимацию в действии.

После установки текущей программы шейдеров на shaderProgram, этот код извлекает три uniform "uScalingFactor", "uGlobalColor", и "uRotationVector", вызывая getUniformLocation() один раз для каждой uniform.

Затем устанавливаются значения трёх uniform:

  • Uniform uScalingFactor — 2-компонентный вершинный параметр — получает горизонтальный и вертикальный масштабные множители из переменной currentScale.
  • Uniform uRotationVector устанавливается в содержимое переменной currentRotation. Это также 2-компонентный вершинный параметр.
  • Наконец, uniform uGlobalColor устанавливается в цвет [0.1, 0.7, 0.2, 1.0], компоненты этого 4-компонентного вектора представляют значения красного, зеленого, синего и альфа-каналов соответственно.

После этого, при следующем вызове функций шейдеров, их собственные переменные с именами uScalingFactor, uGlobalColor, и uRotationVector будут иметь значения, заданные кодом JavaScript.

Спецификации

Спецификация
Спецификация WebGL
# 5.14.10

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
getUniformLocation 9 12 4 12 5.1 25 4 12 8 1.5 4.4.3

См. также

  • WebGLRenderingContext.getAttribLocation()
  • WebGLRenderingContext.getActiveUniform()
  • WebGLUniformLocation

© 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/getUniformLocation

Spec-Zone.ru

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