diff options
author | Tony Leinonen <tony.leinonen@qt.io> | 2020-09-10 15:24:08 +0300 |
---|---|---|
committer | Tony Leinonen <tony.leinonen@qt.io> | 2020-09-14 09:39:09 +0300 |
commit | 98580d4e7374d0373e89fad0c1fd743b84b3dbbd (patch) | |
tree | 344101816272f6a76be4ae594085b272cfd1801c /src | |
parent | 9df252d08e64e63307befb284bc7b69b2dfd98e5 (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.cpp | 4 | ||||
-rw-r--r-- | src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp | 6 |
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(), |