WebGL2RenderingContext: copyBufferSubData() 方法

Baseline 已廣泛支援

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

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

WebGL2RenderingContext.copyBufferSubData() 方法是 WebGL 2 API 的一部分,用於將一個緩衝區的**部分資料**複製到另一個緩衝區。

語法

js
copyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size)

引數

readTarget, writeTarget

一個 GLenum,指定了要從中讀取資料或寫入資料的目標繫結點(target)。可能的值包括:

  • 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: 用於畫素傳輸操作的緩衝區。
readOffset, writeOffset

一個 GLintptr,指定了從緩衝區開始讀取或寫入資料的位元組偏移量。

size

一個以位元組為單位的 GLsizei,指定了要從 readTarget 複製到 writeTarget 的資料大小。

返回值

無(undefined)。

示例

js
const srcBuffer = gl.createBuffer();
const dstBuffer = gl.createBuffer();

const data = new Float32Array(vertices);
const length = vertices.length * 4;

gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);

gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);

gl.copyBufferSubData(gl.COPY_READ_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);

規範

規範
WebGL 2.0 規範
# 3.7.3

瀏覽器相容性

另見