diff --git a/Filtered_kernel/include/CGAL/Lazy.h b/Filtered_kernel/include/CGAL/Lazy.h index d8f714a1831..164653d522a 100644 --- a/Filtered_kernel/include/CGAL/Lazy.h +++ b/Filtered_kernel/include/CGAL/Lazy.h @@ -111,14 +111,24 @@ templateinline std::enable_if_t::value, T> approx(T){r templateinline std::enable_if_t::value, int> depth(T){return -1;} namespace internal{ -template -struct Evaluate> -{ - void operator()(const Lazy& l) + + template + struct Evaluate> { - exact(l); - } + void operator()(const Lazy& l) + { + exact(l); + } }; + + template + struct Evaluate> + { + void operator()(const Lazy_exact_nt& l) + { + exact(l); + } + }; } // internal namespace // For an iterator, exact/approx applies to the objects it points to diff --git a/Lab/demo/Lab/Scene.cpp b/Lab/demo/Lab/Scene.cpp index b3f20ef8ef8..c48aa8b3c07 100644 --- a/Lab/demo/Lab/Scene.cpp +++ b/Lab/demo/Lab/Scene.cpp @@ -768,8 +768,14 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer) fbos.resize(static_cast(viewer->total_pass())); depth_test.resize(static_cast(viewer->total_pass())-1); + int viewport[4]; + viewer->glGetIntegerv(GL_VIEWPORT, viewport); + + int w = viewport[2];// viewer->width(); + int h = viewport[3];// viewer->height(); + //first pass - fbos[0] = new QOpenGLFramebufferObject(viewer->width(), viewer->height(),QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F); + fbos[0] = new QOpenGLFramebufferObject(w, h, QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F); fbos[0]->bind(); viewer->glDisable(GL_BLEND); viewer->glEnable(GL_DEPTH_TEST); @@ -783,7 +789,8 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer) renderScene(opaque_items, viewer, picked_item_IDs, false, 0,false, nullptr); renderScene(transparent_items, viewer, picked_item_IDs, false, 0,false, nullptr); fbos[0]->release(); - depth_test[0] = new QOpenGLFramebufferObject(viewer->width(), viewer->height(),QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F); + + depth_test[0] = new QOpenGLFramebufferObject(w, h,QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F); depth_test[0]->bind(); viewer->glDisable(GL_BLEND); viewer->glEnable(GL_DEPTH_TEST); @@ -801,7 +808,7 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer) //other passes for(int i=1; itotal_pass()-1; ++i) { - fbos[i] = new QOpenGLFramebufferObject(viewer->width(), viewer->height(),QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F); + fbos[i] = new QOpenGLFramebufferObject(w, h,QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F); fbos[i]->bind(); viewer->glDisable(GL_BLEND); viewer->glEnable(GL_DEPTH_TEST); @@ -818,7 +825,7 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer) renderScene(transparent_items, viewer, picked_item_IDs, false, i, false, depth_test[i-1]); fbos[i]->release(); - depth_test[i] = new QOpenGLFramebufferObject(viewer->width(), viewer->height(),QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F); + depth_test[i] = new QOpenGLFramebufferObject(w, h,QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F); depth_test[i]->bind(); viewer->glDisable(GL_BLEND); viewer->glEnable(GL_DEPTH_TEST); @@ -834,9 +841,8 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer) depth_test[i]->release(); } - //last pass - fbos[static_cast(viewer->total_pass())-1] = new QOpenGLFramebufferObject(viewer->width(), viewer->height(),QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F); + fbos[static_cast(viewer->total_pass())-1] = new QOpenGLFramebufferObject(w, h,QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F); fbos[static_cast(viewer->total_pass())-1]->bind(); viewer->glDisable(GL_BLEND); viewer->glEnable(GL_DEPTH_TEST); diff --git a/Lab/demo/Lab/Triangle_container.cpp b/Lab/demo/Lab/Triangle_container.cpp index 182f401c04d..062b3681e1c 100644 --- a/Lab/demo/Lab/Triangle_container.cpp +++ b/Lab/demo/Lab/Triangle_container.cpp @@ -185,8 +185,11 @@ void Triangle_container::draw(Viewer_interface* viewer, getVao(viewer)->program->setUniformValue("far", static_cast(viewer->camera()->zFar())); getVao(viewer)->program->setUniformValue("writing", viewer->isDepthWriting()); getVao(viewer)->program->setUniformValue("alpha", d->alpha); - if( fbo) + if(fbo) { viewer->glBindTexture(GL_TEXTURE_2D, fbo->texture()); + getVao(viewer)->program->setUniformValue("width", fbo->width() * 1.0f); + getVao(viewer)->program->setUniformValue("height", fbo->height() * 1.0f); + } } if(getVao(viewer)->program->property("drawLinesAdjacency").toBool()) { @@ -225,8 +228,11 @@ void Triangle_container::draw(Viewer_interface* viewer, getVao(viewer)->program->setUniformValue("far", static_cast(viewer->camera()->zFar())); getVao(viewer)->program->setUniformValue("writing", viewer->isDepthWriting()); getVao(viewer)->program->setUniformValue("alpha", d->alpha); - if( fbo) + if(fbo) { viewer->glBindTexture(GL_TEXTURE_2D, fbo->texture()); + getVao(viewer)->program->setUniformValue("width", fbo->width() * 1.0f); + getVao(viewer)->program->setUniformValue("height", fbo->height() * 1.0f); + } } if(getVao(viewer)->program->property("isInstanced").toBool()) { diff --git a/Polygon/test/Polygon/issue7934.cpp b/Polygon/test/Polygon/issue7934.cpp new file mode 100644 index 00000000000..ca9128cc835 --- /dev/null +++ b/Polygon/test/Polygon/issue7934.cpp @@ -0,0 +1,22 @@ +#include +#include +#include +#include + +using Kernel = CGAL::Exact_predicates_exact_constructions_kernel; +using Point_2 = Kernel::Point_2; +using Polygon_2 = CGAL::Polygon_2; + +int main() +{ + Polygon_2 polygon; + for (int i = 0; i < 200000; ++i) { + polygon.push_back(Point_2(i* 1.04663, 0)); + } + polygon.push_back(Point_2( 3.1415, 3.1415)); + + auto ar = CGAL::polygon_area_2(polygon.vertices_begin(), polygon.vertices_end(), Kernel()); + + std::cout << "done" << std::endl; + return 0; +} \ No newline at end of file