summaryrefslogtreecommitdiffstats
path: root/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp')
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
index a8b44f7..fe7c1e5 100644
--- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
+++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
@@ -267,12 +267,6 @@ namespace render {
QT3DSVec3 theCameraDirection(GetCameraDirection());
QT3DSVec3 theCameraPosition = m_Camera->GetGlobalPos();
m_RenderedOpaqueObjects.assign(m_OpaqueObjects.begin(), m_OpaqueObjects.end());
- m_RenderedOpaqueObjects.insert(m_RenderedOpaqueObjects.end(), m_GroupObjects.begin(),
- m_GroupObjects.end());
-
- // Set position for group objects
- for (int i = 0; i < m_GroupObjects.size(); i++)
- static_cast<SOrderedGroupRenderable *>(m_GroupObjects[i])->update();
// Setup the object's sorting information
for (QT3DSU32 idx = 0, end = m_RenderedOpaqueObjects.size(); idx < end; ++idx) {
@@ -297,6 +291,12 @@ namespace render {
m_RenderedTransparentObjects.assign(m_TransparentObjects.begin(),
m_TransparentObjects.end());
+ m_RenderedTransparentObjects.insert(m_RenderedTransparentObjects.end(), m_GroupObjects.begin(),
+ m_GroupObjects.end());
+
+ // Set position for group objects
+ for (int i = 0; i < m_GroupObjects.size(); i++)
+ static_cast<SOrderedGroupRenderable *>(m_GroupObjects[i])->update();
if (m_Layer.m_Flags.IsLayerEnableDepthTest() == false) {
m_RenderedTransparentObjects.insert(m_RenderedTransparentObjects.end(),
@@ -1083,12 +1083,22 @@ namespace render {
theRenderableObject->m_ScopedLights = inScopedLights;
// set tessellation
theRenderableObject->m_TessellationMode = inModel.m_TessellationMode;
-
- if (group) {
+ bool transparentObject = theRenderableObject->m_RenderableFlags.HasTransparency()
+ || theRenderableObject->m_RenderableFlags.HasRefraction();
+ bool alphaTestObject = theRenderableObject->m_RenderableFlags.hasAlphaTest();
+
+ // Only put transparent object into ordered group if depth test is on
+ // Put object into both lists if it is alpha-test object
+ // object must have transparency on if it is alpha-test object
+ if (group && (!m_Layer.m_Flags.IsLayerEnableDepthTest() || transparentObject)) {
group->m_renderables.push_back(theRenderableObject);
+ if (alphaTestObject)
+ m_OpaqueObjects.push_back(theRenderableObject);
} else {
- if (theRenderableObject->m_RenderableFlags.HasTransparency()
- || theRenderableObject->m_RenderableFlags.HasRefraction()) {
+ if (transparentObject && alphaTestObject) {
+ m_TransparentObjects.push_back(theRenderableObject);
+ m_OpaqueObjects.push_back(theRenderableObject);
+ } else if (transparentObject) {
m_TransparentObjects.push_back(theRenderableObject);
} else {
m_OpaqueObjects.push_back(theRenderableObject);