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

# gluTessVertex(3x)

specify a vertex on a polygon

## NAME

**gluTessVertex** - specify a vertex on a polygon

## C SPECIFICATION

void **gluTessVertex**( GLUtesselator\* *tess*,

```
	GLdouble *location,
	GLvoid* data )
```

delim $$

## PARAMETERS

- *tess*

  Specifies the tessellation object (created with **gluNewTess**).

- *location*

  Specifies the location of the vertex.

- *data*

  Specifies an opaque pointer passed back to the program with the vertex callback (as specified by **gluTessCallback**).

## DESCRIPTION

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

*data* 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 **GLU\_TESS\_VERTEX** or **GLU\_TESS\_VERTEX\_DATA** callback after tessellation  (see the **gluTessCallback** 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 *location* or *data* 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 *location* and *data* might not be  dereferenced until **gluTessEndPolygon** 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 *data*) and a **GLU\_TESS\_NEED\_COMBINE\_CALLBACK** error (when a local variable is used for *location*).

## SEE ALSO

**gluTessBeginPolygon(3G)**, **gluNewTess(3G)**, **gluTessBeginContour(3G)**,  **gluTessCallback(3G)**,  **gluTessProperty(3G)**, **gluTessNormal(3G)**, **gluTessEndPolygon(3G)**
