Implement Vulkan surface snapshot (#4314)
This commit is contained in:
@@ -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; }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user