summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJanne Kangas <janne.kangas@qt.io>2020-02-21 09:14:09 +0200
committerJanne Kangas <janne.kangas@qt.io>2020-02-26 13:48:31 +0200
commit7cb740b7dc1e7a660eaaab41cff2e4d76a9fd99f (patch)
tree966b0cdf448ff0992096f6b4f9bedd5cc00c6b50
parent3f1cbceae33d346f939b76a18b91c45abe038051 (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.cpp13
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);