NAME
	  gluNurbsCallback - define a callback for a NURBS object


     C SPECIFICATION
	  void gluNurbsCallback( GLUnurbs* nurb,
				 GLenum	which,
				 GLvoid	(*CallBackFunc)( )


     PARAMETERS
	  nurb		Specifies the NURBS object (created with
			gluNewNurbsRenderer).

	  which		Specifies the callback being defined. Valid
			values are GLU_NURBS_BEGIN_EXT,
			GLU_NURBS_VERTEX_EXT, GLU_NORMAL_EXT,
			GLU_NURBS_COLOR_EXT,
			GLU_NURBS_TEXTURE_COORD_EXT, GLU_END_EXT,
			GLU_NURBS_BEGIN_DATA_EXT,
			GLU_NURBS_VERTEX_DATA_EXT,
			GLU_NORMAL_DATA_EXT, GLU_NURBS_COLOR_DATA_EXT,
			GLU_NURBS_TEXTURE_COORD_DATA_EXT,
			GLU_END_DATA_EXT, and GLU_ERROR.

	  CallBackFunc	Specifies the function that the	callback
			calls.

     DESCRIPTION
	  gluNurbsCallback is used to define a callback	to be used by
	  a NURBS object.  If the specified callback is	already
	  defined, then	it is replaced.	 If CallBackFunc is NULL, then
	  this callback	will not get invoked and the related data, if
	  any, will be lost.

	  Except the error callback, these callbacks are used by NURBS
	  tessellator (when GLU_NURBS_MODE_EXT is set to be
	  GLU_NURBS_TESSELLATOR_EXT) to	return back the	openGL polygon
	  primitives resulted from the tessellation. Note that there
	  are two versions of each callback: one with a	user data
	  pointer and one without. If both versions for	a particular
	  callback are specified then the callback with	the user data
	  pointer will be used.	Note that "userData" is	a copy of the
	  pointer that was specified at	the last call to
	  gluNurbsCallbackDataEXT.

	  The error callback function is effective no matter which
	  value	that GLU_NURBS_MODE_EXT	is set to.  All	other callback
	  functions are	effective only when GLU_NURBS_MODE_EXT is set
	  to GLU_NURBS_TESSELLATOR_EXT.

	  The legal callbacks are as follows:
	  GLU_NURBS_BEGIN_EXT
		    The	begin callback indicates the start of a
		    primitive. The function takes a single argument of
		    type GLenum	which can be one of GL_LINES,
		    GL_LINE_STRIPS, GL_TRIANGLE_FAN,
		    GL_TRIANGLE_STRIP, GL_TRIANGLES, or	GL_QUAD_STRIP.
		    The	default	begin callback function	is NULL. The
		    function prototype for this	callback looks like:
		    void begin ( GLenum	type );

	  GLU_NURBS_BEGIN_DATA_EXT
		    The	same as	the GLU_NURBS_BEGIN_EXT	callback
		    except that	it takes an additional pointer
		    argument. This pointer is a	copy of	the pointer
		    that was specified at the last call	to
		    gluNurbsCallbackDataEXT.  The default callback
		    function is	NULL. The function prototype for this
		    callback function looks like:
		    void beginData (GLenum type, void *userData);

	  GLU_NURBS_VERTEX_EXT
		    The	vertex callback	indicates a vertex of the
		    primitive. The coordinates of the vertex are
		    stored in the parameter "vertex". All the
		    generated vertices have dimension 3, that is,
		    homogeneous	coordinates have been transformed into
		    affine coordinates.	The default vertex callback
		    function is	NULL. The function prototype for this
		    callback function looks like:
		    void vertex	( GLfloat *vertex );

	  GLU_NURBS_VERTEX_DATA_EXT
		    The	same as	the GLU_NURBS_VERTEX_EXT callback
		    except that	it takes an additional pointer
		    argument. This pointer is a	copy of	the pointer
		    that was specified at the last call	to
		    gluNurbsCallbackDataEXT.  The default callback
		    function is	NULL. The function prototype for this
		    callback function looks like:
		    void vertexData ( GLfloat *vertex, void *userData
		    );

	  GLU_NORMAL_EXT
		    The	normal callback	is invoked as the vertex
		    normal is generated.  The components of the	normal
		    are	stored in the parameter	"normal".  In the case
		    of a NURBS curve, the callback function is
		    effective only when	the user provides a normal map
		    (GL_MAP1_NORMAL).  In the case of a	NURBS surface,
		    if a normal	map (GL_MAP2_NORMAL) is	provided, then
		    the	generated normal is computed from the normal
		    map.  If a normal map is not provided then a
		    surface normal is computed in a manner similar to
		    that described for evaluators when GL_AUTO_NORMAL
		    is enabled.	The  default normal callback function
		    is NULL. The function prototype for	this callback
		    function looks like:
		    void normal	( GLfloat *normal );

	  GLU_NORMAL_DATA_EXT
		    The	same as	the GLU_NURBS_NORMAL_EXT callback
		    except that	it takes an additional pointer
		    argument. This pointer is a	copy of	the pointer
		    that was specified at the last call	to
		    gluNurbsCallbackDataEXT.  The default callback
		    function is	NULL. The function prototype for this
		    callback function looks like:
		    void normalData ( GLfloat *normal, void *userData
		    );

	  GLU_NURBS_COLOR_EXT
		    The	color callback is invoked as the color of a
		    vertex is generated.  The components of the	color
		    are	stored in the parameter	"color".  This
		    callback is	effective only when the	user provides
		    a color map	(GL_MAP1_COLOR_4 or GL_MAP2_COLOR_4).
		    "color" contains four components: R,G,B,A. The
		    default color callback function is NULL. The
		    prototype for this callback	function looks like:
		    void color ( GLfloat *color	);

	  GLU_NURBS_COLOR_DATA_EXT
		    The	same as	the GLU_NURBS_COLOR_EXT	callback
		    except that	it takes an additional pointer
		    argument. This pointer is a	copy of	the pointer
		    that was specified at the last call	to
		    gluNurbsCallbackDataEXT.  The default callback
		    function is	NULL. The function prototype for this
		    callback function looks like:
		    void colorData ( GLfloat *color, void *userData );

	  GLU_NURBS_TEXTURE_COORD_EXT
		    The	texture	callback is invoked as the texture
		    coordinates	of a vertex are	generated. These
		    coordinates	are stored in the parameter
		    "texCoord".	The number of texture coordinates can
		    be 1, 2, 3,	or 4 depending on which	type of
		    texture map	is specified (GL_MAP*_TEXTURE_COORD_1,
		    GL_MAP*_TEXTURE_COORD_2, GL_MAP*_TEXTURE_COORD_3,
		    GL_MAP*_TEXTURE_COORD_4 where * can	be either 1 or
		    2).	 If no texture map is specified, this callback
		    function will not be called.  The default texture
		    callback function is NULL. The function prototype
		    for	this callback function looks like:
		    void texCoord ( GLfloat *texCoord );

	   GLU_NURBS_TEXTURE_COORD_DATA_EXT
		    The	same as	the GLU_NURBS_TEXTURE_COORD_EXT
		    callback except that it takes an additional
		    pointer argument. This pointer is a	copy of	the
		    pointer that was specified at the last call	to
		    gluNurbsCallbackDataEXT.  The default callback
		    function is	NULL. The function prototype for this
		    callback function looks like:
		    void texCoordData (GLfloat *texCoord, void
		    *userData);

	  GLU_END_EXT
		    The	end callback is	invoked	at the end of a
		    primitive. The default end callback	function is
		    NULL. The function prototype for this callback
		    function looks like:
		    void end ( void );

	  GLU_END_DATA_EXT
		    The	same as	the GLU_NURBS_TEXTURE_COORD_EXT
		    callback except that it takes an additional
		    pointer argument. This pointer is a	copy of	the
		    pointer that was specified at the last call	to
		    gluNurbsCallbackDataEXT.  The default callback
		    function is	NULL. The function prototype for this
		    callback function looks like:
		    void endData ( void	 *userData );

	  GLU_ERROR The	error function is called when an error is
		    encountered.  Its single argument is of type
		    GLenum, and	it indicates the specific error	that
		    occurred.  There are 37 errors unique to NURBS
		    named GLU_NURBS_ERROR1 through GLU_NURBS_ERROR37.
		    Character strings describing these errors can be
		    retrieved with gluErrorString.


     SEE ALSO
	  gluErrorString, gluNewNurbsRenderer