diff options
Diffstat (limited to 'platform/default/src/mbgl/gl')
-rw-r--r-- | platform/default/src/mbgl/gl/headless_backend.cpp | 25 | ||||
-rw-r--r-- | platform/default/src/mbgl/gl/headless_frontend.cpp | 159 |
2 files changed, 15 insertions, 169 deletions
diff --git a/platform/default/src/mbgl/gl/headless_backend.cpp b/platform/default/src/mbgl/gl/headless_backend.cpp index 7362adcb9e..c81952fadc 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<gl::Context&>(getContext()).readFramebuffer<PremultipliedImage>(size); } + +RendererBackend* HeadlessBackend::getRendererBackend() { + return this; +} } // namespace gl + +#ifndef OVERRIDE_HEADLESS_BACKEND_FACTORY +// Default factory implementation. +std::unique_ptr<gfx::HeadlessBackend> gfx::HeadlessBackend::make(Size size, gfx::ContextMode contextMode) { + return std::make_unique<gl::HeadlessBackend>(size, contextMode); +} +#endif + } // namespace mbgl + + diff --git a/platform/default/src/mbgl/gl/headless_frontend.cpp b/platform/default/src/mbgl/gl/headless_frontend.cpp deleted file mode 100644 index 101028b5c8..0000000000 --- a/platform/default/src/mbgl/gl/headless_frontend.cpp +++ /dev/null @@ -1,159 +0,0 @@ -#include <mbgl/gl/headless_frontend.hpp> -#include <mbgl/gfx/backend_scope.hpp> -#include <mbgl/renderer/renderer.hpp> -#include <mbgl/renderer/renderer_state.hpp> -#include <mbgl/renderer/update_parameters.hpp> -#include <mbgl/map/map.hpp> -#include <mbgl/map/transform_state.hpp> -#include <mbgl/util/run_loop.hpp> - -namespace mbgl { - -HeadlessFrontend::HeadlessFrontend(float pixelRatio_, - const optional<std::string> programCacheDir, - const gfx::ContextMode contextMode, - const optional<std::string> localFontFamily) - : HeadlessFrontend( - { 256, 256 }, pixelRatio_, programCacheDir, contextMode, localFontFamily) { -} - -HeadlessFrontend::HeadlessFrontend(Size size_, - float pixelRatio_, - const optional<std::string> programCacheDir, - const gfx::ContextMode contextMode, - const optional<std::string> localFontFamily) - : size(size_), - pixelRatio(pixelRatio_), - backend({ static_cast<uint32_t>(size.width * pixelRatio), - static_cast<uint32_t>(size.height * pixelRatio) }, contextMode), - asyncInvalidate([this] { - if (renderer && updateParameters) { - gfx::BackendScope guard { backend }; - - // onStyleImageMissing might be called during a render. The user implemented method - // could trigger a call to MGLRenderFrontend#update which overwrites `updateParameters`. - // Copy the shared pointer here so that the parameters aren't destroyed while `render(...)` is - // still using them. - auto updateParameters_ = updateParameters; - renderer->render(*updateParameters_); - } - }), - renderer(std::make_unique<Renderer>(backend, pixelRatio, programCacheDir, localFontFamily)) { -} - -HeadlessFrontend::~HeadlessFrontend() = default; - -void HeadlessFrontend::reset() { - assert(renderer); - renderer.reset(); -} - -void HeadlessFrontend::update(std::shared_ptr<UpdateParameters> updateParameters_) { - updateParameters = updateParameters_; - asyncInvalidate.send(); -} - -void HeadlessFrontend::setObserver(RendererObserver& observer_) { - assert(renderer); - renderer->setObserver(&observer_); -} - -Size HeadlessFrontend::getSize() const { - return size; -} - -Renderer* HeadlessFrontend::getRenderer() { - assert(renderer); - return renderer.get(); -} - -gfx::RendererBackend* HeadlessFrontend::getBackend() { - return &backend; -} - -CameraOptions HeadlessFrontend::getCameraOptions() { - if (updateParameters) - return RendererState::getCameraOptions(*updateParameters); - - static CameraOptions nullCamera; - return nullCamera; -} - -bool HeadlessFrontend::hasImage(const std::string& id) { - if (updateParameters) { - return RendererState::hasImage(*updateParameters, id); - } - - return false; -} - -bool HeadlessFrontend::hasLayer(const std::string& id) { - if (updateParameters) { - return RendererState::hasLayer(*updateParameters, id); - } - - return false; -} - -bool HeadlessFrontend::hasSource(const std::string& id) { - if (updateParameters) { - return RendererState::hasSource(*updateParameters, id); - } - - return false; -} -ScreenCoordinate HeadlessFrontend::pixelForLatLng(const LatLng& coordinate) { - if (updateParameters) { - return RendererState::pixelForLatLng(*updateParameters, coordinate); - } - - return ScreenCoordinate {}; -} - -LatLng HeadlessFrontend::latLngForPixel(const ScreenCoordinate& point) { - if (updateParameters) { - return RendererState::latLngForPixel(*updateParameters, point); - } - - return LatLng {}; -} - -void HeadlessFrontend::setSize(Size size_) { - if (size != size_) { - size = size_; - backend.setSize({ static_cast<uint32_t>(size_.width * pixelRatio), - static_cast<uint32_t>(size_.height * pixelRatio) }); - } -} - -PremultipliedImage HeadlessFrontend::readStillImage() { - return backend.readStillImage(); -} - -PremultipliedImage HeadlessFrontend::render(Map& map) { - PremultipliedImage result; - - map.renderStill([&](std::exception_ptr error) { - if (error) { - std::rethrow_exception(error); - } else { - result = backend.readStillImage(); - } - }); - - while (!result.valid()) { - util::RunLoop::Get()->runOnce(); - } - - return result; -} - -optional<TransformState> HeadlessFrontend::getTransformState() const { - if (updateParameters) { - return updateParameters->transformState; - } else { - return {}; - } -} - -} // namespace mbgl |