From 5cc390d694fc7510d445310d8eb9e32429a5e67b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Thu, 6 Oct 2016 13:23:50 +0200 Subject: [core] separate Backend from View for headless rendering --- include/mbgl/map/backend.hpp | 34 ++++++++++++++++++++++++++++++++++ include/mbgl/map/map.hpp | 7 ++++++- include/mbgl/map/view.hpp | 39 ++++++++------------------------------- 3 files changed, 48 insertions(+), 32 deletions(-) create mode 100644 include/mbgl/map/backend.hpp (limited to 'include/mbgl/map') diff --git a/include/mbgl/map/backend.hpp b/include/mbgl/map/backend.hpp new file mode 100644 index 0000000000..e4a5634b88 --- /dev/null +++ b/include/mbgl/map/backend.hpp @@ -0,0 +1,34 @@ +#pragma once + +#include + +namespace mbgl { + +class Map; + +class Backend { +public: + virtual ~Backend() = default; + + // Called when the backend's GL context needs to be made active or inactive. These are called, + // as a matched pair, in four situations: + // + // 1. When releasing GL resources during Map destruction + // 2. When calling a CustomLayerInitializeFunction, during Map::addLayer + // 3. When calling a CustomLayerDeinitializeFunction, during Map::removeLayer + // 4. When rendering for Map::renderStill + // + // They are *not* called for Map::render; it is assumed that the correct context is already + // activated prior to calling Map::render. + virtual void activate() = 0; + virtual void deactivate() = 0; + + // Called when the map needs to be rendered; the backend should call Map::render() at some point + // in the near future. (Not called for Map::renderStill() mode.) + virtual void invalidate() = 0; + + // Notifies a watcher of map x/y/scale/rotation changes. + virtual void notifyMapChange(MapChange change); +}; + +} // namespace mbgl diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index 2831206d54..4f6207fc6f 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -19,6 +19,7 @@ namespace mbgl { +class Backend; class View; class FileSource; class Scheduler; @@ -33,7 +34,11 @@ class Layer; class Map : private util::noncopyable { public: - explicit Map(View&, FileSource&, Scheduler&, + explicit Map(Backend&, + View&, + float pixelRatio, + FileSource&, + Scheduler&, MapMode mapMode = MapMode::Continuous, GLContextMode contextMode = GLContextMode::Unique, ConstrainMode constrainMode = ConstrainMode::HeightOnly, diff --git a/include/mbgl/map/view.hpp b/include/mbgl/map/view.hpp index 590eef7237..0dff4b3602 100644 --- a/include/mbgl/map/view.hpp +++ b/include/mbgl/map/view.hpp @@ -1,24 +1,23 @@ #pragma once -#include -#include #include #include -#include -#include namespace mbgl { class Map; -class View { +class View : private util::noncopyable { public: virtual ~View() = default; - // Called directly after initialization. Must always return the same value, i.e. it may - // not change over time. - virtual float getPixelRatio() const = 0; + // Called when this View is associated with a Map object. + virtual void initialize(Map*); + + // Called when this View is used for rendering. Implementations should ensure that a renderable + // object is bound and glClear/glDraw* calls can be done. + virtual void bind() = 0; // Called when the View signaled a dimension change. Must return the logical dimension // of this map in pixels. @@ -30,34 +29,12 @@ public: // different from that rule. virtual std::array getFramebufferSize() const = 0; - // Called when this View is associated with a Map object. - virtual void initialize(Map*); - - // Called when the view's GL context needs to be made active or inactive. These are called, - // as a matched pair, in four situations: - // - // 1. When releasing GL resources during Map destruction - // 2. When calling a CustomLayerInitializeFunction, during Map::addLayer - // 3. When calling a CustomLayerDeinitializeFunction, during Map::removeLayer - // 4. When rendering for Map::renderStill - // - // They are *not* called for Map::render; it is assumed that the correct context is already - // activated prior to calling Map::render. - virtual void activate() = 0; - virtual void deactivate() = 0; - - // Called when the map needs to be rendered; the view should call Map::render() at some point - // in the near future. (Not called for Map::renderStill() mode.) - virtual void invalidate() = 0; - // Reads the pixel data from the current framebuffer. If your View implementation // doesn't support reading from the framebuffer, return a null pointer. virtual PremultipliedImage readStillImage(std::array size = {{ 0, 0 }}); - // Notifies a watcher of map x/y/scale/rotation changes. - virtual void notifyMapChange(MapChange change); - protected: mbgl::Map *map = nullptr; }; + } // namespace mbgl -- cgit v1.2.1