diff --git a/benchmark/api/query.benchmark.cpp b/benchmark/api/query.benchmark.cpp index 7f08da73d..5e7fd823e 100644 --- a/benchmark/api/query.benchmark.cpp +++ b/benchmark/api/query.benchmark.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include #include diff --git a/benchmark/api/render.benchmark.cpp b/benchmark/api/render.benchmark.cpp index f9d3911f0..305ae8ce7 100644 --- a/benchmark/api/render.benchmark.cpp +++ b/benchmark/api/render.benchmark.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/bin/render.cpp b/bin/render.cpp index 48402ffce..a29ecdf08 100644 --- a/bin/render.cpp +++ b/bin/render.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include #include #include diff --git a/platform/android/core-files.json b/platform/android/core-files.json index ba56695bd..7e2f7cc07 100644 --- a/platform/android/core-files.json +++ b/platform/android/core-files.json @@ -85,8 +85,9 @@ "platform/android/src/thread.cpp", "platform/android/src/timer.cpp", "platform/android/src/unaccent.cpp", + "platform/default/src/mbgl/gfx/headless_backend.cpp", + "platform/default/src/mbgl/gfx/headless_frontend.cpp", "platform/default/src/mbgl/gl/headless_backend.cpp", - "platform/default/src/mbgl/gl/headless_frontend.cpp", "platform/default/src/mbgl/map/map_snapshotter.cpp", "platform/default/src/mbgl/text/bidi.cpp", "platform/default/src/mbgl/util/png_writer.cpp", @@ -96,8 +97,9 @@ ], "public_headers": { "jni/string_conversion.hpp": "platform/default/include/jni/string_conversion.hpp", + "mbgl/gfx/headless_backend.hpp": "platform/default/include/mbgl/gfx/headless_backend.hpp", + "mbgl/gfx/headless_frontend.hpp": "platform/default/include/mbgl/gfx/headless_frontend.hpp", "mbgl/gl/headless_backend.hpp": "platform/default/include/mbgl/gl/headless_backend.hpp", - "mbgl/gl/headless_frontend.hpp": "platform/default/include/mbgl/gl/headless_frontend.hpp", "mbgl/map/map_snapshotter.hpp": "platform/default/include/mbgl/map/map_snapshotter.hpp", "mbgl/text/unaccent.hpp": "platform/default/include/mbgl/text/unaccent.hpp" }, diff --git a/platform/default/include/mbgl/gfx/headless_backend.hpp b/platform/default/include/mbgl/gfx/headless_backend.hpp new file mode 100644 index 000000000..de9283dcd --- /dev/null +++ b/platform/default/include/mbgl/gfx/headless_backend.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include +#include +#include + +#include + +namespace mbgl { +namespace gfx { + +// Common headless backend interface, provides HeadlessBackend backend factory +// and enables extending gfx::Renderable with platform specific implementation +// of readStillImage. +class HeadlessBackend : public gfx::Renderable { +public: + // Factory. + static std::unique_ptr make(Size = { 256, 256 }, gfx::ContextMode = gfx::ContextMode::Unique); + + virtual PremultipliedImage readStillImage() = 0; + virtual RendererBackend* getRendererBackend() = 0; + void setSize(Size); + +protected: + HeadlessBackend(Size); +}; + +} // namespace gfx +} // namespace mbgl diff --git a/platform/default/include/mbgl/gl/headless_frontend.hpp b/platform/default/include/mbgl/gfx/headless_frontend.hpp similarity index 92% rename from platform/default/include/mbgl/gl/headless_frontend.hpp rename to platform/default/include/mbgl/gfx/headless_frontend.hpp index 1e693bdef..7f937b34b 100644 --- a/platform/default/include/mbgl/gl/headless_frontend.hpp +++ b/platform/default/include/mbgl/gfx/headless_frontend.hpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include @@ -14,10 +14,6 @@ class Renderer; class Map; class TransformState; -namespace gfx { -class RendererBackend; -} // namespace gfx - class HeadlessFrontend : public RendererFrontend { public: HeadlessFrontend(float pixelRatio_, @@ -58,7 +54,7 @@ private: Size size; float pixelRatio; - gl::HeadlessBackend backend; + std::unique_ptr backend; util::AsyncTask asyncInvalidate; std::unique_ptr renderer; diff --git a/platform/default/include/mbgl/gl/headless_backend.hpp b/platform/default/include/mbgl/gl/headless_backend.hpp index b2141e954..8aefb5ff6 100644 --- a/platform/default/include/mbgl/gl/headless_backend.hpp +++ b/platform/default/include/mbgl/gl/headless_backend.hpp @@ -1,26 +1,21 @@ #pragma once -#include +#include #include - #include #include namespace mbgl { namespace gl { -class HeadlessBackend final : public gl::RendererBackend, public gfx::Renderable { +class HeadlessBackend final : public gl::RendererBackend, public gfx::HeadlessBackend { public: HeadlessBackend(Size = { 256, 256 }, gfx::ContextMode = gfx::ContextMode::Unique); ~HeadlessBackend() override; - - gfx::Renderable& getDefaultRenderable() override; - - Size getFramebufferSize() const; void updateAssumedState() override; - - void setSize(Size); - PremultipliedImage readStillImage(); + gfx::Renderable& getDefaultRenderable() override; + PremultipliedImage readStillImage() override; + RendererBackend* getRendererBackend() override; class Impl { public: @@ -41,8 +36,6 @@ private: private: std::unique_ptr impl; - - float pixelRatio; bool active = false; }; diff --git a/platform/default/src/mbgl/gfx/headless_backend.cpp b/platform/default/src/mbgl/gfx/headless_backend.cpp new file mode 100644 index 000000000..f3eded8dc --- /dev/null +++ b/platform/default/src/mbgl/gfx/headless_backend.cpp @@ -0,0 +1,16 @@ +#include + +namespace mbgl { +namespace gfx { + +HeadlessBackend::HeadlessBackend(Size size_) + : mbgl::gfx::Renderable(size_, nullptr) { +} + +void HeadlessBackend::setSize(Size size_) { + size = size_; + resource.reset(); +} + +} // namespace gfx +} // namespace mbgl diff --git a/platform/default/src/mbgl/gl/headless_frontend.cpp b/platform/default/src/mbgl/gfx/headless_frontend.cpp similarity index 85% rename from platform/default/src/mbgl/gl/headless_frontend.cpp rename to platform/default/src/mbgl/gfx/headless_frontend.cpp index 101028b5c..025abdd87 100644 --- a/platform/default/src/mbgl/gl/headless_frontend.cpp +++ b/platform/default/src/mbgl/gfx/headless_frontend.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include @@ -24,11 +24,11 @@ HeadlessFrontend::HeadlessFrontend(Size size_, const optional localFontFamily) : size(size_), pixelRatio(pixelRatio_), - backend({ static_cast(size.width * pixelRatio), - static_cast(size.height * pixelRatio) }, contextMode), + backend(gfx::HeadlessBackend::make( { static_cast(size.width * pixelRatio), + static_cast(size.height * pixelRatio) }, contextMode)), asyncInvalidate([this] { if (renderer && updateParameters) { - gfx::BackendScope guard { backend }; + gfx::BackendScope guard { *getBackend() }; // onStyleImageMissing might be called during a render. The user implemented method // could trigger a call to MGLRenderFrontend#update which overwrites `updateParameters`. @@ -38,7 +38,7 @@ HeadlessFrontend::HeadlessFrontend(Size size_, renderer->render(*updateParameters_); } }), - renderer(std::make_unique(backend, pixelRatio, programCacheDir, localFontFamily)) { + renderer(std::make_unique(*getBackend(), pixelRatio, programCacheDir, localFontFamily)) { } HeadlessFrontend::~HeadlessFrontend() = default; @@ -68,7 +68,7 @@ Renderer* HeadlessFrontend::getRenderer() { } gfx::RendererBackend* HeadlessFrontend::getBackend() { - return &backend; + return backend->getRendererBackend(); } CameraOptions HeadlessFrontend::getCameraOptions() { @@ -121,13 +121,13 @@ LatLng HeadlessFrontend::latLngForPixel(const ScreenCoordinate& point) { void HeadlessFrontend::setSize(Size size_) { if (size != size_) { size = size_; - backend.setSize({ static_cast(size_.width * pixelRatio), - static_cast(size_.height * pixelRatio) }); + backend->setSize({ static_cast(size_.width * pixelRatio), + static_cast(size_.height * pixelRatio) }); } } PremultipliedImage HeadlessFrontend::readStillImage() { - return backend.readStillImage(); + return backend->readStillImage(); } PremultipliedImage HeadlessFrontend::render(Map& map) { @@ -137,7 +137,7 @@ PremultipliedImage HeadlessFrontend::render(Map& map) { if (error) { std::rethrow_exception(error); } else { - result = backend.readStillImage(); + result = backend->readStillImage(); } }); diff --git a/platform/default/src/mbgl/gl/headless_backend.cpp b/platform/default/src/mbgl/gl/headless_backend.cpp index 7362adcb9..c81952fad 100644 --- a/platform/default/src/mbgl/gl/headless_backend.cpp +++ b/platform/default/src/mbgl/gl/headless_backend.cpp @@ -32,7 +32,7 @@ public: }; HeadlessBackend::HeadlessBackend(const Size size_, const gfx::ContextMode contextMode_) - : mbgl::gl::RendererBackend(contextMode_), mbgl::gfx::Renderable(size_, nullptr) { + : mbgl::gl::RendererBackend(contextMode_), mbgl::gfx::HeadlessBackend(size_) { } HeadlessBackend::~HeadlessBackend() { @@ -72,22 +72,27 @@ gfx::Renderable& HeadlessBackend::getDefaultRenderable() { return *this; } -Size HeadlessBackend::getFramebufferSize() const { - return size; -} - void HeadlessBackend::updateAssumedState() { // no-op } -void HeadlessBackend::setSize(Size size_) { - size = size_; - resource.reset(); -} - PremultipliedImage HeadlessBackend::readStillImage() { return static_cast(getContext()).readFramebuffer(size); } + +RendererBackend* HeadlessBackend::getRendererBackend() { + return this; +} } // namespace gl + +#ifndef OVERRIDE_HEADLESS_BACKEND_FACTORY +// Default factory implementation. +std::unique_ptr gfx::HeadlessBackend::make(Size size, gfx::ContextMode contextMode) { + return std::make_unique(size, contextMode); +} +#endif + } // namespace mbgl + + diff --git a/platform/default/src/mbgl/map/map_snapshotter.cpp b/platform/default/src/mbgl/map/map_snapshotter.cpp index 7bfa2462a..f0b107e77 100644 --- a/platform/default/src/mbgl/map/map_snapshotter.cpp +++ b/platform/default/src/mbgl/map/map_snapshotter.cpp @@ -1,7 +1,7 @@ #include #include -#include +#include #include #include #include diff --git a/platform/ios/core-files.json b/platform/ios/core-files.json index 98833b0c9..93fdfc80b 100644 --- a/platform/ios/core-files.json +++ b/platform/ios/core-files.json @@ -10,8 +10,9 @@ "platform/darwin/src/nsthread.mm", "platform/darwin/src/reachability.m", "platform/darwin/src/string_nsstring.mm", + "platform/default/src/mbgl/gfx/headless_backend.cpp", + "platform/default/src/mbgl/gfx/headless_frontend.cpp", "platform/default/src/mbgl/gl/headless_backend.cpp", - "platform/default/src/mbgl/gl/headless_frontend.cpp", "platform/default/src/mbgl/map/map_snapshotter.cpp", "platform/default/src/mbgl/text/bidi.cpp", "platform/default/src/mbgl/util/png_writer.cpp", @@ -21,8 +22,9 @@ "public_headers": { "mbgl/storage/reachability.h": "platform/darwin/include/mbgl/storage/reachability.h", "mbgl/util/image+MGLAdditions.hpp": "platform/darwin/include/mbgl/util/image+MGLAdditions.hpp", + "mbgl/gfx/headless_backend.hpp": "platform/default/include/mbgl/gfx/headless_backend.hpp", + "mbgl/gfx/headless_frontend.hpp": "platform/default/include/mbgl/gfx/headless_frontend.hpp", "mbgl/gl/headless_backend.hpp": "platform/default/include/mbgl/gl/headless_backend.hpp", - "mbgl/gl/headless_frontend.hpp": "platform/default/include/mbgl/gl/headless_frontend.hpp", "mbgl/map/map_snapshotter.hpp": "platform/default/include/mbgl/map/map_snapshotter.hpp", "mbgl/util/default_styles.hpp": "platform/default/include/mbgl/util/default_styles.hpp" }, diff --git a/platform/linux/config.cmake b/platform/linux/config.cmake index 118dfe696..7cc1f1fe4 100644 --- a/platform/linux/config.cmake +++ b/platform/linux/config.cmake @@ -64,8 +64,10 @@ macro(mbgl_platform_core) PRIVATE platform/default/src/mbgl/util/png_reader.cpp # Headless view - PRIVATE platform/default/src/mbgl/gl/headless_frontend.cpp - PRIVATE platform/default/include/mbgl/gl/headless_frontend.hpp + PRIVATE platform/default/src/mbgl/gfx/headless_frontend.cpp + PRIVATE platform/default/include/mbgl/gfx/headless_frontend.hpp + PRIVATE platform/default/src/mbgl/gfx/headless_backend.cpp + PRIVATE platform/default/include/mbgl/gfx/headless_backend.hpp PRIVATE platform/default/src/mbgl/gl/headless_backend.cpp PRIVATE platform/default/include/mbgl/gl/headless_backend.hpp diff --git a/platform/macos/core-files.json b/platform/macos/core-files.json index abeda5796..a17a48c52 100644 --- a/platform/macos/core-files.json +++ b/platform/macos/core-files.json @@ -9,8 +9,9 @@ "platform/darwin/src/nsthread.mm", "platform/darwin/src/reachability.m", "platform/darwin/src/string_nsstring.mm", + "platform/default/src/mbgl/gfx/headless_backend.cpp", + "platform/default/src/mbgl/gfx/headless_frontend.cpp", "platform/default/src/mbgl/gl/headless_backend.cpp", - "platform/default/src/mbgl/gl/headless_frontend.cpp", "platform/default/src/mbgl/map/map_snapshotter.cpp", "platform/default/src/mbgl/text/bidi.cpp", "platform/default/src/mbgl/util/png_writer.cpp", @@ -20,8 +21,9 @@ "public_headers": { "mbgl/storage/reachability.h": "platform/darwin/include/mbgl/storage/reachability.h", "mbgl/util/image+MGLAdditions.hpp": "platform/darwin/include/mbgl/util/image+MGLAdditions.hpp", + "mbgl/gfx/headless_backend.hpp": "platform/default/include/mbgl/gfx/headless_backend.hpp", + "mbgl/gfx/headless_frontend.hpp": "platform/default/include/mbgl/gfx/headless_frontend.hpp", "mbgl/gl/headless_backend.hpp": "platform/default/include/mbgl/gl/headless_backend.hpp", - "mbgl/gl/headless_frontend.hpp": "platform/default/include/mbgl/gl/headless_frontend.hpp", "mbgl/map/map_snapshotter.hpp": "platform/default/include/mbgl/map/map_snapshotter.hpp" }, "private_headers": { diff --git a/platform/node/src/node_map.cpp b/platform/node/src/node_map.cpp index 0a7da3a83..f88b6c6c7 100644 --- a/platform/node/src/node_map.cpp +++ b/platform/node/src/node_map.cpp @@ -4,7 +4,7 @@ #include "node_conversion.hpp" #include -#include +#include #include #include #include diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake index fb572b807..48523057c 100644 --- a/platform/qt/qt.cmake +++ b/platform/qt/qt.cmake @@ -11,8 +11,10 @@ set(CMAKE_AUTORCC ON) set(MBGL_QT_CORE_FILES # Headless view - PRIVATE platform/default/src/mbgl/gl/headless_frontend.cpp - PRIVATE platform/default/include/mbgl/gl/headless_frontend.hpp + PRIVATE platform/default/src/mbgl/gfx/headless_frontend.cpp + PRIVATE platform/default/include/mbgl/gfx/headless_frontend.hpp + PRIVATE platform/default/src/mbgl/gfx/headless_backend.cpp + PRIVATE platform/default/include/mbgl/gfx/headless_backend.hpp PRIVATE platform/default/src/mbgl/gl/headless_backend.cpp PRIVATE platform/default/include/mbgl/gl/headless_backend.hpp PRIVATE platform/qt/src/headless_backend_qt.cpp diff --git a/test/api/annotations.test.cpp b/test/api/annotations.test.cpp index 2d76a3d15..d7cb572cb 100644 --- a/test/api/annotations.test.cpp +++ b/test/api/annotations.test.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include using namespace mbgl; diff --git a/test/api/api_misuse.test.cpp b/test/api/api_misuse.test.cpp index 54d8eb591..aeb0e4864 100644 --- a/test/api/api_misuse.test.cpp +++ b/test/api/api_misuse.test.cpp @@ -5,7 +5,7 @@ #include #include -#include +#include #include #include diff --git a/test/api/custom_geometry_source.test.cpp b/test/api/custom_geometry_source.test.cpp index df65dc270..f35b4d335 100644 --- a/test/api/custom_geometry_source.test.cpp +++ b/test/api/custom_geometry_source.test.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include #include diff --git a/test/api/custom_layer.test.cpp b/test/api/custom_layer.test.cpp index e9b9aee9b..5afc4152b 100644 --- a/test/api/custom_layer.test.cpp +++ b/test/api/custom_layer.test.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/test/api/query.test.cpp b/test/api/query.test.cpp index b80d3b7d8..bf3f64a0c 100644 --- a/test/api/query.test.cpp +++ b/test/api/query.test.cpp @@ -13,7 +13,7 @@ #include #include #include -#include +#include using namespace mbgl; using namespace mbgl::style; diff --git a/test/api/recycle_map.cpp b/test/api/recycle_map.cpp index 55e19e3cd..b3c573b1a 100644 --- a/test/api/recycle_map.cpp +++ b/test/api/recycle_map.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include #include diff --git a/test/gl/context.test.cpp b/test/gl/context.test.cpp index 756f2c58d..54b0c01d9 100644 --- a/test/gl/context.test.cpp +++ b/test/gl/context.test.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/test/map/map.test.cpp b/test/map/map.test.cpp index ee86ce7f7..42edaedf2 100644 --- a/test/map/map.test.cpp +++ b/test/map/map.test.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/test/map/prefetch.test.cpp b/test/map/prefetch.test.cpp index 071c91842..e1fe1f12f 100644 --- a/test/map/prefetch.test.cpp +++ b/test/map/prefetch.test.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include #include #include #include diff --git a/test/text/local_glyph_rasterizer.test.cpp b/test/text/local_glyph_rasterizer.test.cpp index 4c0719e16..ec8a728e9 100644 --- a/test/text/local_glyph_rasterizer.test.cpp +++ b/test/text/local_glyph_rasterizer.test.cpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include /* diff --git a/test/util/memory.test.cpp b/test/util/memory.test.cpp index 8602e6ac5..bf14c7041 100644 --- a/test/util/memory.test.cpp +++ b/test/util/memory.test.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include #include #include #include