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

# glBegin(3x)

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

## NAME

**glBegin, glEnd** - delimit the vertices of a primitive or a group of like primitives

## C SPECIFICATION

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

```

```

delim $$

## 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 $2n^-^1$ and $2n$ 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 $3n^-^2$, $3n^-^1$, and $3n$ 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 $4n^-^3$, $4n^-^2$, $4n^-^1$, and $4n$ 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 $2n^-^1$, $2n$, $2n~+~2$, and $2n~+~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**, **glIndex**, **glNormal**, **glTexCoord**, **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**, **glIndex**, **glNormal**, **glTexCoord**, **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**, **glTexCoordPointer**, **glColorPointer**, **glIndexPointer**, **glNormalPointer**,\
 **glVertexPointer**, **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(3G)**, **glCallList(3G)**, **glCallLists(3G)**, **glColor(3G)**, **glEdgeFlag(3G)**, **glEvalCoord(3G)**,\
 **glEvalPoint(3G)**, **glIndex(3G)**, **glMaterial(3G)**, **glNormal(3G)**, **glTexCoord(3G)**, **glVertex(3G)**
