From 49572692b3dd78568a955b6e352a956ce98901c7 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Sun, 13 Oct 2024 20:03:15 +0100 Subject: [PATCH 1/4] Add specialization of Evaluate<> for Lazy_exact_nt --- Filtered_kernel/include/CGAL/Lazy.h | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Lazy.h b/Filtered_kernel/include/CGAL/Lazy.h index 1273248d080..5d7b22ec37b 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 From 9b7c651867d089888b62fba2623ef38ab26cd1f9 Mon Sep 17 00:00:00 2001 From: Sven Oesau Date: Mon, 14 Oct 2024 09:08:32 +0200 Subject: [PATCH 2/4] using correct dimensions for depth peeling framebuffers and shader --- Polyhedron/demo/Polyhedron/Scene.cpp | 18 ++++++++++++------ .../demo/Polyhedron/Triangle_container.cpp | 10 ++++++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Scene.cpp b/Polyhedron/demo/Polyhedron/Scene.cpp index c70929ab4a5..881f8082f9f 100644 --- a/Polyhedron/demo/Polyhedron/Scene.cpp +++ b/Polyhedron/demo/Polyhedron/Scene.cpp @@ -766,8 +766,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); @@ -781,7 +787,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); @@ -799,7 +806,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); @@ -816,7 +823,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); @@ -832,9 +839,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/Polyhedron/demo/Polyhedron/Triangle_container.cpp b/Polyhedron/demo/Polyhedron/Triangle_container.cpp index 182f401c04d..062b3681e1c 100644 --- a/Polyhedron/demo/Polyhedron/Triangle_container.cpp +++ b/Polyhedron/demo/Polyhedron/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()) { From 7d0c6014ddc3df91258b331f34902f1ac59a3f66 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 15 Oct 2024 08:37:58 +0100 Subject: [PATCH 3/4] Add a testcase that shows the reported issue (when disabling the fix) --- Polygon/test/Polygon/issue7934.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Polygon/test/Polygon/issue7934.cpp diff --git a/Polygon/test/Polygon/issue7934.cpp b/Polygon/test/Polygon/issue7934.cpp new file mode 100644 index 00000000000..c43d3661362 --- /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 From 67da146c62c8bc0ed8e567c40c884b205dc2e5ca Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 15 Oct 2024 08:49:25 +0100 Subject: [PATCH 4/4] WS --- Polygon/test/Polygon/issue7934.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon/test/Polygon/issue7934.cpp b/Polygon/test/Polygon/issue7934.cpp index c43d3661362..ca9128cc835 100644 --- a/Polygon/test/Polygon/issue7934.cpp +++ b/Polygon/test/Polygon/issue7934.cpp @@ -16,7 +16,7 @@ int main() 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