summaryrefslogtreecommitdiff
path: root/platform/default/src/mbgl/gl
diff options
context:
space:
mode:
Diffstat (limited to 'platform/default/src/mbgl/gl')
-rw-r--r--platform/default/src/mbgl/gl/headless_backend.cpp25
-rw-r--r--platform/default/src/mbgl/gl/headless_frontend.cpp159
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