diff options
Diffstat (limited to 'patches/CGAL-OGL-Tess-Combine-Fix.patch')
-rw-r--r-- | patches/CGAL-OGL-Tess-Combine-Fix.patch | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/patches/CGAL-OGL-Tess-Combine-Fix.patch b/patches/CGAL-OGL-Tess-Combine-Fix.patch new file mode 100644 index 0000000..2a4ad1a --- /dev/null +++ b/patches/CGAL-OGL-Tess-Combine-Fix.patch @@ -0,0 +1,43 @@ +--- 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<GLdouble*> 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<GLdouble*>::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 |