summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJere Tuliniemi <jere.tuliniemi@qt.io>2019-11-26 14:05:07 +0200
committerJere Tuliniemi <jere.tuliniemi@qt.io>2019-11-27 11:04:50 +0200
commit56fe2b26558a34133df70b54d278b8e6eadff2bb (patch)
tree11702016047fb9753d0cc316cd6f5d6ba3717734
parent05eb3a91eefb458a165abf60379f8dc91ae115b6 (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.cpp12
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;