summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2019-10-03 09:43:44 +0300
committerAntti Määttä <antti.maatta@qt.io>2019-10-03 11:14:36 +0300
commit5de4fe31d209c4a12a040f717e7e6bd5cd19a4f7 (patch)
tree0037d21208d1f19bfda84ef339a04ed24fcec879
parentecac36788cbcfd22d79ddab79f3f429c6b3bbe0a (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.cpp16
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);