summaryrefslogtreecommitdiff
path: root/platform/qt/src/qmapboxgl.cpp
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <tmpsantos@gmail.com>2018-01-24 23:17:25 +0200
committerThiago Marcos P. Santos <tmpsantos@gmail.com>2018-02-09 20:28:54 +0200
commita062f3e17b6f42252a283b50bd36de3411571b7d (patch)
treeaea1942a1450aca9be73d827d61b38729182ced0 /platform/qt/src/qmapboxgl.cpp
parente7e8cb4547aff3d7fe2e9c1fb04e82bfb2a7dc47 (diff)
downloadqtlocation-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.cpp18
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);
}