# glBegin.3G man page

glBegin — delimit the vertices of a primitive or a group of like primitives

## C Specification

**void glBegin(GLenum** *mode***);**

## Parameters

*mode*Specifies the primitive or primitives that will be created from vertices presented between

**glBegin**and the subsequent**glEnd**(). Ten symbolic constants are accepted:**GL_POINTS**,**GL_LINES**,**GL_LINE_STRIP**,**GL_LINE_LOOP**,**GL_TRIANGLES**,**GL_TRIANGLE_STRIP**,**GL_TRIANGLE_FAN**,**GL_QUADS**,**GL_QUAD_STRIP**, and**GL_POLYGON**.

## C Specification

**void glEnd(***void***);**

## Description

**glBegin** and **glEnd**() delimit the vertices that define a primitive or a group of like primitives. **glBegin** accepts a single argument that specifies in which of ten ways the vertices are interpreted. Taking n as an integer count starting at one, and N as the total number of vertices specified, the interpretations are as follows:

**GL_POINTS**Treats each vertex as a single point. Vertex n defines point n. N points are drawn.

**GL_LINES**Treats each pair of vertices as an independent line segment. Vertices 2 n - 1 and 2 n define line n. N 2 lines are drawn.

**GL_LINE_STRIP**Draws a connected group of line segments from the first vertex to the last. Vertices n and n + 1 define line n. N - 1 lines are drawn.

**GL_LINE_LOOP**Draws a connected group of line segments from the first vertex to the last, then back to the first. Vertices n and n + 1 define line n. The last line, however, is defined by vertices N and 1. N lines are drawn.

**GL_TRIANGLES**Treats each triplet of vertices as an independent triangle. Vertices 3 n - 2, 3 n - 1, and 3 n define triangle n. N 3 triangles are drawn.

**GL_TRIANGLE_STRIP**Draws a connected group of triangles. One triangle is defined for each vertex presented after the first two vertices. For odd n, vertices n, n + 1, and n + 2 define triangle n. For even n, vertices n + 1, n, and n + 2 define triangle n. N - 2 triangles are drawn.

**GL_TRIANGLE_FAN**Draws a connected group of triangles. One triangle is defined for each vertex presented after the first two vertices. Vertices 1, n + 1, and n + 2 define triangle n. N - 2 triangles are drawn.

**GL_QUADS**Treats each group of four vertices as an independent quadrilateral. Vertices 4 n - 3, 4 n - 2, 4 n - 1, and 4 n define quadrilateral n. N 4 quadrilaterals are drawn.

**GL_QUAD_STRIP**Draws a connected group of quadrilaterals. One quadrilateral is defined for each pair of vertices presented after the first pair. Vertices 2 n - 1, 2 n, 2 n + 2, and 2 n + 1 define quadrilateral n. N 2 - 1 quadrilaterals are drawn. Note that the order in which vertices are used to construct a quadrilateral from strip data is different from that used with independent data.

**GL_POLYGON**Draws a single, convex polygon. Vertices 1 through N define this polygon.

Only a subset of GL commands can be used between **glBegin** and **glEnd**(). The commands are **glVertex**(), **glColor**(), **glSecondaryColor**(), **glIndex**(), **glNormal**(), **glFogCoord**(), **glTexCoord**(), **glMultiTexCoord**(), **glVertexAttrib**(), **glEvalCoord**(), **glEvalPoint**(), **glArrayElement**(), **glMaterial**(), and **glEdgeFlag**(). Also, it is acceptable to use **glCallList**() or **glCallLists**() to execute display lists that include only the preceding commands. If any other GL command is executed between **glBegin** and **glEnd**(), the error flag is set and the command is ignored.

Regardless of the value chosen for *mode*, there is no limit to the number of vertices that can be defined between **glBegin** and **glEnd**(). Lines, triangles, quadrilaterals, and polygons that are incompletely specified are not drawn. Incomplete specification results when either too few vertices are provided to specify even a single primitive or when an incorrect multiple of vertices is specified. The incomplete primitive is ignored; the rest are drawn.

The minimum specification of vertices for each primitive is as follows: 1 for a point, 2 for a line, 3 for a triangle, 4 for a quadrilateral, and 3 for a polygon. Modes that require a certain multiple of vertices are **GL_LINES** (2), **GL_TRIANGLES** (3), **GL_QUADS** (4), and **GL_QUAD_STRIP** (2).

## Errors

**GL_INVALID_ENUM** is generated if *mode* is set to an unaccepted value.

**GL_INVALID_OPERATION** is generated if **glBegin** is executed between a **glBegin** and the corresponding execution of **glEnd**().

**GL_INVALID_OPERATION** is generated if **glEnd**() is executed without being preceded by a **glBegin**.

**GL_INVALID_OPERATION** is generated if a command other than **glVertex**(), **glColor**(), **glSecondaryColor**(), **glIndex**(), **glNormal**(), **glFogCoord**(), **glTexCoord**(), **glMultiTexCoord**(), **glVertexAttrib**(), **glEvalCoord**(), **glEvalPoint**(), **glArrayElement**(), **glMaterial**(), **glEdgeFlag**(), **glCallList**(), or **glCallLists**() is executed between the execution of **glBegin** and the corresponding execution **glEnd**().

Execution of **glEnableClientState**(), **glDisableClientState**(), **glEdgeFlagPointer**(), **glFogCoordPointer**(), **glTexCoordPointer**(), **glColorPointer**(), **glSecondaryColorPointer**(), **glIndexPointer**(), **glNormalPointer**(), **glVertexPointer**(), **glVertexAttribPointer**(), **glInterleavedArrays**(), or **glPixelStore**() is not allowed after a call to **glBegin** and before the corresponding call to **glEnd**(), but an error may or may not be generated.

## See Also

**glArrayElement**(), **glCallList**(), **glCallLists**(), **glColor**(), **glEdgeFlag**(), **glEvalCoord**(), **glEvalPoint**(), **glFogCoord**(), **glIndex**(), **glMaterial**(), **glMultiTexCoord**(), **glNormal**(), **glSecondaryColor**(), **glTexCoord**(), **glVertex**(), **glVertexAttrib**()

## Copyright

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

## Authors

**opengl.org**

## Referenced By

The man page glEnd.3G(3) is an alias of glBegin.3G(3).