Go to the documentation of this file.
3 #ifndef tools_glutess_glutess
4 #define tools_glutess_glutess
26 #define GLU_TESS_DEFAULT_TOLERANCE 0.0
27 #define GLU_TESS_MESH 100112
111 if( tess->
mesh != NULL ) {
119 #define RequireState( tess, s ) if( tess->state != s ) static_GotoState(tess,s)
123 while( tess->
state != newState ) {
127 if( tess->
state < newState ) {
128 switch( tess->
state ) {
141 switch( tess->
state ) {
174 if( value < 0.0 || value > 1.0 )
break;
180 if( windingRule != value )
break;
182 switch( windingRule ) {
276 tess->callBeginData = (fn == NULL) ?
288 tess->callEdgeFlagData= (fn == NULL) ?
300 tess->callVertexData = (fn == NULL) ?
314 tess->callErrorData = (fn == NULL) ?
347 if (e == NULL)
return 0;
395 if (tess->
mesh == NULL)
return 0;
397 for( vLast = v + tess->
cacheCount; v < vLast; ++v ) {
422 for( i = 0; i < 3; ++i ) {
438 if( tess->
mesh == NULL ) {
497 if (setjmp(tess->
env) != 0) {
506 if( tess->
mesh == NULL ) {
534 longjmp(tess->
env,1);
550 if (rc == 0) longjmp(tess->
env,1);
576 (*tess->callMesh)( mesh );
#define GLU_TESS_MISSING_END_POLYGON
inline void GLUAPIENTRY static_noCombine(GLUdouble[3], void *[4], GLUfloat[4], void **)
GLUhalfEdge * __gl_meshSplitEdge(GLUhalfEdge *eOrg)
void GLUAPIENTRY __gl_noBeginData(GLUenum, void *)
#define GLU_TESS_WINDING_POSITIVE
inline void static_GotoState(GLUtesselator *tess, enum TessState newState)
#define GLU_TESS_DEFAULT_TOLERANCE
void GLUAPIENTRY gluTessCallback_GLU_TESS_VERTEX_DATA(GLUtesselator *tess, void(GLUAPIENTRY *a_fn)(void *, void *))
#define GLU_TESS_TOLERANCE
void GLUAPIENTRY gluTessCallback_GLU_TESS_COMBINE_DATA(GLUtesselator *tess, void(GLUAPIENTRY *a_fn)(GLUdouble[3], void *[4], GLUfloat[4], void **, void *))
#define GLU_TESS_BOUNDARY_ONLY
void GLUAPIENTRY __gl_noEdgeFlagData(GLUboolean, void *)
CachedVertex cache[GLU_TESS_MAX_CACHE]
void GLUAPIENTRY gluGetTessProperty(GLUtesselator *tess, GLUenum which, GLUdouble *value)
#define GLU_TESS_MISSING_END_CONTOUR
int __gl_computeInterior(GLUtesselator *tess)
GLUAPI void GLUAPIENTRY gluTessCallback(GLUtesselator *tess, GLUenum which, _GLUfuncptr CallBackFunc)
#define GLU_TESS_COMBINE_DATA
int __gl_meshSplice(GLUhalfEdge *eOrg, GLUhalfEdge *eDst)
#define GLU_TESS_MISSING_BEGIN_CONTOUR
void __gl_projectPolygon(GLUtesselator *tess)
void GLUAPIENTRY __gl_noErrorData(GLUenum, void *)
void __gl_meshDeleteMesh(GLUmesh *mesh)
GLUAPI void GLUAPIENTRY gluTessBeginPolygon(GLUtesselator *tess, GLUvoid *data)
inline void GLUAPIENTRY static_noEdgeFlag(GLUboolean)
inline void static_CacheVertex(GLUtesselator *tess, GLUdouble coords[3], void *data)
#define GLU_TESS_WINDING_ABS_GEQ_TWO
void GLUAPIENTRY __gl_noEndData(void *)
void GLUAPIENTRY gluTessCallback_GLU_TESS_ERROR_DATA(GLUtesselator *tess, void(GLUAPIENTRY *a_fn)(GLUenum, void *))
int __gl_meshTessellateInterior(GLUmesh *mesh)
GLUboolean __gl_renderCache(GLUtesselator *tess)
#define GLU_TESS_WINDING_NEGATIVE
void __gl_renderMesh(GLUtesselator *tess, GLUmesh *mesh)
inline void static_MakeDormant(GLUtesselator *tess)
#define GLU_TESS_MISSING_BEGIN_POLYGON
inline void GLUAPIENTRY static_noError(GLUenum)
#define RequireState(tess, s)
#define CALL_ERROR_OR_ERROR_DATA(a)
inline void GLUAPIENTRY static_noEnd(void)
GLUAPI void GLUAPIENTRY gluTessBeginContour(GLUtesselator *tess)
#define GLU_TESS_ERROR_DATA
#define GLU_TESS_WINDING_ODD
#define GLU_TESS_MAX_CACHE
#define GLU_OUT_OF_MEMORY
void __gl_meshDiscardExterior(GLUmesh *mesh)
#define GLU_TESS_END_DATA
#define GLU_TESS_COORD_TOO_LARGE
GLUAPI void GLUAPIENTRY gluTessEndContour(GLUtesselator *tess)
GLUhalfEdge * __gl_meshMakeEdge(GLUmesh *mesh)
#define GLU_TESS_BEGIN_DATA
GLUAPI void GLUAPIENTRY gluDeleteTess(GLUtesselator *tess)
#define GLU_INVALID_VALUE
#define GLU_TESS_EDGE_FLAG
GLUAPI void GLUAPIENTRY gluTessEndPolygon(GLUtesselator *tess)
GLUAPI void GLUAPIENTRY gluTessNormal(GLUtesselator *tess, GLUdouble valueX, GLUdouble valueY, GLUdouble valueZ)
#define GLU_TESS_EDGE_FLAG_DATA
inline int static_EmptyCache(GLUtesselator *tess)
inline void GLUAPIENTRY static_noVertex(void *)
void GLUAPIENTRY __gl_noVertexData(void *, void *)
void GLUAPIENTRY gluTessCallback_GLU_TESS_BEGIN_DATA(GLUtesselator *tess, void(GLUAPIENTRY *a_fn)(GLUenum, void *))
GLUmesh * __gl_meshNewMesh(void)
void GLUAPIENTRY __gl_noCombineData(GLUdouble[3], void *[4], GLUfloat[4], void **, void *)
GLUAPI GLUtesselator *GLUAPIENTRY gluNewTess(void)
inline int static_AddVertex(GLUtesselator *tess, GLUdouble coords[3], void *data)
#define GLU_TESS_WINDING_NONZERO
inline void GLUAPIENTRY static_noBegin(GLUenum)
GLUAPI void GLUAPIENTRY gluTessVertex(GLUtesselator *tess, GLUdouble *location, GLUvoid *data)
void __gl_meshCheckMesh(GLUmesh *mesh)
GLUAPI void GLUAPIENTRY gluTessProperty(GLUtesselator *tess, GLUenum which, GLUdouble data)
void __gl_renderBoundary(GLUtesselator *tess, GLUmesh *mesh)
#define GLU_TESS_VERTEX_DATA
int __gl_meshSetWindingNumber(GLUmesh *mesh, int value, GLUboolean keepOnlyBoundary)
#define GLU_TESS_WINDING_RULE
void GLUAPIENTRY gluTessCallback_GLU_TESS_END_DATA(GLUtesselator *tess, void(GLUAPIENTRY *a_fn)(void *))
#define GLU_TESS_MAX_COORD
inline void GLUAPIENTRY static_noMesh(GLUmesh *)