From b02100a5837ab6a5c9ac1e76e53ddf2deb54bf33 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 14 Mar 2024 10:10:53 +0100 Subject: [PATCH 1/2] Gui: refactor DlgSettings3DViewImp and fix some linter warnings --- .../PreferencePages/DlgSettings3DViewImp.cpp | 106 ++++++++++++------ .../PreferencePages/DlgSettings3DViewImp.h | 11 +- 2 files changed, 80 insertions(+), 37 deletions(-) diff --git a/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp b/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp index 49f175bb2a..ea0ad8abce 100644 --- a/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp +++ b/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp @@ -40,12 +40,6 @@ using namespace Gui::Dialog; /* TRANSLATOR Gui::Dialog::DlgSettings3DViewImp */ -bool DlgSettings3DViewImp::showMsg = true; - -/** - * Constructs a DlgSettings3DViewImp which is a child of 'parent', with the - * name 'name' and widget flags set to 'f' - */ DlgSettings3DViewImp::DlgSettings3DViewImp(QWidget* parent) : PreferencePage( parent ) , ui(new Ui_DlgSettings3DView) @@ -53,29 +47,15 @@ DlgSettings3DViewImp::DlgSettings3DViewImp(QWidget* parent) ui->setupUi(this); } -/** - * Destroys the object and frees any allocated resources - */ DlgSettings3DViewImp::~DlgSettings3DViewImp() = default; void DlgSettings3DViewImp::saveSettings() { - // must be done as very first because we create a new instance of NavigatorStyle - // where we set some attributes afterwards - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath - ("User parameter:BaseApp/Preferences/View"); - - int index = ui->comboAliasing->currentIndex(); - hGrp->SetInt("AntiAliasing", index); - - index = ui->renderCache->currentIndex(); - hGrp->SetInt("RenderCache", index); + saveAntiAliasing(); + saveRenderCache(); + saveMarkerSize(); ui->comboTransparentRender->onSave(); - - QVariant const &vBoxMarkerSize = ui->boxMarkerSize->itemData(ui->boxMarkerSize->currentIndex()); - hGrp->SetInt("MarkerSize", vBoxMarkerSize.toInt()); - ui->CheckBox_CornerCoordSystem->onSave(); ui->SpinBox_CornerCoordSystemSize->onSave(); ui->CheckBox_ShowAxisCross->onSave(); @@ -106,23 +86,70 @@ void DlgSettings3DViewImp::loadSettings() ui->sliderIntensity->onRestore(); ui->radioPerspective->onRestore(); ui->radioOrthographic->onRestore(); + ui->comboTransparentRender->onRestore(); + loadAntiAliasing(); + loadRenderCache(); + loadMarkerSize(); +} + +void DlgSettings3DViewImp::saveAntiAliasing() +{ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath ("User parameter:BaseApp/Preferences/View"); - int index = hGrp->GetInt("AntiAliasing", int(Gui::View3DInventorViewer::None)); - index = Base::clamp(index, 0, ui->comboAliasing->count()-1); - ui->comboAliasing->setCurrentIndex(index); + int aliasing = ui->comboAliasing->currentIndex(); + hGrp->SetInt("AntiAliasing", 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))); + aliasing = Base::clamp(aliasing, 0, ui->comboAliasing->count()-1); + ui->comboAliasing->setCurrentIndex(aliasing); + // connect after setting current item of the combo box connect(ui->comboAliasing, qOverload(&QComboBox::currentIndexChanged), this, &DlgSettings3DViewImp::onAliasingChanged); +} - index = hGrp->GetInt("RenderCache", 0); - ui->renderCache->setCurrentIndex(index); +void DlgSettings3DViewImp::saveRenderCache() +{ + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath + ("User parameter:BaseApp/Preferences/View"); - ui->comboTransparentRender->onRestore(); + int cache = ui->renderCache->currentIndex(); + hGrp->SetInt("RenderCache", cache); +} - int const current = hGrp->GetInt("MarkerSize", 9L); +void DlgSettings3DViewImp::loadRenderCache() +{ + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath + ("User parameter:BaseApp/Preferences/View"); + + long cache = hGrp->GetInt("RenderCache", 0); + ui->renderCache->setCurrentIndex(int(cache)); +} + +void DlgSettings3DViewImp::saveMarkerSize() +{ + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath + ("User parameter:BaseApp/Preferences/View"); + + QVariant const &vBoxMarkerSize = ui->boxMarkerSize->itemData(ui->boxMarkerSize->currentIndex()); + hGrp->SetInt("MarkerSize", vBoxMarkerSize.toInt()); +} + +void DlgSettings3DViewImp::loadMarkerSize() +{ + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath + ("User parameter:BaseApp/Preferences/View"); + + // NOLINTBEGIN + int marker = hGrp->GetInt("MarkerSize", 9L); ui->boxMarkerSize->addItem(tr("5px"), QVariant(5)); ui->boxMarkerSize->addItem(tr("7px"), QVariant(7)); ui->boxMarkerSize->addItem(tr("9px"), QVariant(9)); @@ -132,9 +159,12 @@ void DlgSettings3DViewImp::loadSettings() ui->boxMarkerSize->addItem(tr("20px"), QVariant(20)); ui->boxMarkerSize->addItem(tr("25px"), QVariant(25)); ui->boxMarkerSize->addItem(tr("30px"), QVariant(30)); - index = ui->boxMarkerSize->findData(QVariant(current)); - if (index < 0) index = 2; - ui->boxMarkerSize->setCurrentIndex(index); + marker = ui->boxMarkerSize->findData(QVariant(marker)); + if (marker < 0) { + marker = 2; + } + ui->boxMarkerSize->setCurrentIndex(marker); + // NOLINTEND } void DlgSettings3DViewImp::resetSettingsToDefaults() @@ -165,20 +195,24 @@ void DlgSettings3DViewImp::changeEvent(QEvent *e) ui->comboAliasing->blockSignals(false); } else { - QWidget::changeEvent(e); + PreferencePage::changeEvent(e); } } void DlgSettings3DViewImp::onAliasingChanged(int index) { - if (index < 0 || !isVisible()) + if (index < 0 || !isVisible()) { return; + } + // Show this message only once per application session to reduce // annoyance when showing it too often. + static bool showMsg = true; if (showMsg) { showMsg = false; QMessageBox::information(this, tr("Anti-aliasing"), - tr("Open a new viewer or restart %1 to apply anti-aliasing changes.").arg(qApp->applicationName())); + tr("Open a new viewer or restart %1 to apply anti-aliasing changes.") + .arg(qApp->applicationName())); } } diff --git a/src/Gui/PreferencePages/DlgSettings3DViewImp.h b/src/Gui/PreferencePages/DlgSettings3DViewImp.h index 86af22838a..fccecdc39f 100644 --- a/src/Gui/PreferencePages/DlgSettings3DViewImp.h +++ b/src/Gui/PreferencePages/DlgSettings3DViewImp.h @@ -56,9 +56,18 @@ private Q_SLOTS: protected: void changeEvent(QEvent *e) override; +private: + void saveAntiAliasing(); + void loadAntiAliasing(); + void saveRenderCache(); + void loadRenderCache(); + void saveMarkerSize(); + void loadMarkerSize(); + private: std::unique_ptr ui; - static bool showMsg; + + Q_DISABLE_COPY_MOVE(DlgSettings3DViewImp) }; } // namespace Dialog From b9f5d29a4fa333b5f8a4fbc38f0ca89dfffffb09 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 14 Mar 2024 11:41:33 +0100 Subject: [PATCH 2/2] Gui: fixes #5609: Add MSAA 6x option --- src/Gui/PreferencePages/DlgSettings3DView.ui | 25 ------ .../PreferencePages/DlgSettings3DViewImp.cpp | 80 ++++++++++++++++++- .../PreferencePages/DlgSettings3DViewImp.h | 1 + src/Gui/View3DInventorViewer.cpp | 2 + src/Gui/View3DInventorViewer.h | 11 +-- 5 files changed, 86 insertions(+), 33 deletions(-) diff --git a/src/Gui/PreferencePages/DlgSettings3DView.ui b/src/Gui/PreferencePages/DlgSettings3DView.ui index 3a85779209..0854dd66a5 100644 --- a/src/Gui/PreferencePages/DlgSettings3DView.ui +++ b/src/Gui/PreferencePages/DlgSettings3DView.ui @@ -281,31 +281,6 @@ but slower response to any scene changes. View - - - None - - - - - Line Smoothing - - - - - MSAA 2x - - - - - MSAA 4x - - - - - MSAA 8x - - diff --git a/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp b/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp index ea0ad8abce..9fc095a637 100644 --- a/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp +++ b/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp @@ -25,6 +25,9 @@ #ifndef _PreComp_ # include # include +# include +# include +# include #endif #include @@ -45,6 +48,7 @@ DlgSettings3DViewImp::DlgSettings3DViewImp(QWidget* parent) , ui(new Ui_DlgSettings3DView) { ui->setupUi(this); + addAntiAliasing(); } DlgSettings3DViewImp::~DlgSettings3DViewImp() = default; @@ -93,12 +97,79 @@ 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 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 + } + + for (const auto& it : modes) { + ui->comboAliasing->addItem(it.first, it.second); + } +} + void DlgSettings3DViewImp::saveAntiAliasing() { ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath ("User parameter:BaseApp/Preferences/View"); - int aliasing = ui->comboAliasing->currentIndex(); + int index = ui->comboAliasing->currentIndex(); + int aliasing = ui->comboAliasing->itemData(index).toInt(); hGrp->SetInt("AntiAliasing", aliasing); } @@ -108,8 +179,10 @@ void DlgSettings3DViewImp::loadAntiAliasing() ("User parameter:BaseApp/Preferences/View"); int aliasing = int(hGrp->GetInt("AntiAliasing", int(Gui::View3DInventorViewer::None))); - aliasing = Base::clamp(aliasing, 0, ui->comboAliasing->count()-1); - ui->comboAliasing->setCurrentIndex(aliasing); + int index = ui->comboAliasing->findData(aliasing); + if (index != -1) { + ui->comboAliasing->setCurrentIndex(index); + } // connect after setting current item of the combo box connect(ui->comboAliasing, qOverload(&QComboBox::currentIndexChanged), @@ -191,6 +264,7 @@ void DlgSettings3DViewImp::changeEvent(QEvent *e) ui->comboAliasing->blockSignals(true); int aliasing = ui->comboAliasing->currentIndex(); ui->retranslateUi(this); + addAntiAliasing(); ui->comboAliasing->setCurrentIndex(aliasing); ui->comboAliasing->blockSignals(false); } diff --git a/src/Gui/PreferencePages/DlgSettings3DViewImp.h b/src/Gui/PreferencePages/DlgSettings3DViewImp.h index fccecdc39f..5d047f1152 100644 --- a/src/Gui/PreferencePages/DlgSettings3DViewImp.h +++ b/src/Gui/PreferencePages/DlgSettings3DViewImp.h @@ -57,6 +57,7 @@ protected: void changeEvent(QEvent *e) override; private: + void addAntiAliasing(); void saveAntiAliasing(); void loadAntiAliasing(); void saveRenderCache(); diff --git a/src/Gui/View3DInventorViewer.cpp b/src/Gui/View3DInventorViewer.cpp index 62322b8683..671e6ee5b7 100644 --- a/src/Gui/View3DInventorViewer.cpp +++ b/src/Gui/View3DInventorViewer.cpp @@ -1963,6 +1963,8 @@ int View3DInventorViewer::getNumSamples() return 2; case View3DInventorViewer::MSAA4x: return 4; + case View3DInventorViewer::MSAA6x: + return 6; case View3DInventorViewer::MSAA8x: return 8; case View3DInventorViewer::Smoothing: diff --git a/src/Gui/View3DInventorViewer.h b/src/Gui/View3DInventorViewer.h index 221ad4ba95..eca7f186b0 100644 --- a/src/Gui/View3DInventorViewer.h +++ b/src/Gui/View3DInventorViewer.h @@ -117,11 +117,12 @@ public: */ //@{ enum AntiAliasing { - None, - Smoothing, - MSAA2x, - MSAA4x, - MSAA8x + None = 0, + Smoothing = 1, + MSAA2x = 2, + MSAA4x = 3, + MSAA6x = 5, + MSAA8x = 4 }; //@}