## Name

glGetBufferSubData, glGetNamedBufferSubData — returns a subset of a buffer object's data store

## C Specification

`void glGetBufferSubData(` | GLenum target,
| GLintptr offset,
| GLsizeiptr size,
| GLvoid * data`)`;

`void glGetNamedBufferSubData(` | GLuint buffer,
| GLintptr offset,
| GLsizei size,
| void *data`)`;

## Parameters

`target`

  Specifies the target to which the buffer object is bound for `glGetBufferSubData`, which must be one of the buffer binding targets in the following table:

  Buffer Binding Target | Purpose
  --- | ---
  `GL_ARRAY_BUFFER` | Vertex attributes
  `GL_ATOMIC_COUNTER_BUFFER` | Atomic counter storage
  `GL_COPY_READ_BUFFER` | Buffer copy source
  `GL_COPY_WRITE_BUFFER` | Buffer copy destination
  `GL_DISPATCH_INDIRECT_BUFFER` | Indirect compute dispatch commands
  `GL_DRAW_INDIRECT_BUFFER` | Indirect command arguments
  `GL_ELEMENT_ARRAY_BUFFER` | Vertex array indices
  `GL_PIXEL_PACK_BUFFER` | Pixel read target
  `GL_PIXEL_UNPACK_BUFFER` | Texture data source
  `GL_QUERY_BUFFER` | Query result buffer
  `GL_SHADER_STORAGE_BUFFER` | Read-write storage for shaders
  `GL_TEXTURE_BUFFER` | Texture data buffer
  `GL_TRANSFORM_FEEDBACK_BUFFER` | Transform feedback buffer
  `GL_UNIFORM_BUFFER` | Uniform block storage

`buffer`

  Specifies the name of the buffer object for `glGetNamedBufferSubData`.

`offset`

  Specifies the offset into the buffer object's data store from which data will be returned, measured in bytes.

`size`

  Specifies the size in bytes of the data store region being returned.

`data`

  Specifies a pointer to the location where buffer object data is returned.

## Description

`glGetBufferSubData` and `glGetNamedBufferSubData` return some or all of the data contents of the data store of the specified buffer object. Data starting at byte offset `offset` and extending for `size` bytes is copied from the buffer object's data store to the memory pointed to by `data`. An error is thrown if the buffer object is currently mapped, or if `offset` and `size` together define a range beyond the bounds of the buffer object's data store.

## Notes

If an error is generated, no change is made to the contents of `data`.

The `GL_ATOMIC_COUNTER_BUFFER` target is available only if the GL version is 4.2 or greater.

The `GL_DISPATCH_INDIRECT_BUFFER` and `GL_SHADER_STORAGE_BUFFER` targets are available only if the GL version is 4.3 or greater.

The `GL_QUERY_BUFFER` target is available only if the GL version is 4.4 or greater.

## Errors

`GL_INVALID_ENUM` is generated by `glGetBufferSubData` if `target` is not one of the generic buffer binding targets.

`GL_INVALID_OPERATION` is generated by `glGetBufferSubData` if zero is bound to `target`.

`GL_INVALID_OPERATION` is generated by `glGetNamedBufferSubData` if `buffer` is not the name of an existing buffer object.

`GL_INVALID_VALUE` is generated if `offset` or `size` is negative, or if $offset + size$ is greater than the value of `GL_BUFFER_SIZE` for the buffer object.

`GL_INVALID_OPERATION` is generated if the buffer object is mapped with glMapBufferRange or glMapBuffer, unless it was mapped with the `GL_MAP_PERSISTENT_BIT` bit set in the `glMapBufferRange` `access` flags.

## Version Support

| OpenGL Version
--- | ---
Function / Feature Name | 2.0 | 2.1 | 3.0 | 3.1 | 3.2 | 3.3 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5
`glGetBufferSubData` | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔
`glGetNamedBufferSubData` | - | - | - | - | - | - | - | - | - | - | - | ✔

## See Also

glBindBuffer, glBufferData, glBufferSubData, glMapBuffer, glUnmapBuffer

## Copyright

Copyright © 2005 Addison-Wesley. Copyright © 2011-2014 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.