From ee205ca9ca3f808fa2cc16295ebde0a7c3867381 Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Wed, 28 Jun 2017 16:32:00 -0700 Subject: [qt] rendering interface changes --- platform/qt/qt.cmake | 2 ++ platform/qt/src/qmapboxgl.cpp | 22 ++++++++++++-- platform/qt/src/qmapboxgl_p.hpp | 9 +++++- platform/qt/src/qmapboxgl_renderer_frontend_p.cpp | 32 +++++++++++++++++++++ platform/qt/src/qmapboxgl_renderer_frontend_p.hpp | 35 +++++++++++++++++++++++ 5 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 platform/qt/src/qmapboxgl_renderer_frontend_p.cpp create mode 100644 platform/qt/src/qmapboxgl_renderer_frontend_p.hpp (limited to 'platform') diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake index c8567bc2f3..0e9bbbb576 100644 --- a/platform/qt/qt.cmake +++ b/platform/qt/qt.cmake @@ -67,6 +67,8 @@ add_library(qmapboxgl SHARED platform/qt/src/qmapbox.cpp platform/qt/src/qmapboxgl.cpp platform/qt/src/qmapboxgl_p.hpp + platform/qt/src/qmapboxgl_renderer_frontend_p.hpp + platform/qt/src/qmapboxgl_renderer_frontend_p.cpp platform/default/mbgl/util/default_styles.hpp ) diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index ee08ba5730..aa02900c95 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -1,5 +1,6 @@ #include "qmapboxgl.hpp" #include "qmapboxgl_p.hpp" +#include "qmapboxgl_renderer_frontend_p.hpp" #include "qt_conversion.hpp" #include "qt_geojson.hpp" @@ -17,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -1448,7 +1450,7 @@ void QMapboxGL::render() mbgl::BackendScope scope { *d_ptr, mbgl::BackendScope::ScopeType::Implicit }; d_ptr->dirty = false; - d_ptr->mapObj->render(*d_ptr); + d_ptr->render(); } /*! @@ -1487,6 +1489,8 @@ void QMapboxGL::connectionEstablished() \a copyrightsHtml is a string with a HTML snippet. */ +class QMapboxGLRendererFrontend; + QMapboxGLPrivate::QMapboxGLPrivate(QMapboxGL *q, const QMapboxGLSettings &settings, const QSize &size_, qreal pixelRatio) : QObject(q) , size(size_) @@ -1497,11 +1501,18 @@ QMapboxGLPrivate::QMapboxGLPrivate(QMapboxGL *q, const QMapboxGLSettings &settin settings.cacheDatabaseMaximumSize())) , threadPool(mbgl::sharedThreadPool()) { + // Setup and connect the renderer frontend + frontend = std::make_unique( + std::make_unique(*this, pixelRatio, *fileSourceObj, *threadPool, + static_cast(settings.contextMode())), + *this); + connect(frontend.get(), SIGNAL(updated()), this, SLOT(invalidate())); + mapObj = std::make_unique( - *this, *this, sanitizedSize(size), + *frontend, + *this, sanitizedSize(size), pixelRatio, *fileSourceObj, *threadPool, mbgl::MapMode::Continuous, - static_cast(settings.contextMode()), static_cast(settings.constrainMode()), static_cast(settings.viewportMode())); @@ -1541,6 +1552,11 @@ void QMapboxGLPrivate::invalidate() } } +void QMapboxGLPrivate::render() +{ + frontend->render(); +} + void QMapboxGLPrivate::onCameraWillChange(mbgl::MapObserver::CameraChangeMode mode) { if (mode == mbgl::MapObserver::CameraChangeMode::Immediate) { diff --git a/platform/qt/src/qmapboxgl_p.hpp b/platform/qt/src/qmapboxgl_p.hpp index d89234531b..b9c1124551 100644 --- a/platform/qt/src/qmapboxgl_p.hpp +++ b/platform/qt/src/qmapboxgl_p.hpp @@ -1,6 +1,7 @@ #pragma once #include "qmapboxgl.hpp" +#include "qmapboxgl_renderer_frontend_p.hpp" #include #include @@ -22,14 +23,17 @@ public: mbgl::Size framebufferSize() const; + // mbgl::View implementation. void bind() final; // mbgl::Backend implementation. void updateAssumedState() final; - void invalidate() final; void activate() final {} void deactivate() final {} + mbgl::BackendScope::ScopeType getScopeType() const final { + return mbgl::BackendScope::ScopeType::Implicit; + } // mbgl::MapObserver implementation. void onCameraWillChange(mbgl::MapObserver::CameraChangeMode) final; @@ -55,6 +59,7 @@ public: std::shared_ptr fileSourceObj; std::shared_ptr threadPool; std::unique_ptr mapObj; + std::unique_ptr frontend; bool dirty { false }; @@ -63,6 +68,8 @@ private: public slots: void connectionEstablished(); + void invalidate(); + void render(); signals: void needsRendering(); diff --git a/platform/qt/src/qmapboxgl_renderer_frontend_p.cpp b/platform/qt/src/qmapboxgl_renderer_frontend_p.cpp new file mode 100644 index 0000000000..836a9431b8 --- /dev/null +++ b/platform/qt/src/qmapboxgl_renderer_frontend_p.cpp @@ -0,0 +1,32 @@ +#include "qmapboxgl_renderer_frontend_p.hpp" + +#include +#include + +QMapboxGLRendererFrontend::QMapboxGLRendererFrontend(std::unique_ptr renderer_, mbgl::View& view_) + : renderer(std::move(renderer_)) + , view(view_) { +} + +QMapboxGLRendererFrontend::~QMapboxGLRendererFrontend() = default; + +void QMapboxGLRendererFrontend::reset() { + if (renderer) { + renderer.reset(); + } +} + +void QMapboxGLRendererFrontend::update(std::shared_ptr updateParameters_) { + updateParameters = updateParameters_; + emit updated(); +} + +void QMapboxGLRendererFrontend::setObserver(mbgl::RendererObserver& observer_) { + if (!renderer) return; + renderer->setObserver(&observer_); +} + +void QMapboxGLRendererFrontend::render() { + if (!renderer || !updateParameters) return; + renderer->render(view, *updateParameters); +} diff --git a/platform/qt/src/qmapboxgl_renderer_frontend_p.hpp b/platform/qt/src/qmapboxgl_renderer_frontend_p.hpp new file mode 100644 index 0000000000..0a0546042a --- /dev/null +++ b/platform/qt/src/qmapboxgl_renderer_frontend_p.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include + +#include + +namespace mbgl { + class View; + class Renderer; +} // namespace mbgl + +class QMapboxGLRendererFrontend : public QObject, public mbgl::RendererFrontend +{ + Q_OBJECT + +public: + explicit QMapboxGLRendererFrontend(std::unique_ptr, mbgl::View&); + ~QMapboxGLRendererFrontend() override; + + void reset() override; + void setObserver(mbgl::RendererObserver&) override; + + void update(std::shared_ptr) override; + +public slots: + void render(); + +signals: + void updated(); + +private: + std::unique_ptr renderer; + mbgl::View& view; + std::shared_ptr updateParameters; +}; -- cgit v1.2.1