summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2021-11-22 10:53:30 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-11-24 08:08:58 +0000
commit42ac31a95506781cb765aedc4aa203e1893ae20c (patch)
tree61a5c73392631de2b2725fe76f5649440692c6a1
parent3728ce12d195f9e07f99dcca50937da60c2c4905 (diff)
RHI: Fix content not updated when using OnDemand and switching textures
When changing a Parameter whose value is a texture, it takes Qt3D potentially two frames to process the scene fully before it is able to draw the updated content. This patch makes it so that if we know we have the flags ParametersDirty for frame N, we request to reprocess the scene once more on frame N+1. Change-Id: I9df868ce2aac857bad1a1cb1074038b9c5bcd907 Reviewed-by: Sean Harmer <sean.harmer@kdab.com> (cherry picked from commit 9bdabc8c1412ae58080f700f42f2393c6357788a) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/renderers/rhi/renderer/renderer.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/plugins/renderers/rhi/renderer/renderer.cpp b/src/plugins/renderers/rhi/renderer/renderer.cpp
index 28446f2de..47839b5b2 100644
--- a/src/plugins/renderers/rhi/renderer/renderer.cpp
+++ b/src/plugins/renderers/rhi/renderer/renderer.cpp
@@ -2248,6 +2248,7 @@ std::vector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs()
// Remove previous dependencies
m_cleanupJob->removeDependency(QWeakPointer<QAspectJob>());
+ const bool dirtyParametersForCurrentFrame = m_dirtyBits.marked & AbstractRenderer::ParameterDirty;
const BackendNodeDirtySet dirtyBitsForFrame = m_dirtyBits.marked | m_dirtyBits.remaining;
m_dirtyBits.marked = {};
m_dirtyBits.remaining = {};
@@ -2376,6 +2377,10 @@ std::vector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs()
m_dirtyBits.remaining = dirtyBitsForFrame & notCleared;
+ // Dirty Parameters might need 2 frames to react if the parameter references a texture
+ if (dirtyParametersForCurrentFrame)
+ m_dirtyBits.remaining |= AbstractRenderer::ParameterDirty;
+
return renderBinJobs;
}