适用于iOS应用的“捕获GPU帧”第一帧
我的应用程序在第一帧上执行了几次渲染操作(我正在使用Metal,尽管我认为这同样适用于GLES).例如,它渲染到后续帧中使用的目标,但之后不会更新.我试图从这些渲染操作调试一些绘制调用,我想使用’GPU Capture Frame’功能来实现.我过去使用它来进行按需GPU帧调试,它非常有用.
不幸的是,我似乎找不到捕获第一帧的方法.例如,在调试器中断开时(在第一帧之前设置断点),此选项不可用.调试开始后,Xcode行为似乎也不允许捕获帧.在Metal API或CAMetalLayer中,似乎甚至没有用于执行GPU捕获的API. 有人成功完成了吗? 解决方法
我再次遇到这个问题,并且现在正确地想出来了.我将此作为单独的答案添加,因为它与我的其他答案完全不同.
首先,一些背景.捕获GPU帧有三个组件: >告诉要捕获GPU帧的Xcode.在典型的文档化使用中,您可以通过单击Xco??de中的GPU Frame Capture“相机”按钮手动执行此操作. 在捕获第一帧或第一帧之前的活动时,只有第三帧可用,因此我们需要另一种方法来执行前两项: >要告诉Xcode开始捕获帧,在代码中的一行中在Xcode中添加一个断点,在您想要开始捕获帧的点之前的某个位置.右键单击断点,从弹出菜单中选择“编辑断点…”,然后将“捕获GPU帧”操作添加到断点: >要指示要捕获的帧的开始,在第一次出现MTLCommandBuffer presentDrawable:之前,您可以使用MTLCommandQueue insertDebugCaptureBoundary方法.例如,您可以在实例化MTLCommandQueue时立即调用此方法,以立即开始捕获提交到队列的所有内容.确保在调用此代码之前触发第1项中的断点. >要指示捕获帧的结束,您可以依赖于MTLCommandBuffer presentDrawable:的第一次正常出现,或者您可以添加第二次调用MTLCommandQueue insertDebugCaptureBoundary. 最后,MTLCommandQueue insertDebugCaptureBoundary方法实际上并不会导致捕获帧.它只是标记了一个边界点,因此您可以将其保留在代码中以供将来调试使用.如果您希望它从生产代码中删除,请将其包含在DEBUG编译条件中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |