适用于iOS应用的“捕获GPU帧”第一帧

适用于iOS应用的“捕获GPU帧”第一帧,第1张

概述我的应用程序在第一帧上执行了几次渲染 *** 作(我正在使用Metal,尽管我认为这同样适用于GLES).例如,它渲染到后续帧中使用的目标,但之后不会更新.我试图从这些渲染 *** 作调试一些绘制调用,我想使用’GPU Capture Frame’功能来实现.我过去使用它来进行按需GPU帧调试,它非常有用. 不幸的是,我似乎找不到捕获第一帧的方法.例如,在调试器中断开时(在第一帧之前设置断点),此选项不可用.调试 我的应用程序在第一帧上执行了几次渲染 *** 作(我正在使用Metal,尽管我认为这同样适用于GLES).例如,它渲染到后续帧中使用的目标,但之后不会更新.我试图从这些渲染 *** 作调试一些绘制调用,我想使用’GPU Capture Frame’功能来实现.我过去使用它来进行按需GPU帧调试,它非常有用.

不幸的是,我似乎找不到捕获第一帧的方法.例如,在调试器中断开时(在第一帧之前设置断点),此选项不可用.调试开始后,Xcode行为似乎也不允许捕获帧.在Metal API或cametallayer中,似乎甚至没有用于执行GPU捕获的API.

有人成功完成了吗?

解决方法 我再次遇到这个问题,并且现在正确地想出来了.我将此作为单独的答案添加,因为它与我的其他答案完全不同.

首先,一些背景.捕获GPU帧有三个组件:

>告诉要捕获GPU帧的Xcode.在典型的文档化使用中,您可以通过单击Xco​​de中的GPU Frame Capture“相机”按钮手动执行此 *** 作.
>指示要捕获的下一帧的开始.通常,这发生在MTLCommandBuffer presentDrawable:的下一次出现时,它被调用以将帧缓冲区呈现给基础视图.
>指示正在捕获的帧的结尾.通常,这发生在MTLCommandBuffer presentDrawable的下一次出现的情况下:

在捕获第一帧或第一帧之前的活动时,只有第三帧可用,因此我们需要另一种方法来执行前两项:

>要告诉Xcode开始捕获帧,在代码中的一行中在Xcode中添加一个断点,在您想要开始捕获帧的点之前的某个位置.右键单击断点,从d出菜单中选择“编辑断点…”,然后将“捕获GPU帧” *** 作添加到断点:


>要指示要捕获的帧的开始,在第一次出现MTLCommandBuffer presentDrawable:之前,您可以使用MTLCommandQueue insertDeBUGCaptureBoundary方法.例如,您可以在实例化MTLCommandQueue时立即调用此方法,以立即开始捕获提交到队列的所有内容.确保在调用此代码之前触发第1项中的断点.
>要指示捕获帧的结束,您可以依赖于MTLCommandBuffer presentDrawable:的第一次正常出现,或者您可以添加第二次调用MTLCommandQueue insertDeBUGCaptureBoundary.

最后,MTLCommandQueue insertDeBUGCaptureBoundary方法实际上并不会导致捕获帧.它只是标记了一个边界点,因此您可以将其保留在代码中以供将来调试使用.如果您希望它从生产代码中删除,请将其包含在DEBUG编译条件中.

总结

以上是内存溢出为你收集整理的适用于iOS应用的“捕获GPU帧”第一帧全部内容,希望文章能够帮你解决适用于iOS应用的“捕获GPU帧”第一帧所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1016067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存