1 #pragma once 2 3 #include "qmapboxgl.hpp" 4 #include "qmapboxgl_map_observer.hpp" 5 #include "qmapboxgl_map_renderer.hpp" 6 7 #include <mbgl/actor/actor.hpp> 8 #include <mbgl/map/map.hpp> 9 #include <mbgl/renderer/renderer_frontend.hpp> 10 #include <mbgl/storage/default_file_source.hpp> 11 #include <mbgl/storage/resource_transform.hpp> 12 #include <mbgl/util/default_thread_pool.hpp> 13 #include <mbgl/util/geo.hpp> 14 15 #include <QObject> 16 #include <QSize> 17 18 #include <atomic> 19 #include <memory> 20 21 class QMapboxGLPrivate : public QObject, public mbgl::RendererFrontend 22 { 23 Q_OBJECT 24 25 public: 26 explicit QMapboxGLPrivate(QMapboxGL *, const QMapboxGLSettings &, const QSize &size, qreal pixelRatio); 27 virtual ~QMapboxGLPrivate(); 28 29 // mbgl::RendererFrontend implementation. reset()30 void reset() final {} 31 void setObserver(mbgl::RendererObserver &) final; 32 void update(std::shared_ptr<mbgl::UpdateParameters>) final; 33 34 // These need to be called on the same thread. 35 void createRenderer(); 36 void destroyRenderer(); 37 void render(); 38 void setFramebufferObject(quint32 fbo, const QSize& size); 39 40 mbgl::EdgeInsets margins; 41 std::unique_ptr<mbgl::Map> mapObj; 42 43 public slots: 44 void requestRendering(); 45 46 signals: 47 void needsRendering(); 48 49 private: 50 Q_DISABLE_COPY(QMapboxGLPrivate) 51 52 std::recursive_mutex m_mapRendererMutex; 53 std::shared_ptr<mbgl::RendererObserver> m_rendererObserver; 54 55 std::unique_ptr<QMapboxGLMapObserver> m_mapObserver; 56 std::shared_ptr<mbgl::DefaultFileSource> m_fileSourceObj; 57 std::shared_ptr<mbgl::ThreadPool> m_threadPool; 58 std::unique_ptr<QMapboxGLMapRenderer> m_mapRenderer; 59 std::unique_ptr<mbgl::Actor<mbgl::ResourceTransform>> m_resourceTransform; 60 61 QMapboxGLSettings::GLContextMode m_mode; 62 qreal m_pixelRatio; 63 64 std::atomic_flag m_renderQueued = ATOMIC_FLAG_INIT; 65 }; 66