summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2021-11-22 10:43:34 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-11-24 08:31:06 +0000
commitb4d6e1b6bd7cd6a9a0e87b4ea278f2e93407c15b (patch)
tree50338a44c98ff994ef55e795d99b4fb3af5468c8
parente34fd22bab044c1a9eb1bbed8206bfa9afee5a9e (diff)
OpenGL: 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: Ia635e324434f92f8423a68b72d99350d96830de6 Reviewed-by: Sean Harmer <sean.harmer@kdab.com> (cherry picked from commit 672da697b147f039effbfd352b20f3f1891f31c6) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/renderers/opengl/renderer/renderer.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/plugins/renderers/opengl/renderer/renderer.cpp b/src/plugins/renderers/opengl/renderer/renderer.cpp
index 394e08fd6..5377ab9ac 100644
--- a/src/plugins/renderers/opengl/renderer/renderer.cpp
+++ b/src/plugins/renderers/opengl/renderer/renderer.cpp
@@ -1872,6 +1872,7 @@ QVector<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 = {};
@@ -1995,6 +1996,10 @@ QVector<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;
}