summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTony Leinonen <tony.leinonen@qt.io>2020-09-10 15:24:08 +0300
committerTony Leinonen <tony.leinonen@qt.io>2020-09-14 09:39:09 +0300
commit98580d4e7374d0373e89fad0c1fd743b84b3dbbd (patch)
tree344101816272f6a76be4ae594085b272cfd1801c /src
parent9df252d08e64e63307befb284bc7b69b2dfd98e5 (diff)
Fix disable depth test and disable depth prepass
Disabling depth prepass in the editor never actually disabled the prepass. Flipping inEnableTransparentDepthWrite boolean corrects the if statement. Transparent objects were placed behind opaque objects when disable depth test was enabled in the editor. When disabling depth test objects are now drawn in a single pass with alpha test off. Task-number: QT3DS-4011 Change-Id: Ifb85520a3f9fd20d29e24c721623fd103b5b3797 Reviewed-by: Antti Määttä <antti.maatta@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp4
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp6
2 files changed, 7 insertions, 3 deletions
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
index 0f08936..ea5a12f 100644
--- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
+++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
@@ -874,7 +874,7 @@ namespace render {
return;
// Avoid running this method if possible.
- if ((inEnableTransparentDepthWrite == false
+ if ((inEnableTransparentDepthWrite
&& ((m_GroupObjects.empty() && m_OpaqueObjects.empty() && m_TransparentObjects.empty())
|| m_Layer.m_Flags.IsLayerEnableDepthPrepass() == false))
|| m_Layer.m_Flags.IsLayerEnableDepthTest() == false)
@@ -1165,7 +1165,6 @@ void SLayerRenderData::RunRenderPass(TRenderRenderableFunction inRenderFn,
{
QT3DS_PERF_SCOPED_TIMER(m_Renderer.GetQt3DSContext().GetPerfTimer(),
"LayerRenderData: Render transparent pass1")
-
NVDataRef<SRenderableObject *> theTransparentObjects = GetTransparentRenderableObjects();
// Also draw opaque parts of transparent objects
m_Renderer.setAlphaTest(true, 1.0f, -1.0f + (1.0f / 255.0f));
@@ -1189,6 +1188,7 @@ void SLayerRenderData::RunRenderPass(TRenderRenderableFunction inRenderFn,
renderTransparentObjectsPass(inRenderFn, inEnableBlending, inEnableDepthWrite,
inEnableTransparentDepthWrite, indexLight, inCamera, theFB);
}
+
{
QT3DS_PERF_SCOPED_TIMER(m_Renderer.GetQt3DSContext().GetPerfTimer(),
"LayerRenderData: Render transparent pass3")
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
index dc1185c..26d2c71 100644
--- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
+++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
@@ -298,7 +298,7 @@ namespace render {
m_RenderedTransparentObjects.assign(m_TransparentObjects.begin(),
m_TransparentObjects.end());
- if (!m_Layer.m_Flags.IsLayerEnableDepthTest()) {
+ if (m_Layer.m_Flags.IsLayerEnableDepthTest() == false) {
m_RenderedTransparentObjects.insert(m_RenderedTransparentObjects.end(),
m_OpaqueObjects.begin(), m_OpaqueObjects.end());
m_RenderedTransparentObjects.insert(m_RenderedTransparentObjects.end(),
@@ -314,7 +314,11 @@ namespace render {
SRenderableObject &theInfo = *m_RenderedTransparentObjects[idx];
QT3DSVec3 difference = theInfo.m_WorldCenterPoint - theCameraPosition;
theInfo.m_CameraDistanceSq = difference.dot(theCameraDirection);
+
+ if (m_Layer.m_Flags.IsLayerEnableDepthTest() == false)
+ theInfo.m_RenderableFlags.setAlphaTest(0);
}
+
ForwardingAllocator alloc(m_Renderer.GetPerFrameAllocator(), "SortAllocations");
// render furthest to nearest.
eastl::merge_sort(m_RenderedTransparentObjects.begin(),