GLAPI/glBindBuffersRange

From OpenGL Wiki
< GLAPI
Revision as of 01:38, 25 July 2013 by AlfonsesCategoryBot (talk | contribs) (Bot: Adding better formatting.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
glBindBuffersRange
Core in version 4.6
Core since version 4.4
Core ARB extension ARB_multi_bind

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

Function Definition

 void glBindBuffersRange(GLenum target​, GLuint first​, GLsizei count​, const GLuint *buffers​, const GLintptr *offsets​, const GLintptr *sizes​);
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.
index
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.

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 index​ 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 adderess 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 (with the exceptions noted below), which calls glBindBufferRange:

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

The exceptions are that the single general buffer binding corresponding to target​ is unmodified, and that buffers will not be created if they do not exist.

Notes

Note that because glBindBuffersRange cannot create new buffer objects (even if a name passed has been previously generated by call to glGenBuffers), names pased to glBindBuffersRange must have been bound at least once previously via a call to glBindBuffer.

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.

See Also

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

Copyright

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