summaryrefslogtreecommitdiff
path: root/platform/qt/src/qmapboxgl_map_renderer.cpp
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <tmpsantos@gmail.com>2018-01-17 18:13:12 +0200
committerThiago Marcos P. Santos <tmpsantos@gmail.com>2018-02-09 20:28:54 +0200
commite7e8cb4547aff3d7fe2e9c1fb04e82bfb2a7dc47 (patch)
tree6c4bb2042e5756fe0bcc22beef6b90813b00acd2 /platform/qt/src/qmapboxgl_map_renderer.cpp
parent18cf796b527e4014599c380e5a43a37a6a11818d (diff)
downloadqtlocation-mapboxgl-e7e8cb4547aff3d7fe2e9c1fb04e82bfb2a7dc47.tar.gz
[qt] Render asynchronously
Diffstat (limited to 'platform/qt/src/qmapboxgl_map_renderer.cpp')
-rw-r--r--platform/qt/src/qmapboxgl_map_renderer.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/platform/qt/src/qmapboxgl_map_renderer.cpp b/platform/qt/src/qmapboxgl_map_renderer.cpp
new file mode 100644
index 0000000000..c0293c2079
--- /dev/null
+++ b/platform/qt/src/qmapboxgl_map_renderer.cpp
@@ -0,0 +1,43 @@
+#include "qmapboxgl_map_renderer.hpp"
+
+#include <QtGlobal>
+
+QMapboxGLMapRenderer::QMapboxGLMapRenderer(qreal pixelRatio,
+ mbgl::DefaultFileSource &fs, mbgl::ThreadPool &tp, QMapboxGLSettings::GLContextMode mode)
+ : m_renderer(std::make_unique<mbgl::Renderer>(m_backend, pixelRatio, fs, tp, static_cast<mbgl::GLContextMode>(mode)))
+{
+}
+
+QMapboxGLMapRenderer::~QMapboxGLMapRenderer()
+{
+}
+
+void QMapboxGLMapRenderer::updateParameters(std::shared_ptr<mbgl::UpdateParameters> newParameters)
+{
+ std::lock_guard<std::mutex> lock(m_updateMutex);
+ m_updateParameters = std::move(newParameters);
+}
+
+void QMapboxGLMapRenderer::updateFramebufferSize(const mbgl::Size &size)
+{
+ std::lock_guard<std::mutex> lock(m_updateMutex);
+ m_backend.setFramebufferSize(size);
+}
+
+void QMapboxGLMapRenderer::render()
+{
+ std::shared_ptr<mbgl::UpdateParameters> params;
+ {
+ // Lock on the parameters
+ std::unique_lock<std::mutex> lock(m_updateMutex);
+ if (!m_updateParameters) return;
+
+ // Hold on to the update parameters during render
+ params = m_updateParameters;
+ }
+
+ // The OpenGL implementation automatically enables the OpenGL context for us.
+ mbgl::BackendScope scope(m_backend, mbgl::BackendScope::ScopeType::Implicit);
+
+ m_renderer->render(*params);
+}