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

# glNormalPointer(3x)

define an array of normals

## NAME

**glNormalPointer** - define an array of normals

## C SPECIFICATION

void **glNormalPointer**( GLenum *type*,

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

delim $$

## PARAMETERS

- *type*

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

- *stride*

  Specifies the byte offset between consecutive normals. If *stride* is 0- the initial value-the normals 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 normal in the array.  The initial value is 0.

## DESCRIPTION

**glNormalPointer** specifies the location and data  of an array of normals to use when rendering. *type* specifies the data type of the normal coordinates and *stride* gives the byte stride from one normal 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 normal array is specified, *type*, *stride*, and *ptr* are saved as client-side state.

To enable and disable the normal array, call **glEnableClientState** and  **glDisableClientState** with the argument **GL\_NORMAL\_ARRAY**. If enabled, the normal 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

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

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

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

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

Since the normal array parameters are client-side state, they are not saved or restored by **glPushAttrib** and **glPopAttrib**. Use **glPushClientAttrib** and **glPopClientAttrib** instead.

## ERRORS

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

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

## ASSOCIATED GETS

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

## SEE ALSO

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