1 #pragma once
2 
3 #include "qmapboxgl.hpp"
4 #include "qmapboxgl_renderer_backend.hpp"
5 
6 #include <mbgl/renderer/renderer.hpp>
7 #include <mbgl/renderer/renderer_backend.hpp>
8 #include <mbgl/renderer/renderer_observer.hpp>
9 #include <mbgl/storage/default_file_source.hpp>
10 #include <mbgl/util/shared_thread_pool.hpp>
11 #include <mbgl/util/util.hpp>
12 
13 #include <QtGlobal>
14 
15 #include <memory>
16 #include <mutex>
17 
18 namespace mbgl {
19 class Renderer;
20 class UpdateParameters;
21 } // namespace mbgl
22 
23 class QMapboxGLRendererBackend;
24 
25 class QMapboxGLMapRenderer : public QObject
26 {
27     Q_OBJECT
28 
29 public:
30     QMapboxGLMapRenderer(qreal pixelRatio, mbgl::DefaultFileSource &,
31             mbgl::ThreadPool &, QMapboxGLSettings::GLContextMode);
32     virtual ~QMapboxGLMapRenderer();
33 
34     void render();
35     void updateFramebuffer(quint32 fbo, const mbgl::Size &size);
36     void setObserver(std::shared_ptr<mbgl::RendererObserver>);
37 
38     // Thread-safe, called by the Frontend
39     void updateParameters(std::shared_ptr<mbgl::UpdateParameters>);
40 
41 signals:
42     void needsRendering();
43 
44 private:
45     MBGL_STORE_THREAD(tid)
46 
47     Q_DISABLE_COPY(QMapboxGLMapRenderer)
48 
49     std::mutex m_updateMutex;
50     std::shared_ptr<mbgl::UpdateParameters> m_updateParameters;
51 
52     QMapboxGLRendererBackend m_backend;
53     std::unique_ptr<mbgl::Renderer> m_renderer;
54 
55     bool m_forceScheduler;
56 };
57