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.