diff options
author | Antti Määttä <antti.maatta@qt.io> | 2019-10-03 09:43:44 +0300 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2019-10-03 11:14:36 +0300 |
commit | 5de4fe31d209c4a12a040f717e7e6bd5cd19a4f7 (patch) | |
tree | 0037d21208d1f19bfda84ef339a04ed24fcec879 | |
parent | ecac36788cbcfd22d79ddab79f3f429c6b3bbe0a (diff) |
Fix rendering effects and caching effect texture
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 <miikka.heikkinen@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r-- | src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp | 16 |
1 files 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); |