diff options
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp | 9 | ||||
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h | 2 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp index b2d8ab5ff0..643b9ba5fa 100644 --- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp +++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp @@ -791,6 +791,9 @@ bool Batch::geometryWasChanged(QSGGeometryNode *gn) void Batch::cleanupRemovedElements() { + if (!needsPurge) + return; + // remove from front of batch.. while (first && first->removed) { first = first->nextInBatch; @@ -807,6 +810,8 @@ void Batch::cleanupRemovedElements() } } + + needsPurge = false; } /* @@ -1250,6 +1255,7 @@ void Renderer::nodeWasRemoved(Node *node) } if (e->batch) { e->batch->needsUpload = true; + e->batch->needsPurge = true; } } @@ -1273,6 +1279,9 @@ void Renderer::nodeWasRemoved(Node *node) m_elementsToDelete.add(e); if (m_renderNodeElements.isEmpty()) m_forceNoDepthBuffer = false; + + if (e->batch != nullptr) + e->batch->needsPurge = true; } } diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h b/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h index 08b61984bd..fd8b5b436c 100644 --- a/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h +++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h @@ -460,6 +460,7 @@ struct Batch uploadedThisFrame = false; isRenderNode = false; ubufDataValid = false; + needsPurge = false; clipState.reset(); blendConstant = QColor(); } @@ -479,6 +480,7 @@ struct Batch uint merged : 1; uint isRenderNode : 1; uint ubufDataValid : 1; + uint needsPurge : 1; mutable uint uploadedThisFrame : 1; // solely for debugging purposes |