diff options
author | Janne Kangas <janne.kangas@qt.io> | 2020-02-21 09:14:09 +0200 |
---|---|---|
committer | Janne Kangas <janne.kangas@qt.io> | 2020-02-26 13:48:31 +0200 |
commit | 7cb740b7dc1e7a660eaaab41cff2e4d76a9fd99f (patch) | |
tree | 966b0cdf448ff0992096f6b4f9bedd5cc00c6b50 | |
parent | 3f1cbceae33d346f939b76a18b91c45abe038051 (diff) |
Fix blending issues in ordered group
Task-id: QT3DS-4058
Change-Id: I4d13a506892f668a0fb94bfe49879675a33d16a7
Reviewed-by: Antti Määttä <antti.maatta@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r-- | src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp index e453c91..62ae506 100644 --- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp +++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp @@ -911,6 +911,7 @@ void SLayerRenderData::renderOrderedGroup( QT3DSVec2 theCameraProps = QT3DSVec2(m_Camera->m_ClipNear, m_Camera->m_ClipFar); for (int i = 0; i < group.m_renderables.size(); ++i) { SRenderableObject &object(*group.m_renderables[i]); + const bool hasTransparency = object.m_RenderableFlags.HasTransparency(); SetShaderFeature(m_CGLightingFeatureName, m_Lights.empty() == false); SScopedLightsListScope lightsScope(m_Lights, m_LightDirections, m_SourceLightDirections, @@ -932,21 +933,27 @@ void SLayerRenderData::renderOrderedGroup( if (useBlendFallback) SetupDrawFB(true); #endif - if (object.m_RenderableFlags.hasAlphaTest()) { + if (object.m_RenderableFlags.hasAlphaTest() || hasTransparency) { theRenderContext.SetBlendingEnabled(false); - theRenderContext.SetDepthWriteEnabled(opaqueDepthWrite); + theRenderContext.SetDepthWriteEnabled(opaqueDepthWrite + && object.m_RenderableFlags.hasAlphaTest()); m_Renderer.setAlphaTest(true, 1.0f, -1.0f + (1.0f / 255.0f)); inRenderFn(*this, object, theCameraProps, GetShaderFeatureSet(), indexLight, inCamera); + theRenderContext.SetDepthTestEnabled(false); theRenderContext.SetBlendingEnabled(inEnableBlending); - theRenderContext.SetDepthWriteEnabled(inEnableTransparentDepthWrite); + theRenderContext.SetDepthWriteEnabled(inEnableTransparentDepthWrite + && object.m_RenderableFlags.hasAlphaTest()); m_Renderer.setAlphaTest(true, -1.0f, 1.0f); inRenderFn(*this, object, theCameraProps, GetShaderFeatureSet(), indexLight, inCamera); m_Renderer.setAlphaTest(false, 1.0, 1.0); + inRenderFn(*this, object, theCameraProps, GetShaderFeatureSet(), indexLight, + inCamera); } else { const bool transparency = object.m_RenderableFlags.HasTransparency() && inEnableBlending; + theRenderContext.SetDepthTestEnabled(opaqueDepthTest); theRenderContext.SetBlendingEnabled(transparency); theRenderContext.SetDepthWriteEnabled((!transparency && opaqueDepthWrite) || inEnableTransparentDepthWrite); |