summaryrefslogtreecommitdiff
path: root/src/location/labs/qsg/qmappolylineobjectqsg.cpp
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli.qt@gmail.com>2019-12-26 21:31:03 +0100
committerpaolo <paolo.angelelli.qt@gmail.com>2020-02-11 19:35:27 +0100
commite82c41d35ddd6ef0d14e1d01ea1dfd46742bc0fe (patch)
tree17772318d8b51e3eb4bc19dc3d5fee120c137a90 /src/location/labs/qsg/qmappolylineobjectqsg.cpp
parentd055098540df99a5d426360e9322c659e678e5ee (diff)
downloadqtlocation-e82c41d35ddd6ef0d14e1d01ea1dfd46742bc0fe.tar.gz
Fix Map*ObjectsQSG implementation triggering QSGBatchRenderer crashes
The new approach introduces a root node for all objects, that is repopulated at every repaint. Change-Id: I4562e1aaa18999a03e8c38fe3bf59fe41f14dd70 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/location/labs/qsg/qmappolylineobjectqsg.cpp')
-rw-r--r--src/location/labs/qsg/qmappolylineobjectqsg.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/location/labs/qsg/qmappolylineobjectqsg.cpp b/src/location/labs/qsg/qmappolylineobjectqsg.cpp
index 2bf5b287..96f66565 100644
--- a/src/location/labs/qsg/qmappolylineobjectqsg.cpp
+++ b/src/location/labs/qsg/qmappolylineobjectqsg.cpp
@@ -107,25 +107,26 @@ QSGNode *QMapPolylineObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode,
Q_UNUSED(visibleNode);
MapPolylineNode *node = static_cast<MapPolylineNode *>(oldNode);
- bool created = false;
if (!node) {
if (!m_geometry.size()) // condition to block the subtree
return nullptr;
node = new MapPolylineNode();
*visibleNode = static_cast<VisibleNode *>(node);
- created = true;
}
//TODO: update only material
- if (m_geometry.isScreenDirty() || !oldNode || created) {
+ if (m_geometry.isScreenDirty() || !oldNode) {
node->update(color(), &m_geometry);
m_geometry.setPreserveGeometry(false);
m_geometry.markClean();
}
- if (created)
+ if (m_geometry.size()) {
root->appendChildNode(node);
-
+ } else {
+ delete node;
+ return nullptr;
+ }
return node;
}