glBindBuffersRange - OpenGL 4 Reference Pages

## Name

glBindBuffersRange — bind ranges of one or more buffer objects to a sequence of indexed buffer targets

## C Specification

`void glBindBuffersRange(` | GLenum target,
| GLuint first,
| GLsizei count,
| const GLuint *buffers,
| const GLintptr *offsets,
| const GLintptr *sizes`)`;

## Parameters

`target`

  Specify the target of the bind operation. `target` must be one of `GL_ATOMIC_COUNTER_BUFFER`, `GL_TRANSFORM_FEEDBACK_BUFFER`, `GL_UNIFORM_BUFFER` or `GL_SHADER_STORAGE_BUFFER`.

`first`

  Specify the index of the first binding point within the array specified by `target`.

`count`

  Specify the number of contiguous binding points to which to bind buffers.

`buffers`

  A pointer to an array of names of buffer objects to bind to the targets on the specified binding point, or `NULL`.

`offsets`

  A pointer to an array of offsets into the corresponding buffer in `buffers` to bind, or `NULL` if `buffers` is `NULL`.

`sizes`

  A pointer to an array of sizes of the corresponding buffer in `buffers` to bind, or `NULL` if `buffers` is `NULL`.

## Description

`glBindBuffersRange` binds a set of `count` ranges from buffer objects whose names are given in the array `buffers` to the `count` consecutive binding points starting from index `first` of the array of targets specified by `target`. `offsets` specifies the address of an array containing `count` starting offsets within the buffers, and `sizes` specifies the address of an array of `count` sizes of the ranges. If `buffers` is `NULL` then `offsets` and `sizes` are ignored and `glBindBuffersRange` unbinds any buffers that are currently bound to the referenced binding points. Assuming no errors are generated, it is equivalent to the following pseudo-code, which calls glBindBufferRange, with the exception that the non-indexed `target` is not changed by `glBindBuffersRange`:

        for (i = 0; i < count; i++) {
            if (buffers != NULL) {
                glBindBufferRange(target, first + i, buffers[i], offsets[i], sizes[i]);
            } else {
                glBindBufferRange(target, first + i, 0);
            }
        }

Each entry in `buffers`, `offsets`, and `sizes` will be checked individually and if found to be invalid, the state for that buffer binding index will not be changed and an error will be generated. However, the state for other buffer binding indices referenced by the command will still be updated.

## Notes

`glBindBuffersBase` is available only if the GL version is 4.4 or higher.

## Errors

`GL_INVALID_ENUM` is generated if `target` is not `GL_ATOMIC_COUNTER_BUFFER`, `GL_TRANSFORM_FEEDBACK_BUFFER`, `GL_UNIFORM_BUFFER` or `GL_SHADER_STORAGE_BUFFER`.

`GL_INVALID_OPERATION` is generated if `first` + `count` is greater than the number of target-specific indexed binding points.

`GL_INVALID_OPERATION` is generated if any value in `buffers` is not zero or the name of an existing buffer object.

`GL_INVALID_VALUE` is generated by if any value in `offsets` is less than zero or if any value in `sizes` is less than zero.

`GL_INVALID_VALUE` is generated if any pair of values in `offsets` and `sizes` does not respectively satisfy the constraints described for those parameters for the specified target.

## Version Support

| OpenGL Version
--- | ---
Function / Feature Name | 2.0 | 2.1 | 3.0 | 3.1 | 3.2 | 3.3 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5
`glBindBuffersRange` | - | - | - | - | - | - | - | - | - | - | ✔ | ✔

## See Also

glGenBuffers, glDeleteBuffers, glBindBuffer, glBindBufferBase, glBindBufferRange, glBindBuffersRange, glMapBuffer, glUnmapBuffer

## Copyright

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