diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-05-09 16:25:58 +0200 |
---|---|---|
committer | Gunnar Sletta <gunnar.sletta@jollamobile.com> | 2014-05-10 11:53:47 +0200 |
commit | 66646dd8c37adb488a79ab274b2396a649674e6d (patch) | |
tree | b0f5ac752a52cec3de1d47692e09295197622dcd /src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp | |
parent | da15ea0f3b5805db657f13060c21efa78f10cde2 (diff) | |
parent | d82a17b929dd88fe76258b0f801beaa1b2ee343e (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.cpp | 17 |
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(); |