From c76a933514e4e1514a58ac0e668b13eebab37794 Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Tue, 6 Dec 2016 17:24:32 +0100 Subject: [core] use raii to guard backend deactivation --- include/mbgl/map/backend.hpp | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'include/mbgl/map') 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 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 context; + Backend& backend; }; } // namespace mbgl -- cgit v1.2.1