aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp10
-rw-r--r--src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h2
2 files changed, 11 insertions, 1 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
index ce3c4aac4f..a74e82b1bd 100644
--- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
+++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
@@ -859,6 +859,9 @@ bool Batch::geometryWasChanged(QSGGeometryNode *gn)
void Batch::cleanupRemovedElements()
{
+ if (!needsPurge)
+ return;
+
// remove from front of batch..
while (first && first->removed) {
first = first->nextInBatch;
@@ -875,6 +878,8 @@ void Batch::cleanupRemovedElements()
}
}
+
+ needsPurge = false;
}
/*
@@ -1379,6 +1384,7 @@ void Renderer::nodeWasRemoved(Node *node)
}
if (e->batch) {
e->batch->needsUpload = true;
+ e->batch->needsPurge = true;
}
}
@@ -1400,7 +1406,6 @@ void Renderer::nodeWasRemoved(Node *node)
if (e) {
e->removed = true;
m_elementsToDelete.add(e);
-
if (m_renderNodeElements.isEmpty()) {
static const bool useDepth = qEnvironmentVariableIsEmpty("QSG_NO_DEPTH_BUFFER");
if (m_rhi)
@@ -1408,6 +1413,9 @@ void Renderer::nodeWasRemoved(Node *node)
else
m_useDepthBuffer = useDepth && m_context->openglContext()->format().depthBufferSize() > 0;
}
+
+ 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 878b63fc8c..a6c5e615ba 100644
--- a/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h
+++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h
@@ -463,6 +463,7 @@ struct Batch
uploadedThisFrame = false;
isRenderNode = false;
ubufDataValid = false;
+ needsPurge = false;
clipState.reset();
blendConstant = QColor();
}
@@ -482,6 +483,7 @@ struct Batch
uint merged : 1;
uint isRenderNode : 1;
uint ubufDataValid : 1;
+ uint needsPurge : 1;
mutable uint uploadedThisFrame : 1; // solely for debugging purposes