glDrawArraysInstanced

3G

glDrawArraysInstanced

draw multiple instances of a range of elements

# C Specification

                    void glDrawArraysInstanced
                    GLenum mode
                    GLint first
                    GLsizei count
                    GLsizei primcount

## Parameters

`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` and `GL_TRIANGLES` are accepted.

`first`

- Specifies the starting index in the enabled arrays.

`count`

- Specifies the number of indices to be rendered.

`primcount`

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

## Description

`glDrawArraysInstanced` behaves identically to

glDrawArrays

except that `primcount` instances of the range of elements are executed. Those attributes that have divisor N where N is other than zero (as specified by

glVertexAttribDivisor

) advance once every N instances. Thus, the element transferred from instanced vertex attributes is given by: instance divisor The value of `instance` may be read by a vertex shader as `gl_InstanceID`.

To enable and disable a generic vertex attribute array, call

glEnableVertexAttribArray

and

glDisableVertexAttribArray

.

If an array corresponding to a generic attribute required by a vertex shader is not enabled, then the corresponding element is taken from the current generic attribute state.

## Errors

`GL_INVALID_ENUM` is generated if `mode` is not one of the accepted values.

`GL_INVALID_VALUE` is generated if `count` or `primcount` are negative.

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

`GL_INVALID_FRAMEBUFFER_OPERATION` is generated if the currently bound framebuffer is not framebuffer complete (i.e. the return value from

glCheckFramebufferStatus

is not `GL_FRAMEBUFFER_COMPLETE`).

`GL_INVALID_OPERATION` is generated if recording the vertices of a primitive to the buffer objects being used for transform feedback purposes would result in either exceeding the limits of any buffer object’s size, or in exceeding the end position `offset` + `size` - 1, as set by

glBindBufferRange

.

## API Version Support

glDrawArraysInstanced

## See Also

glCheckFramebufferStatus

,

glDisableVertexAttribArray

,

glDrawArrays

,

glDrawElements

,

glDrawElementsInstanced

,

glEnableVertexAttribArray

,

glVertexAttribDivisor

## Copyright

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