diff options
author | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2018-01-24 23:17:25 +0200 |
---|---|---|
committer | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2018-02-09 20:28:54 +0200 |
commit | a062f3e17b6f42252a283b50bd36de3411571b7d (patch) | |
tree | aea1942a1450aca9be73d827d61b38729182ced0 /platform/qt/src/qmapboxgl.cpp | |
parent | e7e8cb4547aff3d7fe2e9c1fb04e82bfb2a7dc47 (diff) | |
download | qtlocation-mapboxgl-a062f3e17b6f42252a283b50bd36de3411571b7d.tar.gz |
[qt] Update map rendering via RendererObserver
Diffstat (limited to 'platform/qt/src/qmapboxgl.cpp')
-rw-r--r-- | platform/qt/src/qmapboxgl.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index af94eb9f71..cf6be2c9a7 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -2,6 +2,7 @@ #include "qmapboxgl_p.hpp" #include "qmapboxgl_map_observer.hpp" +#include "qmapboxgl_renderer_observer.hpp" #include "qt_conversion.hpp" #include "qt_geojson.hpp" @@ -1486,6 +1487,7 @@ void QMapboxGL::render() } #endif + d_ptr->renderQueued.clear(); d_ptr->mapRenderer->render(); } @@ -1567,7 +1569,8 @@ QMapboxGLPrivate::QMapboxGLPrivate(QMapboxGL *q, const QMapboxGLSettings &settin static_cast<mbgl::ConstrainMode>(settings.constrainMode()), static_cast<mbgl::ViewportMode>(settings.viewportMode())); - connect(this, SIGNAL(needsRendering()), q_ptr, SIGNAL(needsRendering())); + // Needs to be Queued to give time to discard redundant draw calls via the `renderQueued` flag. + connect(this, SIGNAL(needsRendering()), q_ptr, SIGNAL(needsRendering()), Qt::QueuedConnection); } QMapboxGLPrivate::~QMapboxGLPrivate() @@ -1577,5 +1580,16 @@ QMapboxGLPrivate::~QMapboxGLPrivate() void QMapboxGLPrivate::update(std::shared_ptr<mbgl::UpdateParameters> parameters) { mapRenderer->updateParameters(std::move(parameters)); - emit needsRendering(); + + if (!renderQueued.test_and_set()) { + emit needsRendering(); + } +} + +void QMapboxGLPrivate::setObserver(mbgl::RendererObserver &observer) +{ + m_rendererObserver = std::make_shared<QMapboxGLRendererObserver>( + *mbgl::util::RunLoop::Get(), observer); + + mapRenderer->setObserver(m_rendererObserver); } |