diff options
Diffstat (limited to 'src/runtimerender/graphobjects/Qt3DSRenderImage.cpp')
-rw-r--r-- | src/runtimerender/graphobjects/Qt3DSRenderImage.cpp | 18 |
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; |