Light | Dark

glGetBufferParameteriv

Name

glGetBufferParameteriv — return parameters of a buffer object

C Specification

void glGetBufferParameteriv(GLenum  target,
 GLenum  value,
 GLint *  data);

Parameters

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.

Description

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.

Notes

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.

Errors

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.

Examples

Load an index buffer into OpenGL for later rendering.
// 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

Load a vertex buffer into OpenGL for later rendering.
// 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
Think you can improve this page? Edit this page on GitHub.