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

# glVertexPointer(3x)

define an array of vertex data

## NAME

**glVertexPointer** - define an array of vertex data

## C SPECIFICATION

void **glVertexPointer**( GLint *size*,

```
	GLenum type,
	GLsizei stride,
	const GLvoid *ptr )
```

delim $$

## PARAMETERS

- *size*

  Specifies the number of coordinates per vertex; must be 2, 3, or 4. The initial value is 4.

- *type*

  Specifies the data type of each coordinate in the array. Symbolic constants **GL\_SHORT**, **GL\_INT**, **GL\_FLOAT**, and **GL\_DOUBLE**  are accepted. The initial value is **GL\_FLOAT**.

- *stride*

  Specifies the byte offset between consecutive  vertices. If *stride* is 0, the vertices are understood to be tightly packed in  the array. The initial value is 0.

- *ptr*

  Specifies a pointer to the first coordinate of the first vertex in the array. The initial value is 0.

## DESCRIPTION

**glVertexPointer** specifies the location and data  of an array of vertex coordinates to use when rendering. *size* specifies the number of coordinates per vertex and *type* the data type of the coordinates. *stride* specifies the byte stride from one vertex to the next allowing vertices and attributes to be packed into a single array or stored in separate arrays. (Single-array storage may be more efficient on some implementations; see **glInterleavedArrays**.) When a vertex array is specified, *size*, *type*, *stride*, and *ptr* are saved as client-side state.

To enable and disable the vertex array, call **glEnableClientState** and\
 **glDisableClientState** with the argument **GL\_VERTEX\_ARRAY**. If enabled, the vertex array is used when  **glDrawArrays**, **glDrawElements**, or **glArrayElement** is called.

Use **glDrawArrays** to construct a sequence of primitives (all of the same type) from prespecified vertex and vertex attribute arrays. Use **glArrayElement** to specify primitives by indexing vertices and vertex attributes  and **glDrawElements** to construct a sequence of primitives by indexing vertices and vertex attributes.

## NOTES

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

The vertex array is initially disabled and isn't accessed when **glArrayElement**, **glDrawElements** or **glDrawArrays** is called.

Execution of **glVertexPointer** is not allowed between the execution of **glBegin** and the corresponding execution of **glEnd**, but an error may or may not be generated. If no error is generated, the operation is undefined.

**glVertexPointer** is typically implemented on the client side.

Vertex array parameters are client-side state and are therefore not saved or restored by **glPushAttrib** and **glPopAttrib**. Use **glPushClientAttrib** and **glPopClientAttrib** instead.

## ERRORS

**GL\_INVALID\_VALUE** is generated if *size* is not 2, 3, or 4.

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

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

## ASSOCIATED GETS

**glIsEnabled** with argument **GL\_VERTEX\_ARRAY**\
 **glGet** with argument **GL\_VERTEX\_ARRAY\_SIZE**\
 **glGet** with argument **GL\_VERTEX\_ARRAY\_TYPE**\
 **glGet** with argument **GL\_VERTEX\_ARRAY\_STRIDE**\
 **glGetPointerv** with argument **GL\_VERTEX\_ARRAY\_POINTER**

## SEE ALSO

**glArrayElement(3G)**, **glColorPointer(3G)**, **glDrawArrays(3G)**, **glDrawElements(3G)**, **glDrawRangeElements(3G)**, **glEdgeFlagPointer(3G)**, **glEnable(3G)**, **glGetPointerv(3G)**, **glIndexPointer(3G)**, **glInterleavedArrays(3G)**, **glNormalPointer(3G)**, **glPopClientAttrib(3G)**, **glPushClientAttrib(3G)**, **glTexCoordPointer(3G)**
