#pragma once #include "qmapboxgl.hpp" #include "qmapboxgl_map_observer.hpp" #include "qmapboxgl_map_renderer.hpp" #include #include #include #include #include #include #include #include #include #include class QMapboxGLPrivate : public QObject, public mbgl::RendererFrontend { Q_OBJECT public: explicit QMapboxGLPrivate(QMapboxGL *, const QMapboxGLSettings &, const QSize &size, qreal pixelRatio); virtual ~QMapboxGLPrivate(); // mbgl::RendererFrontend implementation. void reset() final {} void setObserver(mbgl::RendererObserver &) final; void update(std::shared_ptr) final; // These need to be called on the same thread. void createRenderer(); void destroyRenderer(); void render(); void setFramebufferObject(quint32 fbo, const QSize& size); using PropertySetter = mbgl::optional (mbgl::style::Layer::*)(const std::string&, const mbgl::style::conversion::Convertible&); bool setProperty(const PropertySetter& setter, const QString& layer, const QString& name, const QVariant& value); mbgl::EdgeInsets margins; std::unique_ptr mapObj; public slots: void requestRendering(); signals: void needsRendering(); private: Q_DISABLE_COPY(QMapboxGLPrivate) std::recursive_mutex m_mapRendererMutex; std::shared_ptr m_rendererObserver; std::shared_ptr m_updateParameters; std::unique_ptr m_mapObserver; std::shared_ptr m_threadPool; std::unique_ptr m_mapRenderer; std::unique_ptr> m_resourceTransform; QMapboxGLSettings::GLContextMode m_mode; qreal m_pixelRatio; QString m_localFontFamily; std::atomic_flag m_renderQueued = ATOMIC_FLAG_INIT; };