42 #include "priorityq.h"
47 enum TessState { T_DORMANT, T_IN_POLYGON, T_IN_CONTOUR };
52 #define TESS_MAX_CACHE 100
69 void (GLAPIENTRY *callError)( GLenum errnum );
79 GLdouble relTolerance;
87 void (GLAPIENTRY *callCombine)( GLdouble coords[3],
void *data[4],
88 GLfloat weight[4],
void **outData );
92 GLboolean flagBoundary;
93 GLboolean boundaryOnly;
97 void (GLAPIENTRY *callBegin)( GLenum type );
98 void (GLAPIENTRY *callEdgeFlag)( GLboolean boundaryEdge );
99 void (GLAPIENTRY *callVertex)(
void *data );
100 void (GLAPIENTRY *callEnd)( void );
101 void (GLAPIENTRY *callMesh)(
GLUmesh *mesh );
106 GLboolean emptyCache;
111 void (GLAPIENTRY *callBeginData)( GLenum type,
void *polygonData );
112 void (GLAPIENTRY *callEdgeFlagData)( GLboolean boundaryEdge,
114 void (GLAPIENTRY *callVertexData)(
void *data,
void *polygonData );
115 void (GLAPIENTRY *callEndData)(
void *polygonData );
116 void (GLAPIENTRY *callErrorData)( GLenum errnum,
void *polygonData );
117 void (GLAPIENTRY *callCombineData)( GLdouble coords[3],
void *data[4],
118 GLfloat weight[4],
void **outData,
126 void GLAPIENTRY __gl_noBeginData( GLenum type,
void *polygonData );
127 void GLAPIENTRY __gl_noEdgeFlagData( GLboolean boundaryEdge,
void *polygonData );
128 void GLAPIENTRY __gl_noVertexData(
void *data,
void *polygonData );
129 void GLAPIENTRY __gl_noEndData(
void *polygonData );
130 void GLAPIENTRY __gl_noErrorData( GLenum errnum,
void *polygonData );
131 void GLAPIENTRY __gl_noCombineData( GLdouble coords[3],
void *data[4],
132 GLfloat weight[4],
void **outData,
135 #define CALL_BEGIN_OR_BEGIN_DATA(a) \
136 if (tess->callBeginData != &__gl_noBeginData) \
137 (*tess->callBeginData)((a),tess->polygonData); \
138 else (*tess->callBegin)((a));
140 #define CALL_VERTEX_OR_VERTEX_DATA(a) \
141 if (tess->callVertexData != &__gl_noVertexData) \
142 (*tess->callVertexData)((a),tess->polygonData); \
143 else (*tess->callVertex)((a));
145 #define CALL_EDGE_FLAG_OR_EDGE_FLAG_DATA(a) \
146 if (tess->callEdgeFlagData != &__gl_noEdgeFlagData) \
147 (*tess->callEdgeFlagData)((a),tess->polygonData); \
148 else (*tess->callEdgeFlag)((a));
150 #define CALL_END_OR_END_DATA() \
151 if (tess->callEndData != &__gl_noEndData) \
152 (*tess->callEndData)(tess->polygonData); \
153 else (*tess->callEnd)();
155 #define CALL_COMBINE_OR_COMBINE_DATA(a,b,c,d) \
156 if (tess->callCombineData != &__gl_noCombineData) \
157 (*tess->callCombineData)((a),(b),(c),(d),tess->polygonData); \
158 else (*tess->callCombine)((a),(b),(c),(d));
160 #define CALL_ERROR_OR_ERROR_DATA(a) \
161 if (tess->callErrorData != &__gl_noErrorData) \
162 (*tess->callErrorData)((a),tess->polygonData); \
163 else (*tess->callError)((a));