WebGL2RenderingContext:getBufferSubData() 方法
WebGL2RenderingContext.getBufferSubData()
方法是 WebGL 2 API 的一部分,用于读取缓冲区绑定点中的数据并将其写入 ArrayBuffer
或 SharedArrayBuffer
。
语法
js
getBufferSubData(target, srcByteOffset, dstData)
getBufferSubData(target, srcByteOffset, dstData, dstOffset)
getBufferSubData(target, srcByteOffset, dstData, dstOffset, length)
参数
target
-
一个
GLenum
,指定绑定点(目标)。可能的值gl.ARRAY_BUFFER
-
包含顶点属性的缓冲区,例如顶点坐标、纹理坐标数据或顶点颜色数据。
gl.ELEMENT_ARRAY_BUFFER
-
用于元素索引的缓冲区。
gl.COPY_READ_BUFFER
-
用于从一个缓冲区对象复制到另一个缓冲区对象的缓冲区。
gl.COPY_WRITE_BUFFER
-
用于从一个缓冲区对象复制到另一个缓冲区对象的缓冲区。
gl.TRANSFORM_FEEDBACK_BUFFER
-
用于变换反馈操作的缓冲区。
gl.UNIFORM_BUFFER
-
用于存储统一块的缓冲区。
gl.PIXEL_PACK_BUFFER
-
用于像素传输操作的缓冲区。
gl.PIXEL_UNPACK_BUFFER
-
用于像素传输操作的缓冲区。
srcByteOffset
-
一个
GLintptr
,指定从缓冲区中开始读取的字节偏移量。 dstData
-
一个
TypedArray
或DataView
对象,用于复制数据。如果dstData
是一个DataView
,则dstOffset
和length
以字节为单位解释,否则使用dstData
的元素类型。 dstOffset
可选-
一个
GLuint
,指定在dstData
中开始写入的元素索引偏移量。 length
可选-
一个
GLuint
,指定要复制的元素数量。如果此值为 0 或未指定,则getBufferSubData
将复制到dstData
的末尾。
返回值
无 (undefined
).
异常
如果以下情况发生,则会生成 INVALID_VALUE
错误:
-
offset
+returnedData.byteLength
将超出缓冲区的末尾 returnedData
为null
offset
小于零。
如果以下情况发生,则会生成 INVALID_OPERATION
错误:
- 零绑定到
target
-
target
为TRANSFORM_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 |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。