# Difference between revisions of "GLAPI/glDrawElementsInstancedBaseVertexBaseInstance"

Core in version 4.5 4.2 ARB_base_instance

glDrawElementsInstancedBaseVertexBaseInstance: render multiple instances of a set of primitives from array data with a per-element offset

## Function Definition

 void glDrawElementsInstancedBaseVertexBaseInstance(GLenum mode​, GLsizei count​, GLenum type​, GLvoid *indices​, GLsizei primcount​, GLint basevertex​, GLuint baseinstance​);

mode
Specifies what kind of primitives to render. Symbolic constants GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_LINES_ADJACENCY, GL_LINE_STRIP_ADJACENCY, GL_TRIANGLES_ADJACENCY, GL_TRIANGLE_STRIP_ADJACENCY and GL_PATCHES are accepted.
count
Specifies the number of elements to be rendered.
type
Specifies the type of the values in indices. Must be one of GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, or GL_UNSIGNED_INT.
indices
Specifies a constant that should be added to each element of indices​ when choosing elements from the enabled vertex arrays.
primcount
Specifies the number of instances of the indexed geometry that should be drawn.
basevertex
Specifies a constant that should be added to each element of indices​ when chosing elements from the enabled vertex arrays.
baseinstance
Specifies the base instance for use in fetching instanced vertex attributes.

## Description

glDrawElementsInstancedBaseVertexBaseInstance behaves identically to except that each index fetched from GL_ELEMENT_ARRAY_BUFFER (starting from the byte offset indices​ in bytes) will have basevertex​ added to it before fetching that index from the vertex arrays. If the resulting value is larger than the maximum value representable by type​, it is as if the calculation were upconverted to 32-bit unsigned integers (with wrapping on overflow conditions). The operation is undefined if the sum would be negative.

Specific vertex attributes may be classified as instanced through the use of . Instanced vertex attributes supply per-instance vertex data to the vertex shader. The index of the vertex fetched from the enabled instanced vertex attribute arrays is calculated as $\left \lfloor \frac{gl\_InstanceID}{divisor} + baseInstance \right \rfloor$. Note that baseinstance​ does not affect the shader-visible value of gl_InstanceID​.

## Notes

glDrawElementsInstancedBaseVertexBaseInstance is available only if the GL version is 4.2 or greater.

## Errors

GL_INVALID_ENUM is generated if mode​ is not an accepted value.

GL_INVALID_VALUE is generated if count​ or primcount​ is negative.

GL_INVALID_OPERATION is generated if a geometry shader is active and mode​ is incompatible with the input primitive type of the geometry shader in the currently installed program object.

GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to an enabled array or the element array and the buffer object's data store is currently mapped.