---
name: "glDrawArrays"
section: "3x"
platform: "linux"
package: "xlibmesa-gl-dev"
version: "4.3.0.dfsg.1-14sarge7"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/glDrawArrays"
---

# glDrawArrays(3x)

render primitives from array data

## NAME

**glDrawArrays** - render primitives from array data

## C SPECIFICATION

void **glDrawArrays**( GLenum *mode*,

```
	GLint first,
	GLsizei count )
```

delim $$

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

- *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. 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 **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. If **GL\_VERTEX\_ARRAY** is not enabled, no geometric primitives are generated.

Vertex attributes that are modified by **glDrawArrays** have an unspecified value after **glDrawArrays** returns. For example, if **GL\_COLOR\_ARRAY** is enabled, the value of the current color is undefined after **glDrawArrays** executes. Attributes that aren't modified remain well defined.

## NOTES

**glDrawArrays** is available only if the GL version is 1.1 or greater.

**glDrawArrays** is included in display lists. If **glDrawArrays** 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 *count* is negative.

**GL\_INVALID\_OPERATION** is generated if **glDrawArrays** is executed between the execution of **glBegin** and the corresponding **glEnd**.

## SEE ALSO

**glArrayElement(3G)**, **glColorPointer(3G)**, **glDrawElements(3G)**, **glDrawRangeElements(3G)**, **glEdgeFlagPointer(3G)**, **glGetPointerv(3G)**, **glIndexPointer(3G)**, **glInterleavedArrays(3G)**, **glNormalPointer(3G)**, **glTexCoordPointer(3G)**, **glVertexPointer(3G)**
