复制金属帧缓冲区纹理以供读取

Copy Metal frame buffer texture for reading

我正在尝试截取 MetalKit 视图 (MTKView) 的屏幕截图,就像答案 一样,但它要求 MTKView 将 framebufferOnly 设置为 false,这会根据 Apple 禁用一些优化。

有没有办法复制 MTKView 纹理(例如 view.currentDrawable.texture)以便我可以读取像素?我不需要经常截屏,所以禁用程序整个生命周期的优化会很遗憾 运行。

我尝试使用 MTLTexture.newTextureViewWithPixelFormat 和 blit 缓冲区,但我仍然得到关于帧缓冲区仅是 true 的相同异常。

请求屏幕截图时,您可以切换 framebufferOnly,执行一次渲染过程,然后再切换回来。

或者,您可以针对您自己指定的纹理执行一个渲染过程,将其 blit 到可绘制对象的纹理(以免在视觉上丢失一帧),然后保存您自己的纹理的内容。