From 6b932aa96e2aeada7d0181d1e344e25a9a2234da Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 11 Jul 2024 17:39:23 +0200 Subject: [PATCH] Gui: Use of Multisample class --- src/Gui/Multisample.cpp | 16 +++++ src/Gui/Multisample.h | 2 + .../PreferencePages/DlgSettings3DViewImp.cpp | 66 ++----------------- src/Gui/View3DInventorViewer.cpp | 22 +------ src/Gui/View3DInventorViewer.h | 16 ----- 5 files changed, 28 insertions(+), 94 deletions(-) diff --git a/src/Gui/Multisample.cpp b/src/Gui/Multisample.cpp index a76d8fb3ed..b97e06b25a 100644 --- a/src/Gui/Multisample.cpp +++ b/src/Gui/Multisample.cpp @@ -28,6 +28,8 @@ #endif #include "Multisample.h" +#include +#include using namespace Gui; @@ -103,3 +105,17 @@ AntiAliasing Multisample::toAntiAliasing(int samples) } return AntiAliasing::None; } + +AntiAliasing Multisample::readMSAAFromSettings() +{ + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath + ("User parameter:BaseApp/Preferences/View"); + return AntiAliasing(hGrp->GetInt("AntiAliasing", int(Gui::AntiAliasing::None))); +} + +void Multisample::writeMSAAToSettings(AntiAliasing msaa) +{ + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath + ("User parameter:BaseApp/Preferences/View"); + hGrp->SetInt("AntiAliasing", long(msaa)); +} diff --git a/src/Gui/Multisample.h b/src/Gui/Multisample.h index 2c90da75d6..359e20df5a 100644 --- a/src/Gui/Multisample.h +++ b/src/Gui/Multisample.h @@ -58,6 +58,8 @@ public: std::vector> supported() const; static int toSamples(AntiAliasing msaa); static AntiAliasing toAntiAliasing(int samples); + static AntiAliasing readMSAAFromSettings(); + static void writeMSAAToSettings(AntiAliasing msaa); private: QSurfaceFormat format; diff --git a/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp b/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp index 9fc095a637..47775784ba 100644 --- a/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp +++ b/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include "DlgSettings3DViewImp.h" @@ -97,88 +98,35 @@ void DlgSettings3DViewImp::loadSettings() loadMarkerSize(); } -namespace { -class GLFormatCheck { -public: - GLFormatCheck() { - context.setFormat(format); - context.create(); - offscreen.setFormat(format); - offscreen.create(); - context.makeCurrent(&offscreen); - } - - bool testSamples(int num) { - QOpenGLFramebufferObjectFormat fboFormat; - fboFormat.setAttachment(QOpenGLFramebufferObject::Depth); - fboFormat.setSamples(num); - QOpenGLFramebufferObject fbo(100, 100, fboFormat); // NOLINT - return fbo.format().samples() == num; - } - -private: - QSurfaceFormat format; - QOpenGLContext context; - QOffscreenSurface offscreen; -}; -} - void DlgSettings3DViewImp::addAntiAliasing() { - QString none = QCoreApplication::translate("Gui::Dialog::DlgSettings3DView", "None"); - QString line = QCoreApplication::translate("Gui::Dialog::DlgSettings3DView", "Line Smoothing"); - QString msaa2x = QCoreApplication::translate("Gui::Dialog::DlgSettings3DView", "MSAA 2x"); - QString msaa4x = QCoreApplication::translate("Gui::Dialog::DlgSettings3DView", "MSAA 4x"); - QString msaa6x = QCoreApplication::translate("Gui::Dialog::DlgSettings3DView", "MSAA 6x"); - QString msaa8x = QCoreApplication::translate("Gui::Dialog::DlgSettings3DView", "MSAA 8x"); ui->comboAliasing->clear(); - ui->comboAliasing->addItem(none, int(Gui::View3DInventorViewer::None)); - ui->comboAliasing->addItem(line, int(Gui::View3DInventorViewer::Smoothing)); // Do the samples checks only once - static std::vector> modes; + static std::vector> modes; static bool formatCheck = true; if (formatCheck) { formatCheck = false; - GLFormatCheck check; - // NOLINTBEGIN - if (check.testSamples(2)) { - modes.emplace_back(msaa2x, int(Gui::View3DInventorViewer::MSAA2x)); - } - if (check.testSamples(4)) { - modes.emplace_back(msaa4x, int(Gui::View3DInventorViewer::MSAA4x)); - } - if (check.testSamples(6)) { - modes.emplace_back(msaa6x, int(Gui::View3DInventorViewer::MSAA6x)); - } - if (check.testSamples(8)) { - modes.emplace_back(msaa8x, int(Gui::View3DInventorViewer::MSAA8x)); - } - // NOLINTEND + Multisample check; + modes = check.supported(); } for (const auto& it : modes) { - ui->comboAliasing->addItem(it.first, it.second); + ui->comboAliasing->addItem(it.first, int(it.second)); } } void DlgSettings3DViewImp::saveAntiAliasing() { - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath - ("User parameter:BaseApp/Preferences/View"); - int index = ui->comboAliasing->currentIndex(); int aliasing = ui->comboAliasing->itemData(index).toInt(); - hGrp->SetInt("AntiAliasing", aliasing); + Multisample::writeMSAAToSettings(static_cast(aliasing)); } void DlgSettings3DViewImp::loadAntiAliasing() { - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath - ("User parameter:BaseApp/Preferences/View"); - - int aliasing = int(hGrp->GetInt("AntiAliasing", int(Gui::View3DInventorViewer::None))); + int aliasing = int(Multisample::readMSAAFromSettings()); int index = ui->comboAliasing->findData(aliasing); if (index != -1) { ui->comboAliasing->setCurrentIndex(index); diff --git a/src/Gui/View3DInventorViewer.cpp b/src/Gui/View3DInventorViewer.cpp index d7020b280a..d168c25f55 100644 --- a/src/Gui/View3DInventorViewer.cpp +++ b/src/Gui/View3DInventorViewer.cpp @@ -95,6 +95,7 @@ #include "Document.h" #include "GLPainter.h" #include "MainWindow.h" +#include "Multisample.h" #include "NaviCube.h" #include "NavigationStyle.h" #include "Selection.h" @@ -1965,25 +1966,8 @@ void View3DInventorViewer::clearGraphicsItems() int View3DInventorViewer::getNumSamples() { - long samples = App::GetApplication().GetParameterGroupByPath - ("User parameter:BaseApp/Preferences/View")->GetInt("AntiAliasing", 0); - - // NOLINTBEGIN - switch (samples) { - case View3DInventorViewer::MSAA2x: - return 2; - case View3DInventorViewer::MSAA4x: - return 4; - case View3DInventorViewer::MSAA6x: - return 6; - case View3DInventorViewer::MSAA8x: - return 8; - case View3DInventorViewer::Smoothing: - return 1; - default: - return 0; - } - // NOLINTEND + Gui::AntiAliasing msaa = Multisample::readMSAAFromSettings(); + return Multisample::toSamples(msaa); } GLenum View3DInventorViewer::getInternalTextureFormat() diff --git a/src/Gui/View3DInventorViewer.h b/src/Gui/View3DInventorViewer.h index 5d0e2597ab..3e581c73f3 100644 --- a/src/Gui/View3DInventorViewer.h +++ b/src/Gui/View3DInventorViewer.h @@ -110,22 +110,6 @@ public: }; //@} - /** @name Anti-Aliasing modes of the rendered 3D scene - * Specifies Anti-Aliasing (AA) method - * - Smoothing enables OpenGL line and vertex smoothing (basically deprecated) - * - MSAA is hardware multi sampling (with 2, 4 or 8 passes), a quite common and efficient AA technique - */ - //@{ - enum AntiAliasing { - None = 0, - Smoothing = 1, - MSAA2x = 2, - MSAA4x = 3, - MSAA6x = 5, - MSAA8x = 4 - }; - //@} - /** @name Render mode */ //@{