aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2014-05-09 16:25:58 +0200
committerGunnar Sletta <gunnar.sletta@jollamobile.com>2014-05-10 11:53:47 +0200
commit66646dd8c37adb488a79ab274b2396a649674e6d (patch)
treeb0f5ac752a52cec3de1d47692e09295197622dcd /src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
parentda15ea0f3b5805db657f13060c21efa78f10cde2 (diff)
parentd82a17b929dd88fe76258b0f801beaa1b2ee343e (diff)
Merge remote-tracking branch 'origin/stable' into dev
Conflicts: .qmake.conf src/plugins/accessible/quick/quick.pro src/quick/items/qquickpincharea.cpp src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp src/quick/scenegraph/qsgthreadedrenderloop.cpp Manually adjusted for TestHTTPServer constructor change: tests/auto/quick/qquickimage/tst_qquickimage.cpp Change-Id: I5e58a7c08ea92d6fc5e3bce98571c54f7b2ce08f
Diffstat (limited to 'src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp')
-rw-r--r--src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
index f525c83009..c9115f35fc 100644
--- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
+++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
@@ -758,6 +758,8 @@ Renderer::Renderer(QSGRenderContext *ctx)
, m_tmpOpaqueElements(16)
, m_rebuild(FullRebuild)
, m_zRange(0)
+ , m_renderOrderRebuildLower(-1)
+ , m_renderOrderRebuildUpper(-1)
, m_currentMaterial(0)
, m_currentShader(0)
, m_currentClip(0)
@@ -1422,8 +1424,11 @@ void Renderer::invalidateBatchAndOverlappingRenderOrders(Batch *batch)
Q_ASSERT(batch);
Q_ASSERT(batch->first);
- int first = batch->first->order;
- int last = batch->lastOrderInBatch;
+ if (m_renderOrderRebuildLower < 0 || batch->first->order < m_renderOrderRebuildLower)
+ m_renderOrderRebuildLower = batch->first->order;
+ if (m_renderOrderRebuildUpper < 0 || batch->lastOrderInBatch > m_renderOrderRebuildUpper)
+ m_renderOrderRebuildUpper = batch->lastOrderInBatch;
+
batch->invalidate();
for (int i=0; i<m_alphaBatches.size(); ++i) {
@@ -1431,7 +1436,7 @@ void Renderer::invalidateBatchAndOverlappingRenderOrders(Batch *batch)
if (b->first) {
int bf = b->first->order;
int bl = b->lastOrderInBatch;
- if (bl > first && bf < last)
+ if (bl > m_renderOrderRebuildLower && bf < m_renderOrderRebuildUpper)
b->invalidate();
}
}
@@ -1444,7 +1449,7 @@ void Renderer::invalidateBatchAndOverlappingRenderOrders(Batch *batch)
*/
void Renderer::cleanupBatches(QDataBuffer<Batch *> *batches) {
if (batches->size()) {
- std::sort(&batches->first(), &batches->last() + 1, qsg_sort_batch_is_valid);
+ std::stable_sort(&batches->first(), &batches->last() + 1, qsg_sort_batch_is_valid);
int count = 0;
while (count < batches->size() && batches->at(count)->first)
++count;
@@ -2190,7 +2195,7 @@ void Renderer::renderUnmergedBatch(const Batch *batch)
if (g->drawingMode() == GL_LINE_STRIP || g->drawingMode() == GL_LINE_LOOP || g->drawingMode() == GL_LINES)
glLineWidth(g->lineWidth());
#if !defined(QT_OPENGL_ES_2)
- else if (g->drawingMode() == GL_POINTS)
+ else if (!QOpenGLContext::currentContext()->isOpenGLES() && g->drawingMode() == GL_POINTS)
glPointSize(g->lineWidth());
#endif
@@ -2430,6 +2435,8 @@ void Renderer::render()
renderBatches();
m_rebuild = 0;
+ m_renderOrderRebuildLower = -1;
+ m_renderOrderRebuildUpper = -1;
if (m_visualizeMode != VisualizeNothing)
visualize();