This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

The WebGL2RenderingContext.getBufferSubData() method of the WebGL 2 API reads data from a buffer binding point and writes them to an ArrayBuffer or SharedArrayBuffer.


void gl.getBufferSubData(target, srcByteOffset, ArrayBufferView dstData, optional dstOffset, optional length);


A GLenum specifying the binding point (target). Possible values:
  • gl.ARRAY_BUFFER: Buffer containing vertex attributes, such as vertex coordinates, texture coordinate data, or vertex color data.
  • gl.ELEMENT_ARRAY_BUFFER: Buffer used for element indices.
  • gl.COPY_READ_BUFFER: Buffer for copying from one buffer object to another.
  • gl.COPY_WRITE_BUFFER: Buffer for copying from one buffer object to another.
  • gl.TRANSFORM_FEEDBACK_BUFFER: Buffer for transform feedback operations.
  • gl.UNIFORM_BUFFER: Buffer used for storing uniform blocks.
  • gl.PIXEL_PACK_BUFFER: Buffer used for pixel transfer operations.
  • gl.PIXEL_UNPACK_BUFFER: Buffer used for pixel transfer operations.
A GLintptr specifying the byte offset from which to start reading from the buffer.
An ArrayBuffer or SharedArrayBuffer to which to write the buffer data.
srcOffset Optional
A GLuint specifying the element index offset where to start reading the buffer.
length Optional
A GLuint defaulting to 0.

Return value



An INVALID_VALUE error is generated if:

  • offset + returnedData.byteLength would extend beyond the end of the buffer
  • returnedData is null
  • offset is less than zero.

An INVALID_OPERATION error is generated if:

  • zero is bound to target
  • target is TRANSFORM_FEEDBACK_BUFFER, and any transform feedback object is currently active.


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

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


Specification Status Comment
WebGL 2.0
The definition of 'getBufferSubData' in that specification.
Editor's Draft Initial definition.

Browser compatibility

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support56 No51 No Yes No
SharedArrayBuffer as a parameter60 ? ? ?47 ?
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support5858 No51 Yes No7.0
SharedArrayBuffer as a parameter6060 ? ?47 ? No

See also

Document Tags and Contributors

 Contributors to this page: fscholz, teoli
 Last updated by: fscholz,