glCopyBufferSubData

From OpenGL Reference
Jump to navigation Jump to search

Copy all or part of the data store of a buffer object to the data store of another buffer object.

C Specification[edit]

void glCopyBufferSubData( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size );
void glCopyNamedBufferSubData( GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size );


Parameters[edit]

readTarget - Specifies the target to which the source buffer object is bound for glCopyBufferSubData 
writeTarget - Specifies the target to which the destination buffer object is bound for glCopyBufferSubData .
readBuffer - Specifies the name of the source buffer object for glCopyNamedBufferSubData .
writeBuffer - Specifies the name of the destination buffer object for glCopyNamedBufferSubData .
readOffset - Specifies the offset, in basic machine units, within the data store of the source buffer object at which data will be read.
writeOffset - Specifies the offset, in basic machine units, within the data store of the destination buffer object at which data will be written.
size - Specifies the size, in basic machine units, of the data to be copied from the source buffer object to the destination buffer object.


Description[edit]

 glCopyBufferSubData and glCopyNamedBufferSubData copy part of the data store attached to a source buffer object to the data store attached to a destination buffer object. The number of basic machine units indicated by size is copied from the source at offset readOffset to the destination at writeOffset . readOffset , writeOffset and size are in terms of basic machine units.

For glCopyBufferSubData , readTarget and writeTarget specify the targets to which the source and destination buffer objects are bound, and must each be one of the buffer binding targets in the following table:

Any of these targets may be used, but 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 source buffer object, and $writeOffset+size$ must not exceeed the size of the buffer bound to writeTarget . If the source and destination are the same buffer object, then the source and destination ranges must not overlap.


Notes[edit]

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[edit]

 GL_INVALID_ENUM is generated by glCopyBufferSubData if readTarget or writeTarget is not one of the buffer binding targets listed above.

 GL_INVALID_OPERATION is generated by glCopyBufferSubData if zero is bound to readTarget or writeTarget .

 GL_INVALID_OPERATION is generated by glCopyNamedBufferSubData if readBuffer or writeBuffer is not the name of an existing buffer object.

 GL_INVALID_VALUE is generated if any of readOffset , writeOffset or size is negative, if $readOffset + size$ is greater than the size of the source buffer object (its value of GL_BUFFER_SIZE ), or if $writeOffset + size$ is greater than the size of the destination buffer object.

 GL_INVALID_VALUE is generated if the source and destination are the same buffer object, and the ranges $[readOffset,readOffset+size)$ and $[writeOffset,writeOffset+size)$ overlap.

 GL_INVALID_OPERATION is generated if either the source or destination buffer object is mapped with glMapBufferRange or glMapBuffer , unless they were mapped with the GL_MAP_PERSISTENT bit set in the glMapBufferRange  access flags.


Version Support[edit]

 glCopyBufferSubData  3.1+
 glCopyNamedBufferSubData  4.5+

See Also[edit]

 glGenBuffers , glBindBuffer , glBufferData , glBufferSubData , glGetBufferSubData , glMapBuffer , glMapBufferRange 


Copyright[edit]

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