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

浏览器兼容性

另见