1991-2006 Silicon Graphics, Inc.

glBegin

3G

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