diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2016-12-06 17:24:32 +0100 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2016-12-12 09:05:23 -0500 |
commit | c76a933514e4e1514a58ac0e668b13eebab37794 (patch) | |
tree | c369563359007d730f427e04d9fd4945f3f97fbc /include/mbgl/map | |
parent | ffd74c309e0b44bdf3ff09c6c1dc715ad97f64cd (diff) | |
download | qtlocation-mapboxgl-c76a933514e4e1514a58ac0e668b13eebab37794.tar.gz |
[core] use raii to guard backend deactivation
Diffstat (limited to 'include/mbgl/map')
-rw-r--r-- | include/mbgl/map/backend.hpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/include/mbgl/map/backend.hpp b/include/mbgl/map/backend.hpp index c11d094906..0468449155 100644 --- a/include/mbgl/map/backend.hpp +++ b/include/mbgl/map/backend.hpp @@ -10,6 +10,8 @@ namespace gl { class Context; } // namespace gl +class BackendScope; + class Backend { public: Backend(); @@ -18,6 +20,14 @@ public: // Returns the backend's context which manages OpenGL state. gl::Context& getContext(); + // 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); + +protected: // Called when the backend's GL context needs to be made active or inactive. These are called, // as a matched pair, in four situations: // @@ -31,15 +41,24 @@ public: 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; +private: + const std::unique_ptr<gl::Context> context; - // Notifies a watcher of map x/y/scale/rotation changes. - virtual void notifyMapChange(MapChange change); + friend class BackendScope; +}; + +class BackendScope { +public: + BackendScope(Backend& backend_) : backend(backend_) { + backend.activate(); + } + + ~BackendScope() { + backend.deactivate(); + } private: - const std::unique_ptr<gl::Context> context; + Backend& backend; }; } // namespace mbgl |