Light | Dark

# docs.GL

OpenGL 4

# glDrawElementsInstancedBaseInstance

## Name

glDrawElementsInstancedBaseInstance — draw multiple instances of a set of elements with offset applied to instanced attributes

## C Specification

`void glDrawElementsInstancedBaseInstance(` | GLenum mode,
| GLsizei count,
| GLenum type,
| const void * indices,
| GLsizei primcount,
| GLuitn baseinstance`)`;

## Parameters

`mode`

  Specifies what kind of primitives to render. Symbolic constants `GL_POINTS`, `GL_LINE_STRIP`, `GL_LINE_LOOP`, `GL_LINES`, `GL_LINE_STRIP_ADJACENCY`, `GL_LINES_ADJACENCY`, `GL_TRIANGLE_STRIP`, `GL_TRIANGLE_FAN`, `GL_TRIANGLES`, `GL_TRIANGLE_STRIP_ADJACENCY`, `GL_TRIANGLES_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 pointer to the location where the indices are stored.

`primcount`

  Specifies the number of instances of the specified range of indices to be rendered.

`baseinstance`

  Specifies the base instance for use in fetching instanced vertex attributes.

## Description

`glDrawElementsInstancedBaseInstance` behaves identically to glDrawElements except that `primcount` instances of the set of elements are executed and the value of the internal counter `instanceID` advances for each iteration. `instanceID` is an internal 32-bit integer counter that may be read by a vertex shader as `gl_InstanceID`.

`glDrawElementsInstancedBaseInstance` has the same effect as:

        if (mode, count, or type is invalid )
            generate appropriate error
        else {
            for (int i = 0; i < primcount ; i++) {
                instanceID = i;
                glDrawElements(mode, count, type, indices);
            }
            instanceID = 0;
        }

Specific vertex attributes may be classified as instanced through the use of glVertexAttribDivisor. 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 gl _ InstanceID divisor + baseInstance . Note that `baseinstance` does not affect the shader-visible value of `gl_InstanceID`.

## Notes

`glDrawElementsInstancedBaseInstance` is available only if the GL version is 4.2 or greater.

`GL_LINE_STRIP_ADJACENCY`, `GL_LINES_ADJACENCY`, `GL_TRIANGLE_STRIP_ADJACENCY` and `GL_TRIANGLES_ADJACENCY` are available only if the GL version is 3.2 or greater.

## Errors

`GL_INVALID_ENUM` is generated if `mode` is not one of `GL_POINTS`, `GL_LINE_STRIP`, `GL_LINE_LOOP`, `GL_LINES`, `GL_TRIANGLE_STRIP`, `GL_TRIANGLE_FAN`, or `GL_TRIANGLES`.

`GL_INVALID_VALUE` is generated if `count` or `primcount` are 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 and the buffer object's data store is currently mapped.

## 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
`glDrawElementsInstancedBaseInstance` | - | - | - | - | - | - | - | - | ✔ | ✔ | ✔ | ✔

## See Also

glDrawElements, glDrawArraysInstanced

## Copyright

Copyright © 2011-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. https://opencontent.org/openpub/.

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