#pragma once #include #include #include #include #include #include #include namespace mbgl { class Renderer; class Map; class TransformState; class HeadlessFrontend : public RendererFrontend { public: HeadlessFrontend(float pixelRatio_, gfx::HeadlessBackend::SwapBehaviour swapBehviour = gfx::HeadlessBackend::SwapBehaviour::NoFlush, gfx::ContextMode mode = gfx::ContextMode::Unique, const optional localFontFamily = {}); HeadlessFrontend(Size, float pixelRatio_, gfx::HeadlessBackend::SwapBehaviour swapBehviour = gfx::HeadlessBackend::SwapBehaviour::NoFlush, gfx::ContextMode mode = gfx::ContextMode::Unique, const optional localFontFamily = {}); ~HeadlessFrontend() override; void reset() override; void update(std::shared_ptr) override; void setObserver(RendererObserver&) override; double getFrameTime() const; Size getSize() const; void setSize(Size); Renderer* getRenderer(); gfx::RendererBackend* getBackend(); CameraOptions getCameraOptions(); bool hasImage(const std::string&); bool hasLayer(const std::string&); bool hasSource(const std::string&); ScreenCoordinate pixelForLatLng(const LatLng&); LatLng latLngForPixel(const ScreenCoordinate&); PremultipliedImage readStillImage(); PremultipliedImage render(Map&); void renderOnce(Map&); optional getTransformState() const; private: Size size; float pixelRatio; std::atomic frameTime; std::unique_ptr backend; util::AsyncTask asyncInvalidate; std::unique_ptr renderer; std::shared_ptr updateParameters; }; } // namespace mbgl