glDrawArrays - OpenGL ES 3.2 Reference Pages

## Name

glDrawArrays — render primitives from array data

## C Specification

`void glDrawArrays(` | GLenum mode,
| GLint first,
| GLsizei count`)`;

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

  Specifies the starting index in the enabled arrays.

`count`

  Specifies the number of indices to be rendered.

## Description

`glDrawArrays` specifies multiple geometric primitives with very few subroutine calls. It is possible to prespecify separate arrays of attributes and use them to construct a sequence of primitives with a single call to `glDrawArrays`.

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

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.

## Notes

`GL_LINE_STRIP_ADJACENCY`, `GL_LINES_ADJACENCY`, `GL_TRIANGLE_STRIP_ADJACENCY`, `GL_TRIANGLES_ADJACENCY` and `GL_PATCHES` are available only if the GL ES 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 `count` 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.

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

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

## API Version Support

| OpenGL ES API Version
--- | ---
Function Name | 2.0 | 3.0 | 3.1 | 3.2
glDrawArrays | ✔ | ✔ | ✔ | ✔

## See Also

glCheckFramebufferStatus, glDisableVertexAttribArray, glDrawArraysInstanced, glDrawElements, glDrawElementsInstanced, glDrawRangeElements, glEnableVertexAttribArray

## Copyright

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