diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index b70c38818..e33b8e49f 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -8,7 +8,6 @@ #include #include #include -#include #include #include #include @@ -23,18 +22,13 @@ namespace mbgl { class FileSource; class View; -class MapData; -class MapContext; class SpriteImage; -class Transform; class PointAnnotation; class ShapeAnnotation; struct CameraOptions; struct AnimationOptions; class Map : private util::noncopyable { - friend class View; - public: explicit Map(View&, FileSource&, MapMode mapMode = MapMode::Continuous, @@ -176,19 +170,8 @@ public: void dumpDebugLogs() const; private: - View& view; - const std::unique_ptr transform; - const std::unique_ptr context; - MapData* data; - - enum class RenderState { - never, - partial, - fully - }; - - RenderState renderState = RenderState::never; - bool loading = false; + class Impl; + const std::unique_ptr impl; }; } // namespace mbgl diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 7300e5c3b..55f0197dc 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -7,57 +6,179 @@ #include #include #include +#include #include #include #include - +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include namespace mbgl { -Map::Map(View& view_, FileSource& fileSource, MapMode mapMode, GLContextMode contextMode, ConstrainMode constrainMode) - : view(view_), - transform(std::make_unique(view, constrainMode)), - context(std::make_unique( - view, fileSource, mapMode, contextMode, view.getPixelRatio())), - data(&context->getData()) -{ +enum class RenderState { + never, + partial, + fully +}; + +class Map::Impl : public Style::Observer { +public: + Impl(View&, FileSource&, MapMode, GLContextMode, ConstrainMode); + + void onResourceLoaded() override; + void onResourceError(std::exception_ptr) override; + + void update(); + void render(); + + void loadStyleJSON(const std::string& json, const std::string& base); + + View& view; + FileSource& fileSource; + + RenderState renderState = RenderState::never; + Transform transform; + + std::unique_ptr dataPtr; + MapData& data; + + gl::GLObjectStore glObjectStore; + Update updateFlags = Update::Nothing; + util::AsyncTask asyncUpdate; + + std::unique_ptr texturePool; + std::unique_ptr painter; + std::unique_ptr