#pragma once namespace mbgl { class RendererBackend; class BackendScope { public: // There are two types of scopes: Creating an "Implicit" scope tells Mapbox GL that the // supporting windowing system has already activated the GL Backend and that no further actions // are required. Creating an "Explicit" scope actually enables the GL Backend, and disables it // when the BackendScope is destroyed. enum class ScopeType : bool { Implicit, Explicit, }; BackendScope(RendererBackend&, ScopeType = ScopeType::Explicit); ~BackendScope(); // Returns true when there is currently a BackendScope active in this thread. static bool exists(); private: void activate(); void deactivate(); BackendScope* priorScope; BackendScope* nextScope; RendererBackend& backend; const ScopeType scopeType; bool activated = false; }; } // namespace mbgl