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 |
瀏覽器相容性
載入中…