diff --git a/platform/default/include/mbgl/mtl/headless_backend.hpp b/platform/default/include/mbgl/mtl/headless_backend.hpp index af7d1aa7e..95f6523d3 100644 --- a/platform/default/include/mbgl/mtl/headless_backend.hpp +++ b/platform/default/include/mbgl/mtl/headless_backend.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include @@ -17,12 +18,14 @@ public: void updateAssumedState() override; gfx::Renderable& getDefaultRenderable() override; PremultipliedImage readStillImage() override; + MTL::Texture* getMetalTexture(); RendererBackend* getRendererBackend() override; SwapBehaviour getSwapBehaviour(); private: void activate() override; void deactivate() override; + void ensureResource(); private: bool active = false; diff --git a/platform/default/src/mbgl/mtl/headless_backend.cpp b/platform/default/src/mbgl/mtl/headless_backend.cpp index c056234e0..65f0bbcf1 100644 --- a/platform/default/src/mbgl/mtl/headless_backend.cpp +++ b/platform/default/src/mbgl/mtl/headless_backend.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -29,6 +30,10 @@ public: PremultipliedImage readStillImage() { return offscreenTexture->readStillImage(); } + MTL::Texture* getMetalTexture() { + return static_cast(offscreenTexture->getTexture().get())->getMetalTexture(); + } + const RendererBackend& getBackend() const override { return context.getBackend(); } const MTLCommandBufferPtr& getCommandBuffer() const override { @@ -72,10 +77,14 @@ void HeadlessBackend::deactivate() { } gfx::Renderable& HeadlessBackend::getDefaultRenderable() { + ensureResource(); + return *this; +} + +void HeadlessBackend::ensureResource() { if (!resource) { resource = std::make_unique(*this, static_cast(getContext()), size); } - return *this; } void HeadlessBackend::updateAssumedState() { @@ -86,6 +95,11 @@ PremultipliedImage HeadlessBackend::readStillImage() { return getResource().readStillImage(); } +MTL::Texture* HeadlessBackend::getMetalTexture() { + ensureResource(); + return getResource().getMetalTexture(); +} + RendererBackend* HeadlessBackend::getRendererBackend() { return this; }