diff options
author | Paolo Angelelli <paolo.angelelli.qt@gmail.com> | 2019-12-26 21:31:03 +0100 |
---|---|---|
committer | paolo <paolo.angelelli.qt@gmail.com> | 2020-02-11 19:35:27 +0100 |
commit | e82c41d35ddd6ef0d14e1d01ea1dfd46742bc0fe (patch) | |
tree | 17772318d8b51e3eb4bc19dc3d5fee120c137a90 /src/location/labs/qsg/qmappolygonobjectqsg.cpp | |
parent | d055098540df99a5d426360e9322c659e678e5ee (diff) | |
download | qtlocation-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/qmappolygonobjectqsg.cpp')
-rw-r--r-- | src/location/labs/qsg/qmappolygonobjectqsg.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/location/labs/qsg/qmappolygonobjectqsg.cpp b/src/location/labs/qsg/qmappolygonobjectqsg.cpp index 9963cac9..25473478 100644 --- a/src/location/labs/qsg/qmappolygonobjectqsg.cpp +++ b/src/location/labs/qsg/qmappolygonobjectqsg.cpp @@ -85,17 +85,16 @@ QSGNode *QMapPolygonObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode, Q_UNUSED(visibleNode); MapPolygonNode *node = static_cast<MapPolygonNode *>(oldNode); - bool created = false; if (!node) { - if (!m_geometry.size() && !m_borderGeometry.size()) + if (!m_geometry.size() && !m_borderGeometry.size()) { return nullptr; + } node = new MapPolygonNode(); *visibleNode = static_cast<VisibleNode *>(node); - created = true; } //TODO: update only material - if (m_geometry.isScreenDirty() || !m_borderGeometry.isScreenDirty() || !oldNode || created) { + if (m_geometry.isScreenDirty() || !m_borderGeometry.isScreenDirty() || !oldNode) { node->update(fillColor(), borderColor(), &m_geometry, &m_borderGeometry); m_geometry.setPreserveGeometry(false); m_borderGeometry.setPreserveGeometry(false); @@ -103,9 +102,12 @@ QSGNode *QMapPolygonObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode, m_borderGeometry.markClean(); } - if (created) + if (m_geometry.size() || m_borderGeometry.size()) { root->appendChildNode(node); - + } else { + delete node; + return nullptr; + } return node; } |