diff options
Diffstat (limited to 'platform/default/include/mbgl/gl')
-rw-r--r-- | platform/default/include/mbgl/gl/headless_backend.hpp | 50 | ||||
-rw-r--r-- | platform/default/include/mbgl/gl/headless_frontend.hpp | 61 |
2 files changed, 111 insertions, 0 deletions
diff --git a/platform/default/include/mbgl/gl/headless_backend.hpp b/platform/default/include/mbgl/gl/headless_backend.hpp new file mode 100644 index 0000000000..7757037533 --- /dev/null +++ b/platform/default/include/mbgl/gl/headless_backend.hpp @@ -0,0 +1,50 @@ +#pragma once + +#include <mbgl/renderer/renderer_backend.hpp> + +#include <memory> +#include <functional> + +namespace mbgl { + +class HeadlessBackend : public RendererBackend { +public: + HeadlessBackend(Size = { 256, 256 }); + ~HeadlessBackend() override; + + void bind() override; + Size getFramebufferSize() const override; + void updateAssumedState() override; + + void setSize(Size); + PremultipliedImage readStillImage(); + + class Impl { + public: + virtual ~Impl() = default; + virtual gl::ProcAddress getExtensionFunctionPointer(const char*) = 0; + virtual void activateContext() = 0; + virtual void deactivateContext() {} + }; + +private: + // Implementation specific functions + gl::ProcAddress getExtensionFunctionPointer(const char*) override; + + void activate() override; + void deactivate() override; + + void createImpl(); + +private: + std::unique_ptr<Impl> impl; + + Size size; + float pixelRatio; + bool active = false; + + class View; + std::unique_ptr<View> view; +}; + +} // namespace mbgl diff --git a/platform/default/include/mbgl/gl/headless_frontend.hpp b/platform/default/include/mbgl/gl/headless_frontend.hpp new file mode 100644 index 0000000000..18f0cfa537 --- /dev/null +++ b/platform/default/include/mbgl/gl/headless_frontend.hpp @@ -0,0 +1,61 @@ +#pragma once + +#include <mbgl/map/camera.hpp> +#include <mbgl/renderer/mode.hpp> +#include <mbgl/renderer/renderer_frontend.hpp> +#include <mbgl/gl/headless_backend.hpp> +#include <mbgl/util/async_task.hpp> +#include <mbgl/util/optional.hpp> + +#include <memory> + +namespace mbgl { + +class FileSource; +class Scheduler; +class Renderer; +class RendererBackend; +class Map; +class TransformState; + +class HeadlessFrontend : public RendererFrontend { +public: + HeadlessFrontend(float pixelRatio_, FileSource&, Scheduler&, const optional<std::string> programCacheDir = {}, GLContextMode mode = GLContextMode::Unique, const optional<std::string> localFontFamily = {}); + HeadlessFrontend(Size, float pixelRatio_, FileSource&, Scheduler&, const optional<std::string> programCacheDir = {}, GLContextMode mode = GLContextMode::Unique, const optional<std::string> localFontFamily = {}); + ~HeadlessFrontend() override; + + void reset() override; + void update(std::shared_ptr<UpdateParameters>) override; + void setObserver(RendererObserver&) override; + + Size getSize() const; + void setSize(Size); + + Renderer* getRenderer(); + 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&); + + optional<TransformState> getTransformState() const; + +private: + Size size; + float pixelRatio; + + HeadlessBackend backend; + util::AsyncTask asyncInvalidate; + + std::unique_ptr<Renderer> renderer; + std::shared_ptr<UpdateParameters> updateParameters; +}; + +} // namespace mbgl |