From 5de4fe31d209c4a12a040f717e7e6bd5cd19a4f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antti=20M=C3=A4=C3=A4tt=C3=A4?= Date: Thu, 3 Oct 2019 09:43:44 +0300 Subject: Fix rendering effects and caching effect texture MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The new effect texture caching doesn't properly handle inactive effects. Add active effect handling. Task-number: QT3DS-3970 Change-Id: I819c2083a9612574a97cc3c2a280c2273bc78d1b Reviewed-by: Miikka Heikkinen Reviewed-by: Mahmoud Badri Reviewed-by: Tomi Korpipää --- .../rendererimpl/Qt3DSRendererImplLayerRenderData.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp index cb9efea..1626560 100644 --- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp +++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp @@ -1732,7 +1732,17 @@ namespace render { void SLayerRenderData::ApplyLayerPostEffects() { - if (m_Layer.m_FirstEffect == NULL) { + bool effectsActive = false; + SEffect *lastEffect = nullptr; + // Check if effects are active and get last active effect + for (SEffect *theEffect = m_Layer.m_FirstEffect; theEffect; + theEffect = theEffect->m_NextEffect) { + if (theEffect->m_Flags.IsActive()) { + effectsActive = true; + lastEffect = theEffect; + } + } + if (!effectsActive || !m_Camera) { if (m_LayerCachedTexture) { IResourceManager &theResourceManager(m_Renderer.GetQt3DSContext().GetResourceManager()); theResourceManager.Release(*m_LayerCachedTexture); @@ -1758,9 +1768,9 @@ namespace render { NVRenderTexture2D *theCurrentTexture = theLayerColorTexture; for (SEffect *theEffect = m_Layer.m_FirstEffect; theEffect; theEffect = theEffect->m_NextEffect) { - if (theEffect->m_Flags.IsActive() && m_Camera) { + if (theEffect->m_Flags.IsActive()) { NVRenderTexture2D *targetTexture = nullptr; - if (!theEffect->m_NextEffect) + if (theEffect == lastEffect) targetTexture = m_LayerCachedTexture; StartProfiling(theEffect->m_ClassName, false); -- cgit v1.2.3