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