Light | Dark

# docs.GL

OpenGL 4
OpenGL 3
OpenGL 2
OpenGL ES 3
OpenGL ES 2

# 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 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

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

## See Also

glBindBuffer, glBufferData, glMapBuffer, glUnmapBuffer

## Copyright

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/.

Think you can improve this page? Edit this page on GitHub.