diff options
author | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2018-01-17 18:13:12 +0200 |
---|---|---|
committer | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2018-02-09 20:28:54 +0200 |
commit | e7e8cb4547aff3d7fe2e9c1fb04e82bfb2a7dc47 (patch) | |
tree | 6c4bb2042e5756fe0bcc22beef6b90813b00acd2 /platform/qt/src/qmapboxgl_map_renderer.cpp | |
parent | 18cf796b527e4014599c380e5a43a37a6a11818d (diff) | |
download | qtlocation-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.cpp | 43 |
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); +} |