aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp9
-rw-r--r--src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h2
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