files/en-us/web/api/webgl2renderingcontext/getbuffersubdata/index.md
{{APIRef("WebGL")}}{{AvailableInWorkers}}
The WebGL2RenderingContext.getBufferSubData() method of
the WebGL 2 API reads data from a buffer
binding point and writes them to an {{jsxref("ArrayBuffer")}} or
{{jsxref("SharedArrayBuffer")}}.
getBufferSubData(target, srcByteOffset, dstData)
getBufferSubData(target, srcByteOffset, dstData, dstOffset)
getBufferSubData(target, srcByteOffset, dstData, dstOffset, length)
target
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
dstData
dstData is a
{{jsxref("DataView")}} then dstOffset and length are
interpreted in bytes, otherwise dstData's element type is used.dstOffset {{optional_inline}}
dstData.length {{optional_inline}}
getBufferSubData will copy until the end of
dstData.None ({{jsxref("undefined")}}).
An INVALID_VALUE error is generated if:
offset + returnedData.byteLength would extend beyond the
end of the bufferreturnedData is nulloffset is less than zero.An INVALID_OPERATION error is generated if:
targettarget is TRANSFORM_FEEDBACK_BUFFER, and any transform
feedback object is currently active.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));
{{Specifications}}
{{Compat}}