---
name: "gluBeginSurface"
section: "3x"
platform: "linux"
package: "xlibmesa-glu-dev"
version: "4.3.0.dfsg.1-14sarge7"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/gluBeginSurface"
---

# gluBeginSurface(3x)

delimit a NURBS surface definition

## NAME

**gluBeginSurface, gluEndSurface** - delimit a NURBS surface definition

## C SPECIFICATION

void **gluBeginSurface**( GLUnurbs\* *nurb* )

```

```

void **gluEndSurface**( GLUnurbs\* *nurb* )

```

```

delim $$

## PARAMETERS

- *nurb*

  Specifies the NURBS object (created with **gluNewNurbsRenderer**).

## DESCRIPTION

Use **gluBeginSurface** to mark the beginning of a NURBS  surface definition. After  calling **gluBeginSurface**, make one or more calls to **gluNurbsSurface** to define the attributes of the surface. Exactly one of these calls to **gluNurbsSurface** must have a surface type of **GL\_MAP2\_VERTEX\_3** or **GL\_MAP2\_VERTEX\_4**. To mark the end of the NURBS surface definition, call **gluEndSurface**.

Trimming of NURBS surfaces is supported with **gluBeginTrim**,  **gluPwlCurve**, **gluNurbsCurve**, and **gluEndTrim**. See the **gluBeginTrim** reference page for details.

GL evaluators are used to render the NURBS surface as a set of polygons. Evaluator state is preserved during rendering with **glPushAttrib**(**GL\_EVAL\_BIT**) and  **glPopAttrib**().   See the **glPushAttrib** reference page for details on exactly what state these calls preserve.

## EXAMPLE

The following commands render a textured NURBS surface with normals; the texture coordinates and normals are also described as NURBS surfaces:

gluBeginSurface(nobj);\
    gluNurbsSurface(nobj, ..., GL\_MAP2\_TEXTURE\_COORD\_2);\
    gluNurbsSurface(nobj, ..., GL\_MAP2\_NORMAL);\
    gluNurbsSurface(nobj, ..., GL\_MAP2\_VERTEX\_4); gluEndSurface(nobj);

## SEE ALSO

**gluBeginCurve(3G)**, **gluBeginTrim(3G)**, **gluNewNurbsRenderer(3G)**,  **gluNurbsCurve(3G)**, **gluNurbsSurface(3G)**, **gluPwlCurve(3G)**
