43 #ifdef CHECK_MEMORY_LEAKS
45 #endif // CHECK_MEMORY_LEAKS
54 Polygon(id, type, color, shape, fill, layer, angle, imgFile),
71 FXString t(
myType.c_str());
73 new FXMenuSeparator(ret);
103 const GLubyte* estring;
105 estring = gluErrorString(errorCode);
106 fprintf(stderr,
"Tessellation Error: %s\n", estring);
115 glVertex3dv((GLdouble*) vertex);
119 GLdouble* vertex_data[4],
120 GLfloat weight[4], GLdouble** dataOut) {
125 vertex = (GLdouble*) malloc(7 *
sizeof(GLdouble));
127 vertex[0] = coords[0];
128 vertex[1] = coords[1];
129 vertex[2] = coords[2];
172 if (textureID >= 0) {
173 glEnable(GL_TEXTURE_2D);
174 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
175 glDisable(GL_CULL_FACE);
176 glDisable(GL_DEPTH_TEST);
177 glDisable(GL_LIGHTING);
178 glDisable(GL_COLOR_MATERIAL);
179 glDisable(GL_ALPHA_TEST);
181 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
182 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
183 glBindTexture(GL_TEXTURE_2D, textureID);
184 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
185 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
187 glEnable(GL_TEXTURE_GEN_S);
188 glEnable(GL_TEXTURE_GEN_T);
189 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
190 glTexGenfv(GL_S, GL_OBJECT_PLANE,
xPlane);
191 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
192 glTexGenfv(GL_T, GL_OBJECT_PLANE,
yPlane);
198 if (textureID >= 0) {
199 glEnable(GL_DEPTH_TEST);
200 glBindTexture(GL_TEXTURE_2D, 0);
201 glDisable(GL_TEXTURE_2D);
202 glDisable(GL_TEXTURE_GEN_S);
203 glDisable(GL_TEXTURE_GEN_T);
214 Polygon::setShape(shape);
223 double* points =
new double[
myShape.size() * 3];
224 GLUtesselator* tobj = gluNewTess();
225 gluTessCallback(tobj, GLU_TESS_VERTEX, (GLvoid(APIENTRY*)()) &glVertex3dv);
226 gluTessCallback(tobj, GLU_TESS_BEGIN, (GLvoid(APIENTRY*)()) &
beginCallback);
227 gluTessCallback(tobj, GLU_TESS_END, (GLvoid(APIENTRY*)()) &
endCallback);
229 gluTessCallback(tobj, GLU_TESS_COMBINE, (GLvoid(APIENTRY*)()) &
combineCallback);
230 gluTessProperty(tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD);
231 gluTessBeginPolygon(tobj, NULL);
232 gluTessBeginContour(tobj);
233 for (
size_t i = 0; i !=
myShape.size(); ++i) {
236 points[3 * i + 2] = 0;
237 gluTessVertex(tobj, points + 3 * i, points + 3 * i);
239 gluTessEndContour(tobj);
241 gluTessEndPolygon(tobj);
261 throw ProcessError(
"GUIPolygon::storeTesselation() could not create display list");