The WebGL2RenderingContext.vertexAttribIPointer()
method of the WebGL 2 API specifies integer data formats and locations of vertex attributes in a vertex attributes array.
The WebGL2RenderingContext.vertexAttribIPointer()
method of the WebGL 2 API specifies integer data formats and locations of vertex attributes in a vertex attributes array.
js
vertexAttribIPointer(index, size, type, stride, offset)
index
A GLuint
specifying the index of the vertex attribute that is to be modified.
size
A GLint
specifying the number of components per vertex attribute. Must be 1, 2, 3, or 4.
type
A GLenum
specifying the data type of each component in the array. Must be one of: gl.BYTE
, gl.UNSIGNED_BYTE
, gl.SHORT
, gl.UNSIGNED_SHORT
, gl.INT
, or gl.UNSIGNED_INT
.
stride
A GLsizei
specifying the offset in bytes between the beginning of consecutive vertex attributes.
offset
A GLintptr
specifying an offset in bytes of the first component in the vertex attribute array. Must be a multiple of type
.
None (undefined
).
Very similar to WebGLRenderingContext.vertexAttribPointer()
. The main difference is that while values specified by vertexAttribPointer
are always interpreted as floating-point values in the shader (even if they were originally specified as integers in the buffer), this method allows specifying values which are interpreted as integers in the shader.
js
//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");
html
<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>
Specification |
---|
WebGL 2.0 Specification # 3.7.8 |
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
vertexAttribIPointer |
56 | 79 | 51 | No | 43 | 15 | 58 | 58 | 51 | 43 | 15 | 7.0 |
© 2005–2023 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