WebGLRenderingContext: bufferData() 方法

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

注意:此功能在 Web Workers 中可用。

WebGLRenderingContext.bufferData() 方法屬於 WebGL API,用於初始化和建立緩衝區物件的資料儲存。

語法

js
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 可選

一個 TypedArrayDataView,它會檢視化一個 ArrayBufferSharedArrayBuffer,這些資料將被複制到資料儲存中。如果為 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 錯誤。
  • 如果 targetusage 不是允許的列舉值之一,則會丟擲 gl.INVALID_ENUM 錯誤。

示例

使用 bufferData

js
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() 方法。

js
gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE);
gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_USAGE);

獲取型別化陣列的大小

計算型別化陣列的大小引數。

js
const dataArray = new Float32Array([1, 2, 3, 4]);
const sizeInBytes = dataArray.length * dataArray.BYTES_PER_ELEMENT;

規範

規範
WebGL 規範
# 5.14.5

瀏覽器相容性

另見