diff options
author | Janne Kangas <janne.kangas@qt.io> | 2019-12-02 12:45:45 +0200 |
---|---|---|
committer | Janne Kangas <janne.kangas@qt.io> | 2019-12-13 08:16:49 +0200 |
commit | c059fc4fac16afafa5aea5225d7f1051f35ce214 (patch) | |
tree | 81efdc89ba2c08f4684ed86d532f6fc1dd27ae0c | |
parent | b721932a97fff0c5e106e7642bb23b393e107f62 (diff) |
Add project setting for automatically flipping compressed textures
Add checkbox in project settings dialog for setting flipCompressedTextures.
Reload images for the current project if settings are changed.
Task-id: QT3DS-4015
Change-Id: I6f69ce1a71c3c7f74804af9cf865fe10e99337f2
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Kaj Grönholm <kaj.gronholm@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
9 files changed, 60 insertions, 5 deletions
diff --git a/src/Authoring/Client/Code/Core/Doc/DocumentBufferCache.cpp b/src/Authoring/Client/Code/Core/Doc/DocumentBufferCache.cpp index a22a1376..82f8428e 100644 --- a/src/Authoring/Client/Code/Core/Doc/DocumentBufferCache.cpp +++ b/src/Authoring/Client/Code/Core/Doc/DocumentBufferCache.cpp @@ -135,15 +135,22 @@ struct SDocBufferCache : public IDocumentBufferCache } } - void reloadImageSet(const QSet<QString> &imageSet) override + void reloadImageSet(const QSet<QString> &imageSet, bool flipCompressedTextures) override { auto bufMan = GetBufferManager(); if (bufMan) { bufMan->unloadSet(imageSet); - bufMan->loadSet(imageSet); + bufMan->loadSet(imageSet, flipCompressedTextures); } } + void reloadAll(bool flipCompressedTextures) override + { + auto bufMan = GetBufferManager(); + if (bufMan) + bufMan->reloadAll(flipCompressedTextures); + } + // Names are declared in the same order as the primitives // offset by the empty primitive const wchar_t **GetPrimitiveNames() override diff --git a/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp b/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp index ff08612e..0d5a3d3d 100644 --- a/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp +++ b/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp @@ -5448,8 +5448,11 @@ public: } - if (!imageLoadSet.isEmpty()) - m_Doc.GetBufferCache().reloadImageSet(imageLoadSet); + if (!imageLoadSet.isEmpty()) { + m_Doc.GetBufferCache().reloadImageSet( + imageLoadSet, + m_Doc.GetCore()->GetStudioProjectSettings()->getFlipCompressedTextures()); + } g_StudioApp.getRenderer().ReleaseContext(); diff --git a/src/Authoring/Client/Code/Core/Doc/IDocumentBufferCache.h b/src/Authoring/Client/Code/Core/Doc/IDocumentBufferCache.h index 54e320e9..13616aee 100644 --- a/src/Authoring/Client/Code/Core/Doc/IDocumentBufferCache.h +++ b/src/Authoring/Client/Code/Core/Doc/IDocumentBufferCache.h @@ -96,7 +96,9 @@ public: // Takes a *relative* path from the document virtual void InvalidateBuffer(const CFilePath &inSourcePath) = 0; - virtual void reloadImageSet(const QSet<QString> &imageSet) = 0; + virtual void reloadImageSet(const QSet<QString> &imageSet, bool flipCompressedTextures) = 0; + + virtual void reloadAll(bool flipCompressedTextures) = 0; // Don't send events but just clear everything out. Used on document::close virtual void Clear() = 0; diff --git a/src/Authoring/Client/Code/Core/Doc/StudioProjectSettings.cpp b/src/Authoring/Client/Code/Core/Doc/StudioProjectSettings.cpp index be88d448..3a2f625e 100644 --- a/src/Authoring/Client/Code/Core/Doc/StudioProjectSettings.cpp +++ b/src/Authoring/Client/Code/Core/Doc/StudioProjectSettings.cpp @@ -72,6 +72,7 @@ void CStudioProjectSettings::reset() m_maintainAspect = false; m_rotatePresentation = false; m_preferCompressedTextures = false; + m_flipCompressedTextures = false; } //============================================================================== @@ -146,3 +147,11 @@ void CStudioProjectSettings::setPreferCompressedTextures(bool inFlag) m_core->GetDoc()->SetModifiedFlag(); } } + +void CStudioProjectSettings::setFlipCompressedTextures(bool inFlag) +{ + if (m_flipCompressedTextures != inFlag) { + m_flipCompressedTextures = inFlag; + m_core->GetDoc()->SetModifiedFlag(); + } +} diff --git a/src/Authoring/Client/Code/Core/Doc/StudioProjectSettings.h b/src/Authoring/Client/Code/Core/Doc/StudioProjectSettings.h index 4fe476a9..2f86eac0 100644 --- a/src/Authoring/Client/Code/Core/Doc/StudioProjectSettings.h +++ b/src/Authoring/Client/Code/Core/Doc/StudioProjectSettings.h @@ -61,6 +61,9 @@ public: bool getPreferCompressedTextures() const { return m_preferCompressedTextures; } void setPreferCompressedTextures(bool inFlag); + bool getFlipCompressedTextures() const { return m_flipCompressedTextures; } + void setFlipCompressedTextures(bool inFlag); + void reset(); protected: @@ -71,6 +74,7 @@ protected: bool m_maintainAspect; bool m_rotatePresentation; bool m_preferCompressedTextures; + bool m_flipCompressedTextures; CCore *m_core; }; diff --git a/src/Authoring/Common/Code/Serialize/ProjectSettingsSerializer.h b/src/Authoring/Common/Code/Serialize/ProjectSettingsSerializer.h index acfa4712..fd8f3f17 100644 --- a/src/Authoring/Common/Code/Serialize/ProjectSettingsSerializer.h +++ b/src/Authoring/Common/Code/Serialize/ProjectSettingsSerializer.h @@ -121,6 +121,9 @@ public: bool thePreferKtx = theProjectSettings->getPreferCompressedTextures(); ar.Att("preferKtx", thePreferKtx); + bool theFlipCompressedTextures = theProjectSettings->getFlipCompressedTextures(); + ar.Att("flipCompressedTextures", theFlipCompressedTextures); + if (QColorDialog::customCount() > 0) { CustomColorSerializer ccs; ar.Serialize(L"CustomColors", ccs); @@ -161,6 +164,10 @@ public: if (ar.Att("preferKtx", thePreferKtx)) theProjectSettings->setPreferCompressedTextures(thePreferKtx); + bool theFlipCompressedTextures; + if (ar.Att("flipCompressedTextures", theFlipCompressedTextures)) + theProjectSettings->setFlipCompressedTextures(theFlipCompressedTextures); + { CustomColorSerializer ccs; ar.Serialize(L"CustomColors", ccs); diff --git a/src/Authoring/Qt3DStudio/Render/StudioRendererTranslation.cpp b/src/Authoring/Qt3DStudio/Render/StudioRendererTranslation.cpp index 73619e5f..b85e6c55 100644 --- a/src/Authoring/Qt3DStudio/Render/StudioRendererTranslation.cpp +++ b/src/Authoring/Qt3DStudio/Render/StudioRendererTranslation.cpp @@ -2299,6 +2299,8 @@ void STranslation::PreRender(bool scenePreviewPass) } } } + m_Presentation.m_preferKTX = theSettings->getPreferCompressedTextures(); + m_Presentation.m_flipCompressedTextures = theSettings->getFlipCompressedTextures(); } if (m_EditCameraEnabled == false && g_StudioApp.IsAuthorZoom()) { if (m_Presentation.m_PresentationDimensions.x > theViewportDims.x diff --git a/src/Authoring/Qt3DStudio/UI/StudioProjectSettingsPage.cpp b/src/Authoring/Qt3DStudio/UI/StudioProjectSettingsPage.cpp index d011d57c..030d1dac 100644 --- a/src/Authoring/Qt3DStudio/UI/StudioProjectSettingsPage.cpp +++ b/src/Authoring/Qt3DStudio/UI/StudioProjectSettingsPage.cpp @@ -32,6 +32,7 @@ #include "StudioProjectSettingsPage.h" #include "StudioProjectSettings.h" #include "StudioApp.h" +#include "IDocumentBufferCache.h" #include "Doc.h" #include "Views.h" #include "MainFrm.h" @@ -100,6 +101,7 @@ void CStudioProjectSettingsPage::onInitDialog() connect(m_ui->m_checkConstrainProportions, &QCheckBox::clicked, this, &CStudioProjectSettingsPage::onCheckMaintainRatio); connect(m_ui->m_checkUseKtx, &QCheckBox::clicked, [=](){ this->setModified(true); }); + connect(m_ui->m_checkFlipTex, &QCheckBox::clicked, [=](){ this->setModified(true); }); connect(m_ui->m_Author, &QLineEdit::textEdited, [=](){ this->setModified(true); }); connect(m_ui->m_Company, &QLineEdit::textEdited, [=](){ this->setModified(true); }); } @@ -130,6 +132,9 @@ void CStudioProjectSettingsPage::loadSettings() // Prefer compressed textures m_ui->m_checkUseKtx->setChecked(theProjectSettings->getPreferCompressedTextures()); + // Automatically flip compressed textures + m_ui->m_checkFlipTex->setChecked(theProjectSettings->getFlipCompressedTextures()); + // Author m_ui->m_Author->setText(theProjectSettings->getAuthor()); @@ -169,6 +174,12 @@ void CStudioProjectSettingsPage::saveSettings() // Prefer compressed textures theProjectSettings->setPreferCompressedTextures(m_ui->m_checkUseKtx->isChecked()); + + // Automatically flip compressed textures. Trigger reloading if flip status changed. + bool updatedFlipTextures = m_ui->m_checkFlipTex->isChecked(); + if (theProjectSettings->getFlipCompressedTextures() != updatedFlipTextures) + g_StudioApp.GetCore()->GetDoc()->GetBufferCache().reloadAll(updatedFlipTextures); + theProjectSettings->setFlipCompressedTextures(updatedFlipTextures); } // OnApply: Handler for the Apply button diff --git a/src/Authoring/Qt3DStudio/UI/StudioProjectSettingsPage.ui b/src/Authoring/Qt3DStudio/UI/StudioProjectSettingsPage.ui index 3ef4ccd2..e6c3d767 100644 --- a/src/Authoring/Qt3DStudio/UI/StudioProjectSettingsPage.ui +++ b/src/Authoring/Qt3DStudio/UI/StudioProjectSettingsPage.ui @@ -86,6 +86,16 @@ when ktx textures are present.</string> </property> </widget> </item> + <item row="5" column="0"> + <widget class="QCheckBox" name="m_checkFlipTex"> + <property name="toolTip"> + <string>Flip the y coordinate of compressed textures</string> + </property> + <property name="text"> + <string>Flip compressed textures</string> + </property> + </widget> + </item> </layout> </widget> </item> |