diff options
author | Liang Qi <liang.qi@qt.io> | 2017-06-07 11:06:28 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-06-07 11:06:28 +0200 |
commit | f55629245259ba7364e258f92408823024423caa (patch) | |
tree | f73063cf02dc175fbe9f0bfb48b3ddd686ea0f72 /src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp | |
parent | 22d980c8124026eb712f563326d5a5c1b180c671 (diff) | |
parent | d89701c5c8646dedb0ebb2e011c4da796a6ae8a1 (diff) | |
download | qtlocation-f55629245259ba7364e258f92408823024423caa.tar.gz |
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts:
.qmake.conf
src/plugins/geoservices/geoservices.pro
Change-Id: Ie82dd22c588e5cba409fc1ef31a65968ce9f719b
Diffstat (limited to 'src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp')
-rw-r--r-- | src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp b/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp index d76d5e7a..ad3ab375 100644 --- a/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp +++ b/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp @@ -91,13 +91,9 @@ QSGNode *QGeoMapMapboxGLPrivate::updateSceneGraph(QSGNode *node, QQuickWindow *w { Q_Q(QGeoMapMapboxGL); - if (!m_warned) { - if (window->openglContext()->thread() != QCoreApplication::instance()->thread()) { - qWarning() << "Threaded rendering is not supported by Mapbox GL plugin."; - QMetaObject::invokeMethod(&m_refresh, "start", Qt::QueuedConnection); - } - - m_warned = true; + if (m_viewportSize.isEmpty()) { + delete node; + return 0; } QMapboxGL *map = 0; @@ -151,6 +147,8 @@ QSGNode *QGeoMapMapboxGLPrivate::updateSceneGraph(QSGNode *node, QQuickWindow *w static_cast<QSGMapboxGLTextureNode *>(node)->render(window); } + threadedRenderingHack(window, map); + m_syncState = NoSync; return node; @@ -212,7 +210,7 @@ void QGeoMapMapboxGLPrivate::addMapItem(QDeclarativeGeoMapItemBase *item) QObject::connect(item, &QDeclarativeGeoMapItemBase::mapItemOpacityChanged, q, &QGeoMapMapboxGL::onMapItemPropertyChanged); - m_styleChanges << QMapboxGLStyleChange::addMapItem(item); + m_styleChanges << QMapboxGLStyleChange::addMapItem(item, m_mapItemsBefore); emit q->sgNodeChanged(); } @@ -278,6 +276,31 @@ void QGeoMapMapboxGLPrivate::syncStyleChanges(QMapboxGL *map) m_styleChanges.clear(); } +void QGeoMapMapboxGLPrivate::threadedRenderingHack(QQuickWindow *window, QMapboxGL *map) +{ + // FIXME: Optimal support for threaded rendering needs core changes + // in Mapbox GL Native. Meanwhile we need to set a timer to update + // the map until all the resources are loaded, which is not exactly + // battery friendly, because might trigger more paints than we need. + if (!m_warned) { + m_threadedRendering = window->openglContext()->thread() != QCoreApplication::instance()->thread(); + + if (m_threadedRendering) { + qWarning() << "Threaded rendering is not optimal in the Mapbox GL plugin."; + } + + m_warned = true; + } + + if (m_threadedRendering) { + if (!map->isFullyLoaded()) { + QMetaObject::invokeMethod(&m_refresh, "start", Qt::QueuedConnection); + } else { + QMetaObject::invokeMethod(&m_refresh, "stop", Qt::QueuedConnection); + } + } +} + /* * QGeoMapMapboxGL implementation */ @@ -319,6 +342,12 @@ void QGeoMapMapboxGL::setUseFBO(bool useFBO) d->m_useFBO = useFBO; } +void QGeoMapMapboxGL::setMapItemsBefore(const QString &before) +{ + Q_D(QGeoMapMapboxGL); + d->m_mapItemsBefore = before; +} + QSGNode *QGeoMapMapboxGL::updateSceneGraph(QSGNode *oldNode, QQuickWindow *window) { Q_D(QGeoMapMapboxGL); @@ -339,7 +368,7 @@ void QGeoMapMapboxGL::onMapChanged(QMapboxGL::MapChange change) d->m_styleChanges << QMapboxGLStyleChange::addMapParameter(param); for (QDeclarativeGeoMapItemBase *item : d->m_mapItems) - d->m_styleChanges << QMapboxGLStyleChange::addMapItem(item); + d->m_styleChanges << QMapboxGLStyleChange::addMapItem(item, d->m_mapItemsBefore); } } |