## Name

glCopyBufferSubData — copy part of the data store of a buffer object to the data store of another buffer object

## C Specification

`void glCopyBufferSubData(` | GLenum readtarget,
| GLenum writetarget,
| GLintptr readoffset,
| GLintptr writeoffset,
| GLsizeiptr size`)`;

## Parameters

`readtarget`

  Specifies the target from whose data store data should be read.

`writetarget`

  Specifies the target to whose data store data should be written.

`readoffset`

  Specifies the offset, in basic machine units, within the data store of `readtarget` from which data should be read.

`writeoffset`

  Specifies the offset, in basic machine units, within the data store of `writetarget` to which data should be written.

`size`

  Specifies the size, in basic machine units, of the data to be copied from `readtarget` to `writetarget`.

## Description

`glCopyBufferSubData` copies part of the data store attached to `readtarget` to the data store attached to `writetarget`. The number of basic machine units indicated by `size` is copied from the source, at offset `readoffset` to the destination at `writeoffset`, also in basic machine units.

`readtarget` and `writetarget` must be `GL_ARRAY_BUFFER`, `GL_COPY_READ_BUFFER`, `GL_COPY_WRITE_BUFFER`, `GL_DRAW_INDIRECT_BUFFER`, `GL_DISPATCH_INDIRECT_BUFFER`, `GL_ELEMENT_ARRAY_BUFFER`, `GL_PIXEL_PACK_BUFFER`, `GL_PIXEL_UNPACK_BUFFER`, `GL_QUERY_BUFFER`, `GL_TEXTURE_BUFFER`, `GL_TRANSFORM_FEEDBACK_BUFFER` or `GL_UNIFORM_BUFFER`. Any of these targets may be used, although the targets `GL_COPY_READ_BUFFER` and `GL_COPY_WRITE_BUFFER` are provided specifically to allow copies between buffers without disturbing other GL state.

`readoffset`, `writeoffset` and `size` must all be greater than or equal to zero. Furthermore, `readoffset` + `size` must not exceeed the size of the buffer object bound to `readtarget`, and `readoffset` + `size` must not exceeed the size of the buffer bound to `writetarget`. If the same buffer object is bound to both `readtarget` and `writetarget`, then the ranges specified by `readoffset`, `writeoffset` and `size` must not overlap.

## Notes

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_VALUE` is generated if any of `readoffset`, `writeoffset` or `size` is negative, if `readoffset` + `size` exceeds the size of the buffer object bound to `readtarget` or if `writeoffset` + `size` exceeds the size of the buffer object bound to `writetarget`.

`GL_INVALID_VALUE` is generated if the same buffer object is bound to both `readtarget` and `writetarget` and the ranges [`readoffset`, `readoffset` + `size`) and [`writeoffset`, `writeoffset` + `size`) overlap.

`GL_INVALID_OPERATION` is generated if zero is bound to `readtarget` or `writetarget`.

`GL_INVALID_OPERATION` is generated if the buffer object bound to either `readtarget` or `writetarget` is mapped.

## See Also

glGenBuffers, glBindBuffer, glBufferData, glBufferSubData, glGetBufferSubData

## Copyright

Copyright © 2010-2013 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/.