swift - 复制金属帧缓冲纹理以供阅读
问题描述
我正在尝试截取 MetalKit 视图 (MTKView) 的屏幕截图,如答案Take a snapshot of current screen with Metal in swift但它要求 MTKView 将 framebufferOnly 设置为 false,这会根据 Apple 禁用一些优化。
有没有办法复制 MTKView 纹理(例如 view.currentDrawable.texture)以便我可以读取像素?我不需要经常截图,所以禁用程序运行的整个生命周期的优化将是一种耻辱。
我尝试使用 MTLTexture.newTextureViewWithPixelFormat 和 blit 缓冲区,但我仍然得到相同的异常,即帧缓冲区仅是真的。
解决方案
当请求截屏时,您可以切换framebufferOnly
,执行一个渲染通道,然后将其切换回来。
或者,您可以针对您自己规范的纹理执行一次渲染传递,将其blit 到可绘制的纹理(以免在视觉上丢帧),然后保存您自己的纹理的内容。
推荐阅读
- django - Django以特定数字开头的ID?
- magento - 如何使子菜单保持在顶部?
- javascript - 将 React Element 附加到正文的正确方法是什么?
- c# - 如何使用元组实现此代码?
- python - 如何在我的网页上使用我的数据框中的列名和唯一值生成动态选择字段?
- python - 如何迭代更新字典的值并将每个表示添加到列表中
- powershell - 尽管有正在运行的服务,Docker 容器仍会退出
- python - 比较不同曲线的均方误差
- rust - 检查 Rust 是否正在运行测试构建
- python - 如何在 Power BI 中使用 Python 脚本实现插补?