Light | Dark

# docs.GL

OpenGL 4
OpenGL 3
OpenGL 2

# glMultiDrawElements

## Name

glMultiDrawElements — render multiple sets of primitives by specifying indices of array data elements

## C Specification

`void glMultiDrawElements(` | GLenum | mode,
| const GLsizei * | count,
| GLenum | type,
| const GLvoid ** | indices,
| 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`, `GL_TRIANGLES`, `GL_QUAD_STRIP`, `GL_QUADS`, and `GL_POLYGON` are accepted.

`count`

  Points to an array of the elements counts.

`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 size of the `count` array.

## Description

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

`glMultiDrawElements` is identical in operation to glDrawElements except that `primcount` separate lists of elements are specified.

Vertex attributes that are modified by `glMultiDrawElements` have an unspecified value after `glMultiDrawElements` returns. For example, if `GL_COLOR_ARRAY` is enabled, the value of the current color is undefined after `glMultiDrawElements` executes. Attributes that aren't modified maintain their previous values.

## Notes

`glMultiDrawElements` is available only if the GL version is 1.4 or greater.

`glMultiDrawElements` is included in display lists. If `glMultiDrawElements` is entered into a display list, the necessary array data (determined by the array pointers and enables) is also entered into the display list. Because the array pointers and enables are client-side state, their values affect display lists when the lists are created, not when the lists are executed.

## Errors

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

`GL_INVALID_VALUE` is generated if `primcount` is negative.

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

`GL_INVALID_OPERATION` is generated if `glMultiDrawElements` is executed between the execution of glBegin and the corresponding glEnd.

## See Also

glArrayElement, glColorPointer, glDrawArrays, glDrawRangeElements, glEdgeFlagPointer, glFogCoordPointer, glGetPointerv, glIndexPointer, glInterleavedArrays, glNormalPointer, glSecondaryColorPointer, glTexCoordPointer, glVertexPointer

## Copyright

Copyright © 1991-2006 Silicon Graphics, Inc. This document is licensed under the SGI Free Software B License. For details, see https://web.archive.org/web/20171022161616/http://oss.sgi.com/projects/FreeB/.

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