我发现最近几乎不可能捕捉到金属框架。
对于我自己的应用程序(所有 iOS 应用程序)以及从 Apple 网站 (https://developer.apple.com/metal/sample-code/) 新鲜下载的示例 Metal macOS 和 Metal iOS 应用程序来说都是如此,即使对于最小的 Metal 项目,问题也存在。
- “M”下的“拍摄”按钮是灰色的(并且fps显示0),所以我无法点击它。 (iOS 应用程序和 MacOS 应用程序都会发生。)
- 或者单击“M”表示设备无法连接(仅在 MacOS 应用程序中观察到,但在 M2 Mac 和 Intel/AMD Mac 上都会发生)。
- 如果“捕获”按钮没有变灰,并且我可以单击它,则重播将永远旋转。 (适用于 iOS 应用程序和 macOS 应用程序。)
- 使用 MTLCaptureManager 以编程方式捕获 gputrace 并写入 url 是可行的,但是当我想在 XCode 中重播 .gputrace 文档时,它也不会重播(永远旋转)。 (适用于 iOS 应用程序和 macOS 应用程序。)
- 控制台中有一些错误消息(仅在 iOS 应用程序中观察到),但在我刚刚运行项目时总是出现,所以不确定它是否与捕获/调试有关。
其他(可能)相关信息:
- 应用程序全部在调试配置中运行。
- 应用程序本身完全正常运行,具有预期的 fps,金属 HUD 反映了这一点。
- 直到几周前,我的 Metal 项目(所有 iOS)从未出现过 Metal 调试器和 Capture 的问题,而且我还没有编辑任何方案设置或 pList,因此启用了 Capture。
- 此外,任何 Apple 示例 Metal 应用程序(iOS 或 MacOS)以前从未出现过问题。
- 我的 Mac(一台 M2、一台 Intel/AMD)运行 Xcode,使用 MacOS 14.2.1。
- 我的 iPad(2019、2022)运行 iPadOS 17.2,我的 iPhone12 运行 iOS 17.2.1。
- Mac 使用不同的开发者帐户,因此在这个意义上有“独立”。
- 特别针对 iOS 应用程序:我在各种“组合”中进行了测试(因此两台 Mac 中的一台为三台 iPhone/iPad 设备之一进行编译),但问题仍然存在。单独重新启动设备(iPad 或 iPhone)没有帮助。
- XCode 15.1 和 15.2 中观察到的问题。
- 禁用金属 HUD 没有帮助。
- 通常唯一有帮助的事情(但经过几次编译后问题又回来了)是:
删除 XCode 项目构建文件(缓存、数据和索引)、删除 /Developer/Xcode/DerivedData、重新启动 Mac、从设备中删除应用程序、对于 iOS 应用程序重新启动设备并重新编译。此后,通常帧捕获和重放会成功。如果我跳过其中一个步骤,问题仍然存在。经过几次编译后问题又回来了。仅重新启动 Xcode 没有任何帮助。对于 iOS 应用程序,仅重新启动设备是没有帮助的。
我的问题:如何在 Metal 中捕获帧? (这是一个错误吗?其他人也遇到过这些问题吗?有解决方法吗?)