glGetBufferParameteriv — return parameters of a buffer object
void glGetBufferParameteriv( | GLenum | target, |
GLenum | value, | |
GLint * | data) ; |
target
Specifies the target buffer object. The symbolic constant must be GL_ARRAY_BUFFER
, GL_ELEMENT_ARRAY_BUFFER
, GL_PIXEL_PACK_BUFFER
, or GL_PIXEL_UNPACK_BUFFER
.
value
Specifies the symbolic name of a buffer object parameter. Accepted values are GL_BUFFER_ACCESS
, GL_BUFFER_MAPPED
, GL_BUFFER_SIZE
, or GL_BUFFER_USAGE
.
data
Returns the requested parameter.
glGetBufferParameteriv
returns in data
a selected parameter of the buffer object specified by target
.
value
names a specific buffer object parameter, as follows:
GL_BUFFER_ACCESS
params
returns the access policy set while mapping the buffer object. The initial value is GL_READ_WRITE
.
GL_BUFFER_MAPPED
params
returns a flag indicating whether the buffer object is currently mapped. The initial value is GL_FALSE
.
GL_BUFFER_SIZE
params
returns the size of the buffer object, measured in bytes. The initial value is 0.
GL_BUFFER_USAGE
params
returns the buffer object's usage pattern. The initial value is GL_STATIC_DRAW
.
If an error is generated, no change is made to the contents of data
.
glGetBufferParameteriv
is available only if the GL version is 1.5 or greater.
Targets GL_PIXEL_PACK_BUFFER
and GL_PIXEL_UNPACK_BUFFER
are available only if the GL version is 2.1 or greater.
GL_INVALID_ENUM
is generated if target
or value
is not an accepted value.
GL_INVALID_OPERATION
is generated if the reserved buffer object name 0 is bound to target
.
GL_INVALID_OPERATION
is generated if glGetBufferParameteriv
is executed between the execution of glBegin and the corresponding execution of glEnd.
// data_size_in_bytes is the size in bytes of your vertex data. // data_vertices is your actual vertex data, probably a huge array of floats GLuint vertex_buffer; // Save this for later rendering glGenBuffers(1, &vertex_buffer); glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); glBufferData(GL_ARRAY_BUFFER, data_size_in_bytes, 0, GL_STATIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, data_size_in_bytes, data_vertices); GLint size = 0; glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &size); if(data_size_in_bytes != size) { glDeleteBuffers(1, &vertex_buffer); // Log the error return; } // Success
// data_size_in_bytes is the size in bytes of your vertex data. // data_indices is an array of integer offsets into your vertex data. GLuint index_buffer; // Save this for later rendering glGenBuffers(1, &index_buffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer); glBufferData(GL_ELEMENT_ARRAY_BUFFER, data_size_in_bytes, 0, GL_STATIC_DRAW); glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, data_size_in_bytes, data_indices); GLint size = 0; glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size); if(data_size_in_bytes != size) { glDeleteBuffers(1, &index_buffer); // Log the error return; } // Success
Copyright © 2005 Addison-Wesley. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. https://opencontent.org/openpub/.