NAME

gluTessVertex - specify a vertex on a polygon

C SPECIFICATION

void gglluuTTeessssVVeerrtteexx( GLUtesselator* _t_e_s_s,
                    GLdouble _*_l_o_c_a_t_i_o_n,
                    GLvoid* _d_a_t_a )

delim $$

PARAMETERS

_t_e_s_s
Specifies the tessellation object (created with gglluuNNeewwTTeessss).
_l_o_c_a_t_i_o_n
Specifies the location of the vertex.
_d_a_t_a
Specifies an opaque pointer passed back to the program with the vertex callback (as specified by gglluuTTeessssCCaallllbbaacckk).

DESCRIPTION

gglluuTTeessssVVeerrtteexx describes a vertex on a polygon that the program defines. Successive gglluuTTeessssVVeerrtteexx calls describe a closed contour. For example, to describe a quadrilateral gglluuTTeessssVVeerrtteexx should be called four times. gglluuTTeessssVVeerrtteexx can only be called between gglluuTTeessssBBeeggiinnCCoonnttoouurr and gglluuTTeessssEEnnddCCoonnttoouurr.

_d_a_t_a normally points to a structure containing the vertex location, as well as other per-vertex attributes such as color and normal. This pointer is passed back to the user through the GGLLUU__TTEESSSS__VVEERRTTEEXX or GGLLUU__TTEESSSS__VVEERRTTEEXX__DDAATTAA callback after tessellation (see the gglluuTTeessssCCaallllbbaacckk reference page).

EXAMPLE

A quadrilateral with a triangular hole in it can be described as follows:

gluTessBeginPolygon(tobj, NULL); gluTessBeginContour(tobj); gluTessVertex(tobj, v1, v1); gluTessVertex(tobj, v2, v2); gluTessVertex(tobj, v3, v3); gluTessVertex(tobj, v4, v4); gluTessEndContour(tobj); gluTessBeginContour(tobj); gluTessVertex(tobj, v5, v5); gluTessVertex(tobj, v6, v6); gluTessVertex(tobj, v7, v7); gluTessEndContour(tobj); gluTessEndPolygon(tobj);

NOTES

It is a common error to use a local variable for _l_o_c_a_t_i_o_n or _d_a_t_a and store values into it as part of a loop. For example: for (i = 0; i < NVERTICES; ++i) { GLdouble data[3]; data[0] = vertex[i][0]; data[1] = vertex[i][1]; data[2] = vertex[i][2]; gluTessVertex(tobj, data, data); }

This doesn't work. Because the pointers specified by _l_o_c_a_t_i_o_n and _d_a_t_a might not be dereferenced until gglluuTTeessssEEnnddPPoollyyggoonn is executed, all the vertex coordinates but the very last set could be overwritten before tessellation begins.

Two common symptoms of this problem are consists of a single point (when a local variable is used for _d_a_t_a) and a GGLLUU__TTEESSSS__NNEEEEDD__CCOOMMBBIINNEE__CCAALLLLBBAACCKK error (when a local variable is used for _l_o_c_a_t_i_o_n).

SEE ALSO

gglluuTTeessssBBeeggiinnPPoollyyggoonn((33GG)), gglluuNNeewwTTeessss((33GG)), gglluuTTeessssBBeeggiinnCCoonnttoouurr((33GG)), gglluuTTeessssCCaallllbbaacckk((33GG)), gglluuTTeessssPPrrooppeerrttyy((33GG)), gglluuTTeessssNNoorrmmaall((33GG)), gglluuTTeessssEEnnddPPoollyyggoonn((33GG))