WebGL2RenderingContext: getBufferSubData() 方法

Baseline 廣泛可用 *

此功能已成熟,並可在多種裝置和瀏覽器版本上執行。自 2021 年 9 月起,所有瀏覽器均已支援此功能。

* 此特性的某些部分可能存在不同級別的支援。

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

WebGL2RenderingContext.getBufferSubData() 方法是 WebGL 2 API 的一部分,用於從緩衝區繫結點讀取資料,並將其寫入 ArrayBufferSharedArrayBuffer

語法

js
getBufferSubData(target, srcByteOffset, dstData)
getBufferSubData(target, srcByteOffset, dstData, dstOffset)
getBufferSubData(target, srcByteOffset, dstData, dstOffset, length)

引數

目標

一個 GLenum,指定繫結點(目標)。可能的值

gl.ARRAY_BUFFER

包含頂點屬性的緩衝區,例如頂點座標、紋理座標資料或頂點顏色資料。

gl.ELEMENT_ARRAY_BUFFER

用於元素索引的緩衝區。

gl.COPY_READ_BUFFER

用於將一個緩衝區物件複製到另一個緩衝區的緩衝區。

gl.COPY_WRITE_BUFFER

用於將一個緩衝區物件複製到另一個緩衝區的緩衝區。

gl.TRANSFORM_FEEDBACK_BUFFER

用於變換反饋操作的緩衝區。

gl.UNIFORM_BUFFER

用於儲存 uniform 塊的緩衝區。

gl.PIXEL_PACK_BUFFER

用於畫素傳輸操作的緩衝區。

gl.PIXEL_UNPACK_BUFFER

用於畫素傳輸操作的緩衝區。

srcByteOffset

一個 GLintptr,指定從緩衝區開始讀取的位元組偏移量。

dstData

一個 TypedArrayDataView 物件,用於複製資料。如果 dstDataDataView,則 dstOffsetlength 以位元組為單位解釋,否則將使用 dstData 的元素型別。

dstOffset 可選

一個 GLuint,指定在 dstData 中開始寫入的元素索引偏移量。

length 可選

一個 GLuint,指定要複製的元素數量。如果此值為 0 或未指定,getBufferSubData 將一直複製到 dstData 的末尾。

返回值

無(undefined)。

異常

如果滿足以下條件,則會生成 INVALID_VALUE 錯誤:

  • offset + returnedData.byteLength 超出了緩衝區的末尾
  • returnedDatanull
  • offset 小於零。

如果滿足以下條件,則會生成 INVALID_OPERATION 錯誤:

  • target 繫結到零
  • targetTRANSFORM_FEEDBACK_BUFFER,並且當前有任何變換反饋物件處於活動狀態。

示例

js
const buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);

const arrBuffer = new ArrayBuffer(
  vertices.length * Float32Array.BYTES_PER_ELEMENT,
);
gl.getBufferSubData(gl.ARRAY_BUFFER, 0, new Float32Array(arrBuffer));

規範

規範
WebGL 2.0 規範
# 3.7.3

瀏覽器相容性

另見