#pragma once #include #include #include #include namespace mbgl { class HeadlessDisplay; class HeadlessBackend : public Backend { public: HeadlessBackend(); HeadlessBackend(std::shared_ptr); ~HeadlessBackend() override; void invalidate() override; void activate() override; void deactivate() override; void notifyMapChange(MapChange) override; void setMapChangeCallback(std::function&& cb) { mapChangeCallback = std::move(cb); } struct Impl { virtual ~Impl() {} virtual void activateContext() = 0; virtual void deactivateContext() {} }; private: // Implementation specific functions static gl::glProc initializeExtension(const char*); bool hasContext() const { return bool(impl); } bool hasDisplay(); void createContext(); private: void destroyContext(); void activateContext(); void deactivateContext(); std::unique_ptr impl; std::shared_ptr display; bool extensionsLoaded = false; bool active = false; std::function mapChangeCallback; }; } // namespace mbgl