---
name: "glDrawRangeElements"
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/glDrawRangeElements"
---

# glDrawRangeElements(3x)

render primitives from array data

## NAME

**glDrawRangeElements** - render primitives from array data

## C SPECIFICATION

void **glDrawRangeElements**( GLenum *mode*,

```
	GLuint start,
	GLuint end,
	GLsizei count,
	GLenum type,
	const GLvoid *indices )
```

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.

- *start*

  Specifies the minimum array index contained in *indices*.

- *end*

  Specifies the maximum array index contained in *indices*.

- *count*

  Specifies the number of elements to be rendered.

- *type*

  Specifies the type of the values in *count*. 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.

## DESCRIPTION

**glDrawRangeElements** is a restricted form of **glDrawElements**. *mode*, *start*, *end*, and *count* match the corresponding arguments to **glDrawElements**, with the additional constraint that all values in the arrays *count* must lie between *start* and *end*, inclusive.

Implementations denote recommended maximum amounts of vertex and\
 index data, which may be queried by calling **glGet** with argument  **GL\_MAX\_ELEMENTS\_VERTICES** and **GL\_MAX\_ELEMENTS\_INDICES**. If $"end" ~-~ "start" ~+~ 1$ is greater than the value of **GL\_MAX\_ELEMENTS\_VERTICES**, or if *count* is greater than the value of **GL\_MAX\_ELEMENTS\_INDICES**, then the call may operate at reduced performance.  There is no requirement that all vertices in the range \[*start*, *end*\] be referenced.  However, the implementation may partially process unused vertices, reducing performance from what could  be achieved with an optimal index set.

When **glDrawRangeElements** is called, it uses *start* sequential elements from an enabled array, starting at *count* to construct a sequence of geometric primitives. *mode* specifies what kind of primitives are constructed, and how the array elements construct these primitives. If more than one array is enabled, each is used. If **GL\_VERTEX\_ARRAY** is not enabled, no geometric primitives are constructed.

Vertex attributes that are modified by **glDrawRangeElements** have an unspecified value after **glDrawRangeElements** returns. For example, if **GL\_COLOR\_ARRAY** is enabled, the value of the current color is undefined after **glDrawRangeElements** executes. Attributes that aren't modified maintain their previous values.

## NOTES

**glDrawRangeElements** is available only if the GL version is 1.2 or greater.

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

It is an error for indices to lie outside the range \[*start*, *end*\], but implementations may not check for this situation. Such indices cause implementation-dependent behavior.

**GL\_INVALID\_ENUM** is generated if *mode* is not an accepted value.

**GL\_INVALID\_VALUE** is generated if *count* is negative.

**GL\_INVALID\_VALUE** is generated if *end* $\<$ *start*.

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

## ASSOCIATED GETS

**glGet** with argument **GL\_MAX\_ELEMENTS\_VERTICES**

**glGet** with argument **GL\_MAX\_ELEMENTS\_INDICES**

## SEE ALSO

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