diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2021-11-22 10:53:30 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2021-11-24 07:26:42 +0100 |
commit | 9bdabc8c1412ae58080f700f42f2393c6357788a (patch) | |
tree | 242db8bc54a1f1fdc0dbd2d744d78e9f4f7c2df0 | |
parent | 672da697b147f039effbfd352b20f3f1891f31c6 (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
Pick-to: 6.2
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/plugins/renderers/rhi/renderer/renderer.cpp | 5 |
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; } |