WebGLRenderingContext: enableVertexAttribArray() 方法
注意:此功能在 Web Workers 中可用。
WebGLRenderingContext 的 enableVertexAttribArray() 方法是 WebGL API 的一部分,它用于打开指定索引处的通用顶点属性数组。这些数组存储在 WebGL 上下文维护的属性数组列表中。
注意: 你可以通过调用 disableVertexAttribArray() 来禁用该属性数组。
在 WebGL 中,应用于特定顶点的数值存储在 属性 (attributes) 中。这些属性仅对 JavaScript 代码和顶点着色器可用。属性通过 GPU 维护的属性列表中的索引号进行引用。某些顶点属性索引可能具有预定义的用途,具体取决于平台和/或 GPU。其他索引则由 WebGL 层在创建属性时分配。
无论哪种情况,由于属性必须启用才能使用,并且默认是禁用的,因此你需要调用 enableVertexAttribArray() 来启用各个属性,以便它们能够被使用。一旦完成此操作,就可以使用其他方法来访问属性,包括 vertexAttribPointer()、vertexAttrib*() 和 getVertexAttrib()。
语法
enableVertexAttribArray(index)
参数
index-
一个
GLuint,指定唯一标识要启用的顶点属性的索引号。如果你知道属性的名称但不知道其索引,可以通过调用getAttribLocation()来获取索引。
返回值
无(undefined)。
错误
要在调用 enableVertexAttribArray() 后检查错误,请调用 getError()。
WebGLRenderingContext.INVALID_VALUE-
指定的
index无效;即,它大于或等于上下文的顶点属性列表允许的最大条目数,该数量由WebGLRenderingContext.MAX_VERTEX_ATTRIBS的值指示。
示例
这段代码——摘自完整示例 一个基本的 2D WebGL 动画示例——展示了如何使用 enableVertexArray() 来激活将被 WebGL 层用于将单个顶点从顶点缓冲区传入顶点着色器函数的属性。
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
aVertexPosition = gl.getAttribLocation(shaderProgram, "aVertexPosition");
gl.enableVertexAttribArray(aVertexPosition);
gl.vertexAttribPointer(
aVertexPosition,
vertexNumComponents,
gl.FLOAT,
false,
0,
0,
);
gl.drawArrays(gl.TRIANGLES, 0, vertexCount);
注意: 此代码片段摘自“一个基本的 2D WebGL 动画示例”中的 animateScene() 函数。请参阅该文章以获取完整示例,并查看实际的动画效果。
此代码通过调用 bindBuffer() 来设置将用于绘制形状三角形的顶点缓冲区。然后,通过调用 getAttribLocation() 从着色器程序中获取顶点位置属性的索引。
现在,当顶点位置属性的索引存储在 aVertexPosition 中后,我们调用 enableVertexAttribArray() 来启用位置属性,以便着色器程序(特别是顶点着色器)可以使用它。
然后,通过调用 vertexAttribPointer() 将顶点缓冲区绑定到 aVertexPosition 属性。此步骤并不明显,因为此绑定几乎是一个副作用。但结果是,访问 aVertexPosition 现在将从顶点缓冲区获取数据。
在形状的顶点缓冲区和用于将顶点逐个传递到顶点着色器的 aVertexPosition 属性之间建立关联后,我们就可以通过调用 drawArrays() 来绘制形状了。
规范
| 规范 |
|---|
| WebGL 规范 # 5.14.10 |
浏览器兼容性
加载中…