diff options
author | Gunnar Sletta <gunnar.sletta@jollamobile.com> | 2014-03-26 09:05:21 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-27 19:31:50 +0100 |
commit | 02dbf5b558f6c424ff2bfb79cf9849141c8185dc (patch) | |
tree | 5faf95ff60363681e6bafecbab9f6e4848b0581c /src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp | |
parent | 079aaa9b0754db9b7b2a97cb2ea22042c6f50738 (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.cpp | 9 |
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() |