aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@jollamobile.com>2014-03-26 09:05:21 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-27 19:31:50 +0100
commit02dbf5b558f6c424ff2bfb79cf9849141c8185dc (patch)
tree5faf95ff60363681e6bafecbab9f6e4848b0581c /src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
parent079aaa9b0754db9b7b2a97cb2ea22042c6f50738 (diff)
Skip nodes with no vertices when preparing batches.
Nodes with no veritces end up overlapping with everything so they tend to lead to poor batching. In my specific case, the empty nodes came from the QQuickTextNode, but it is a valid usecase so better to handle it gracefully in the renderer. Change-Id: Ic09c202a2675f806f2124cd436027afcd2654452 Reviewed-by: Michael Brasser <michael.brasser@live.com>
Diffstat (limited to 'src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp')
-rw-r--r--src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
index 1f692c29d4..04f2bc891b 100644
--- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
+++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
@@ -1459,7 +1459,7 @@ void Renderer::prepareOpaqueBatches()
{
for (int i=m_opaqueRenderList.size() - 1; i >= 0; --i) {
Element *ei = m_opaqueRenderList.at(i);
- if (!ei || ei->batch)
+ if (!ei || ei->batch || ei->node->geometry()->vertexCount() == 0)
continue;
Batch *batch = newBatch();
batch->first = ei;
@@ -1481,7 +1481,7 @@ void Renderer::prepareOpaqueBatches()
continue;
if (ej->root != ei->root)
break;
- if (ej->batch)
+ if (ej->batch || ej->node->geometry()->vertexCount() == 0)
continue;
QSGGeometryNode *gnj = ej->node;
@@ -1552,6 +1552,9 @@ void Renderer::prepareAlphaBatches()
continue;
}
+ if (ei->node->geometry()->vertexCount() == 0)
+ continue;
+
Batch *batch = newBatch();
batch->first = ei;
batch->root = ei->root;
@@ -1578,6 +1581,8 @@ void Renderer::prepareAlphaBatches()
continue;
QSGGeometryNode *gnj = ej->node;
+ if (gnj->geometry()->vertexCount() == 0)
+ continue;
if (gni->clipList() == gnj->clipList()
&& gni->geometry()->drawingMode() == gnj->geometry()->drawingMode()