diff options
author | Jere Tuliniemi <jere.tuliniemi@qt.io> | 2019-11-26 14:05:07 +0200 |
---|---|---|
committer | Jere Tuliniemi <jere.tuliniemi@qt.io> | 2019-11-27 11:04:50 +0200 |
commit | 56fe2b26558a34133df70b54d278b8e6eadff2bb (patch) | |
tree | 11702016047fb9753d0cc316cd6f5d6ba3717734 | |
parent | 05eb3a91eefb458a165abf60379f8dc91ae115b6 (diff) |
Check Force Transparent after checking for alpha test
No need to do alpha testing for objects with Force Transparent enabled.
Also fixes a depth ordering bug for Force Transparent objects that still
affects alpha tested objects.
Force Opaque is still checked before so that alpha testing is disabled
if opaqueness is forced.
Task-number: QT3DS-4009
Change-Id: I502d368212c8c34a4f91e1a80372b3597524de1b
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/Qt3DSRendererImplLayerRenderPreparationData.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp index 34c2173..57365c5 100644 --- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp +++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp @@ -784,13 +784,8 @@ namespace render { renderableFlags |= RenderPreparationResultFlagValues::CompletelyTransparent; } - if (IsNotOne(subsetOpacity) || theMaterial->m_TransparencyMode - == DefaultMaterialTransparencyMode::ForceTransparent) { - renderableFlags |= RenderPreparationResultFlagValues::HasTransparency; - } else if (theMaterial->m_TransparencyMode - == DefaultMaterialTransparencyMode::ForceOpaque) { + if (theMaterial->m_TransparencyMode == DefaultMaterialTransparencyMode::ForceOpaque) renderableFlags.clearOrSet(false, RenderPreparationResultFlagValues::HasTransparency); - } // Enable alpha test, but only if the whole object opacity is full // so parts of the object might be fully opaque @@ -803,6 +798,11 @@ namespace render { renderableFlags.setAlphaTest(false); } + if (IsNotOne(subsetOpacity) || theMaterial->m_TransparencyMode + == DefaultMaterialTransparencyMode::ForceTransparent) { + renderableFlags |= RenderPreparationResultFlagValues::HasTransparency; + } + retval.m_FirstImage = firstImage; if (retval.m_RenderableFlags.IsDirty()) retval.m_Dirty = true; |