WebGL2RenderingContext: метод vertexAttribIPointer()
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузера. Она доступна в браузерах с сентября 2021 года.
Примечание: Эта функция доступна в Потоках веб-работы.
Метод WebGL2RenderingContext.vertexAttribIPointer() API WebGL 2 определяет форматы целочисленных данных и расположения атрибутов вершин в массиве атрибутов вершин.
Синтаксис
vertexAttribIPointer(index, size, type, stride, offset)
Параметры
index-
A
GLuintопределяющий индекс атрибута вершины, который требуется изменить. size-
A
GLintопределяющий количество компонентов на атрибут вершины. Должно быть 1, 2, 3 или 4. type-
A
GLenumопределяющий тип данных каждого компонента в массиве. Должно быть одно из значений:gl.BYTE,gl.UNSIGNED_BYTE,gl.SHORT,gl.UNSIGNED_SHORT,gl.INT, илиgl.UNSIGNED_INT. stride-
A
GLsizeiопределяющий смещение в байтах между началом последовательных атрибутов вершины. offset-
A
GLintptrопределяющий смещение в байтах первого компонента в массиве атрибутов вершины. Должно быть кратноtype.
Значение результата
None (undefined).
Описание
Очень похож на WebGLRenderingContext.vertexAttribPointer(). Основное различие заключается в том, что в то время как значения, заданные vertexAttribPointer, всегда интерпретируются как значения с плавающей точкой в шейдере (даже если они были изначально заданы как целые числа в буфере), этот метод позволяет задавать значения, интерпретируемые как целые числа в шейдере.
Примеры
Линейное смешивание скелетирования
//Describe the layout of the buffer: //1. position gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 20, 0); gl.enableVertexAttribArray(0); //2. bone weights, normalized to [0, 1] gl.vertexAttribPointer(1, 4, gl.UNSIGNED_BYTE, true, 20, 12); gl.enableVertexAttribArray(1); //3. bone indices, interpreted as integer gl.vertexAttribIPointer(2, 4, gl.UNSIGNED_BYTE, 20, 16); gl.enableVertexAttribArray(2); //Connect to attributes from the vertex shader gl.bindAttribLocation(shaderProgram, 0, "position"); gl.bindAttribLocation(shaderProgram, 1, "boneWeights"); gl.bindAttribLocation(shaderProgram, 2, "boneIndices");
<script id="shader-vs" type="x-shader/x-vertex">
#version 300 es
uniform mat4 mvMatrix;
uniform mat4 bones[120];
in vec3 position;
in vec4 boneWeights;
in uvec4 boneIndices;//read as 4-component unsigned integer
void main() {
vec4 skinnedPosition =
bones[boneIndices.s] * vec4(position, 1.0) * boneWeights.s +
bones[boneIndices.t] * vec4(position, 1.0) * boneWeights.t +
bones[boneIndices.p] * vec4(position, 1.0) * boneWeights.p +
bones[boneIndices.q] * vec4(position, 1.0) * boneWeights.q;
gl_Position = mvMatrix * skinnedPosition;
}
</script>
Спецификации
| Спецификация |
|---|
| Спецификация WebGL 2.0 # 3.7.8 |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
vertexAttribIPointer |
56 | 79 | 51 | 43 | 15 | 58 | 51 | 43 | 15 | 7.0 | 58 |
См. также
© 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/WebGL2RenderingContext/vertexAttribIPointer