#pragma once #include "qmapboxgl.hpp" #include "qmapboxgl_renderer_backend.hpp" #include #include #include #include #include #include #include #include #include #include namespace mbgl { class Renderer; class UpdateParameters; } // namespace mbgl class QMapboxGLRendererBackend; class QMapboxGLMapRenderer : public QObject, public mbgl::Scheduler { Q_OBJECT public: QMapboxGLMapRenderer(qreal pixelRatio, mbgl::DefaultFileSource &, mbgl::ThreadPool &, QMapboxGLSettings::GLContextMode); virtual ~QMapboxGLMapRenderer(); // mbgl::Scheduler implementation. void schedule(std::weak_ptr scheduled) final; void render(); void updateFramebuffer(quint32 fbo, const mbgl::Size &size); void setObserver(std::shared_ptr); // Thread-safe, called by the Frontend void updateParameters(std::shared_ptr); signals: void needsRendering(); private: MBGL_STORE_THREAD(tid) Q_DISABLE_COPY(QMapboxGLMapRenderer) std::mutex m_updateMutex; std::shared_ptr m_updateParameters; QMapboxGLRendererBackend m_backend; std::unique_ptr m_renderer; std::mutex m_taskQueueMutex; std::queue> m_taskQueue; bool m_threadWithScheduler; };