--- CGAL-3.4/include/CGAL/Nef_3/OGL_helper.h +++ CGAL-3.4/include/CGAL/Nef_3/OGL_helper.h @@ -243,6 +243,23 @@ glVertex3dv(pc); } + inline void CGAL_GLU_TESS_CALLBACK combineCallback(GLdouble coords[3], GLvoid *d[4], GLfloat w[4], GLvoid **dataOut) + { + static std::list pcache; + if (dataOut) { + GLdouble *n = new GLdouble[3]; + n[0] = coords[0]; + n[1] = coords[1]; + n[2] = coords[2]; + pcache.push_back(n); + *dataOut = n; + } else { + for (std::list::const_iterator i = pcache.begin(); i != pcache.end(); i++) + delete[] *i; + pcache.clear(); + } + } + enum { SNC_AXES}; enum { SNC_BOUNDARY, SNC_SKELETON }; @@ -376,6 +393,8 @@ GLUtesselator* tess_ = gluNewTess(); gluTessCallback(tess_, GLenum(GLU_TESS_VERTEX_DATA), (GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &vertexCallback); + gluTessCallback(tess_, GLenum(GLU_TESS_COMBINE), + (GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &combineCallback); gluTessCallback(tess_, GLenum(GLU_TESS_BEGIN), (GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &beginCallback); gluTessCallback(tess_, GLenum(GLU_TESS_END), @@ -410,6 +429,7 @@ gluTessEndPolygon(tess_); // CGAL_NEF_TRACEN("End Polygon"); gluDeleteTess(tess_); + combineCallback(NULL, NULL, NULL, NULL); } void construct_axes() const