summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJanne Kangas <janne.kangas@qt.io>2019-12-02 12:45:45 +0200
committerJanne Kangas <janne.kangas@qt.io>2019-12-13 08:16:49 +0200
commitc059fc4fac16afafa5aea5225d7f1051f35ce214 (patch)
tree81efdc89ba2c08f4684ed86d532f6fc1dd27ae0c
parentb721932a97fff0c5e106e7642bb23b393e107f62 (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>
-rw-r--r--src/Authoring/Client/Code/Core/Doc/DocumentBufferCache.cpp11
-rw-r--r--src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp7
-rw-r--r--src/Authoring/Client/Code/Core/Doc/IDocumentBufferCache.h4
-rw-r--r--src/Authoring/Client/Code/Core/Doc/StudioProjectSettings.cpp9
-rw-r--r--src/Authoring/Client/Code/Core/Doc/StudioProjectSettings.h4
-rw-r--r--src/Authoring/Common/Code/Serialize/ProjectSettingsSerializer.h7
-rw-r--r--src/Authoring/Qt3DStudio/Render/StudioRendererTranslation.cpp2
-rw-r--r--src/Authoring/Qt3DStudio/UI/StudioProjectSettingsPage.cpp11
-rw-r--r--src/Authoring/Qt3DStudio/UI/StudioProjectSettingsPage.ui10
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>