Implement Vulkan surface snapshot (#4314)

This commit is contained in:
Adrian Cojocaru
2026-06-06 02:06:40 +03:00
committed by GitHub
parent 8a393c5b2c
commit 9fa80b37d2
9 changed files with 147 additions and 8 deletions

View File

@@ -31,6 +31,7 @@ public:
virtual void destroySurface() {}
virtual void resizeFramebuffer(int width, int height);
virtual void enableFramebufferRead(bool value) {}
virtual PremultipliedImage readFramebuffer();
gfx::Renderable::SwapBehaviour getSwapBehavior() const { return swapBehaviour; }

View File

@@ -83,9 +83,12 @@ void AndroidVulkanRendererBackend::resizeFramebuffer(int, int) {
}
}
void AndroidVulkanRendererBackend::enableFramebufferRead(bool value) {
getResource<AndroidVulkanRenderableResource>().enableSurfaceRead();
}
PremultipliedImage AndroidVulkanRendererBackend::readFramebuffer() {
// TODO not implemented
return PremultipliedImage(Size(2, 2));
return std::move(*getResource<AndroidVulkanRenderableResource>().readImage());
}
} // namespace android

View File

@@ -24,6 +24,7 @@ public:
std::vector<const char*> getInstanceExtensions() override;
void resizeFramebuffer(int width, int height) override;
void enableFramebufferRead(bool value) override;
PremultipliedImage readFramebuffer() override;
// mbgl::gfx::RendererBackend implementation

View File

@@ -207,6 +207,12 @@ void MapRenderer::resetRenderer() {
void MapRenderer::scheduleSnapshot(std::unique_ptr<SnapshotCallback> callback) {
snapshotCallback = std::move(callback);
if (backend) {
gfx::BackendScope backendGuard{backend->getImpl()};
backend->enableFramebufferRead(true);
}
requestRender();
}