## Name

glMultiDrawArrays — render multiple sets of primitives from array data

## C Specification

`void glMultiDrawArrays(` | GLenum mode,
| const GLint * first,
| const GLsizei * count,
| GLsizei drawcount`)`;

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

`first`

  Points to an array of starting indices in the enabled arrays.

`count`

  Points to an array of the number of indices to be rendered.

`drawcount`

  Specifies the size of the first and count

## Description

`glMultiDrawArrays` specifies multiple sets of geometric primitives with very few subroutine calls. Instead of calling a GL procedure to pass each individual vertex, normal, texture coordinate, edge flag, or color, you can prespecify separate arrays of vertices, normals, and colors and use them to construct a sequence of primitives with a single call to `glMultiDrawArrays`.

`glMultiDrawArrays` behaves identically to glDrawArrays except that `drawcount` separate ranges of elements are specified instead.

When `glMultiDrawArrays` is called, it uses `count` sequential elements from each enabled array to construct a sequence of geometric primitives, beginning with element `first`. `mode` specifies what kind of primitives are constructed, and how the array elements construct those primitives.

Vertex attributes that are modified by `glMultiDrawArrays` have an unspecified value after `glMultiDrawArrays` returns. Attributes that aren't modified remain well defined.

## Notes

`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 an accepted value.

`GL_INVALID_VALUE` is generated if `drawcount` is 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.

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

## See Also

glDrawElements, glDrawRangeElements

## Copyright

Copyright © 1991-2006 Silicon Graphics, Inc. Copyright © 2010-2014 Khronos Group. This document is licensed under the SGI Free Software B License. For details, see http://oss.sgi.com/projects/FreeB/.