summaryrefslogtreecommitdiffstats
path: root/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtimerender/graphobjects/Qt3DSRenderImage.cpp')
-rw-r--r--src/runtimerender/graphobjects/Qt3DSRenderImage.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp b/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp
index 44e7f12..458f3bf 100644
--- a/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp
+++ b/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp
@@ -67,7 +67,8 @@ static void HandleOffscreenResult(SImage &theImage, SImageTextureData &newImage,
}
bool SImage::ClearDirty(IBufferManager &inBufferManager, IOffscreenRenderManager &inRenderManager,
- IRenderPluginManager &inPluginManager, bool forIbl, bool flipCompressed)
+ IRenderPluginManager &inPluginManager, bool preferKtx, bool forIbl,
+ bool flipCompressed)
{
bool wasDirty = m_Flags.IsDirty();
@@ -93,17 +94,22 @@ bool SImage::ClearDirty(IBufferManager &inBufferManager, IOffscreenRenderManager
}
}
+ // Do not recheck image path if we are not dirty and we already have a texture
+ if (!wasDirty)
+ newImage.m_Texture = m_TextureData.m_Texture;
+
if (newImage.m_Texture == nullptr) {
m_LastFrameOffscreenRenderer = nullptr;
if (m_ImagePath.IsValid() && !m_OffscreenRendererId.IsValid()
&& !inRenderManager.HasOffscreenRenderer(m_ImagePath)) {
// Image has sourcepath set
- if (!m_LoadedTextureData
- || m_LoadedTextureData->m_path != QString::fromUtf8(m_ImagePath.c_str())) {
+ const QString unifiedPath = IBufferManager::resolveImagePath(
+ QString::fromUtf8(m_ImagePath.c_str()), preferKtx);
+ if (!m_LoadedTextureData || m_LoadedTextureData->m_path != unifiedPath) {
if (m_LoadedTextureData)
m_LoadedTextureData->m_callbacks.removeOne(this);
forIbl = forIbl || m_MappingMode == ImageMappingModes::LightProbe;
- m_LoadedTextureData = inBufferManager.CreateReloadableImage(m_ImagePath, false,
+ m_LoadedTextureData = inBufferManager.CreateReloadableImage(unifiedPath, false,
forIbl, flipCompressed);
m_LoadedTextureData->m_callbacks.push_back(this);
}
@@ -114,8 +120,8 @@ bool SImage::ClearDirty(IBufferManager &inBufferManager, IOffscreenRenderManager
newImage.m_BSDFMipMap = m_LoadedTextureData->m_BSDFMipMap;
} else if (m_Flags.IsForceLoad()) {
QSet<QString> ls;
- ls.insert(QString(m_ImagePath));
- inBufferManager.loadSet(ls);
+ ls.insert(unifiedPath);
+ inBufferManager.loadSet(ls, flipCompressed);
newImage.m_Texture = m_LoadedTextureData->m_Texture;
newImage.m_TextureFlags = m_LoadedTextureData->m_TextureFlags;
newImage.m_BSDFMipMap = m_LoadedTextureData->m_BSDFMipMap;