Merge remote-tracking branch 'cgal/5.6.x-branch'

This commit is contained in:
Sébastien Loriot 2024-10-18 18:00:08 +02:00
commit 0b9b42ace5
4 changed files with 58 additions and 14 deletions

View File

@ -111,14 +111,24 @@ template<class T>inline std::enable_if_t<std::is_empty<T>::value, T> approx(T){r
template<class T>inline std::enable_if_t<std::is_empty<T>::value, int> depth(T){return -1;} template<class T>inline std::enable_if_t<std::is_empty<T>::value, int> depth(T){return -1;}
namespace internal{ namespace internal{
template <typename AT, typename ET, typename E2A>
struct Evaluate<Lazy<AT,ET,E2A>> template <typename AT, typename ET, typename E2A>
{ struct Evaluate<Lazy<AT, ET, E2A>>
void operator()(const Lazy<AT,ET,E2A>& l)
{ {
exact(l); void operator()(const Lazy<AT, ET, E2A>& l)
} {
exact(l);
}
}; };
template <typename ET>
struct Evaluate<Lazy_exact_nt<ET>>
{
void operator()(const Lazy_exact_nt<ET>& l)
{
exact(l);
}
};
} // internal namespace } // internal namespace
// For an iterator, exact/approx applies to the objects it points to // For an iterator, exact/approx applies to the objects it points to

View File

@ -768,8 +768,14 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer)
fbos.resize(static_cast<int>(viewer->total_pass())); fbos.resize(static_cast<int>(viewer->total_pass()));
depth_test.resize(static_cast<int>(viewer->total_pass())-1); depth_test.resize(static_cast<int>(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 //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(); fbos[0]->bind();
viewer->glDisable(GL_BLEND); viewer->glDisable(GL_BLEND);
viewer->glEnable(GL_DEPTH_TEST); 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(opaque_items, viewer, picked_item_IDs, false, 0,false, nullptr);
renderScene(transparent_items, viewer, picked_item_IDs, false, 0,false, nullptr); renderScene(transparent_items, viewer, picked_item_IDs, false, 0,false, nullptr);
fbos[0]->release(); 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(); depth_test[0]->bind();
viewer->glDisable(GL_BLEND); viewer->glDisable(GL_BLEND);
viewer->glEnable(GL_DEPTH_TEST); viewer->glEnable(GL_DEPTH_TEST);
@ -801,7 +808,7 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer)
//other passes //other passes
for(int i=1; i<viewer->total_pass()-1; ++i) for(int i=1; i<viewer->total_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(); fbos[i]->bind();
viewer->glDisable(GL_BLEND); viewer->glDisable(GL_BLEND);
viewer->glEnable(GL_DEPTH_TEST); 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]); renderScene(transparent_items, viewer, picked_item_IDs, false, i, false, depth_test[i-1]);
fbos[i]->release(); 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(); depth_test[i]->bind();
viewer->glDisable(GL_BLEND); viewer->glDisable(GL_BLEND);
viewer->glEnable(GL_DEPTH_TEST); viewer->glEnable(GL_DEPTH_TEST);
@ -834,9 +841,8 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer)
depth_test[i]->release(); depth_test[i]->release();
} }
//last pass //last pass
fbos[static_cast<int>(viewer->total_pass())-1] = new QOpenGLFramebufferObject(viewer->width(), viewer->height(),QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F); fbos[static_cast<int>(viewer->total_pass())-1] = new QOpenGLFramebufferObject(w, h,QOpenGLFramebufferObject::Depth, GL_TEXTURE_2D, GL_RGBA32F);
fbos[static_cast<int>(viewer->total_pass())-1]->bind(); fbos[static_cast<int>(viewer->total_pass())-1]->bind();
viewer->glDisable(GL_BLEND); viewer->glDisable(GL_BLEND);
viewer->glEnable(GL_DEPTH_TEST); viewer->glEnable(GL_DEPTH_TEST);

View File

@ -185,8 +185,11 @@ void Triangle_container::draw(Viewer_interface* viewer,
getVao(viewer)->program->setUniformValue("far", static_cast<float>(viewer->camera()->zFar())); getVao(viewer)->program->setUniformValue("far", static_cast<float>(viewer->camera()->zFar()));
getVao(viewer)->program->setUniformValue("writing", viewer->isDepthWriting()); getVao(viewer)->program->setUniformValue("writing", viewer->isDepthWriting());
getVao(viewer)->program->setUniformValue("alpha", d->alpha); getVao(viewer)->program->setUniformValue("alpha", d->alpha);
if( fbo) if(fbo) {
viewer->glBindTexture(GL_TEXTURE_2D, fbo->texture()); 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()) 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<float>(viewer->camera()->zFar())); getVao(viewer)->program->setUniformValue("far", static_cast<float>(viewer->camera()->zFar()));
getVao(viewer)->program->setUniformValue("writing", viewer->isDepthWriting()); getVao(viewer)->program->setUniformValue("writing", viewer->isDepthWriting());
getVao(viewer)->program->setUniformValue("alpha", d->alpha); getVao(viewer)->program->setUniformValue("alpha", d->alpha);
if( fbo) if(fbo) {
viewer->glBindTexture(GL_TEXTURE_2D, fbo->texture()); 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()) if(getVao(viewer)->program->property("isInstanced").toBool())
{ {

View File

@ -0,0 +1,22 @@
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Polygon_2.h>
#include <CGAL/Polygon_2_algorithms.h>
#include <iostream>
using Kernel = CGAL::Exact_predicates_exact_constructions_kernel;
using Point_2 = Kernel::Point_2;
using Polygon_2 = CGAL::Polygon_2<Kernel>;
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;
}