WebGLRenderingContext: bufferData() 方法
注意:此功能在 Web Workers 中可用。
WebGLRenderingContext.bufferData() 方法屬於 WebGL API,用於初始化和建立緩衝區物件的資料儲存。
語法
bufferData(target, size, usage)
bufferData(target, srcData, usage)
引數
目標-
一個
GLenum,指定繫結點(目標)。可能的值gl.ARRAY_BUFFER-
包含頂點屬性的緩衝區,例如頂點座標、紋理座標資料或頂點顏色資料。
gl.ELEMENT_ARRAY_BUFFER-
用於元素索引的緩衝區。
使用 WebGL 2 上下文時,還可以使用以下值:
gl.COPY_READ_BUFFER-
用於將一個緩衝區物件複製到另一個緩衝區的緩衝區。
gl.COPY_WRITE_BUFFER-
用於將一個緩衝區物件複製到另一個緩衝區的緩衝區。
gl.TRANSFORM_FEEDBACK_BUFFER-
用於變換反饋操作的緩衝區。
gl.UNIFORM_BUFFER-
用於儲存 uniform 塊的緩衝區。
gl.PIXEL_PACK_BUFFER-
用於畫素傳輸操作的緩衝區。
gl.PIXEL_UNPACK_BUFFER-
用於畫素傳輸操作的緩衝區。
size-
一個
GLsizeiptr,用於設定緩衝區物件資料儲存的大小(以位元組為單位)。 srcData可選-
一個
TypedArray或DataView,它會檢視化一個ArrayBuffer或SharedArrayBuffer,這些資料將被複制到資料儲存中。如果為null,仍然會建立一個數據儲存,但其內容是未初始化且未定義的。 usage-
一個
GLenum,指定資料儲存的預期使用模式,以用於最佳化。可能的值包括:gl.STATIC_DRAW-
內容預計由應用程式一次性指定,並多次用作 WebGL 繪製和影像規範命令的源。
gl.DYNAMIC_DRAW-
內容預計由應用程式重複指定,並多次用作 WebGL 繪製和影像規範命令的源。
gl.STREAM_DRAW-
內容預計由應用程式一次性指定,並最多用作 WebGL 繪製和影像規範命令的幾次源。
使用 WebGL 2 上下文時,還可以使用以下值:
gl.STATIC_READ-
內容預計透過從 WebGL 讀取資料一次性指定,並多次由應用程式查詢。
gl.DYNAMIC_READ-
內容預計透過從 WebGL 讀取資料重複指定,並多次由應用程式查詢。
gl.STREAM_READ-
內容預計透過從 WebGL 讀取資料一次性指定,並最多由應用程式查詢幾次。
gl.STATIC_COPY-
內容預計透過從 WebGL 讀取資料一次性指定,並多次用作 WebGL 繪製和影像規範命令的源。
gl.DYNAMIC_COPY-
內容預計透過從 WebGL 讀取資料重複指定,並多次用作 WebGL 繪製和影像規範命令的源。
gl.STREAM_COPY-
內容預計透過從 WebGL 讀取資料一次性指定,並最多用作 WebGL 繪製和影像規範命令的幾次源。
返回值
無(undefined)。
異常
- 如果上下文無法使用給定的
size建立資料儲存,則會丟擲gl.OUT_OF_MEMORY錯誤。 - 如果
size為負數,則會丟擲gl.INVALID_VALUE錯誤。 - 如果
target或usage不是允許的列舉值之一,則會丟擲gl.INVALID_ENUM錯誤。
示例
使用 bufferData
const canvas = document.getElementById("canvas");
const gl = canvas.getContext("webgl");
const buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, 1024, gl.STATIC_DRAW);
獲取緩衝區資訊
要檢查當前的緩衝區使用情況和緩衝區大小,請使用 WebGLRenderingContext.getBufferParameter() 方法。
gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE);
gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_USAGE);
獲取型別化陣列的大小
計算型別化陣列的大小引數。
const dataArray = new Float32Array([1, 2, 3, 4]);
const sizeInBytes = dataArray.length * dataArray.BYTES_PER_ELEMENT;
規範
| 規範 |
|---|
| WebGL 規範 # 5.14.5 |
瀏覽器相容性
載入中…