加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 17:43:50 所属栏目:百科 来源:网络整理
导读:我的应用程序在第一帧上执行了几次渲染操作(我正在使用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中添加一个断点,在您想要开始捕获帧的点之前的某个位置.右键单击断点,从弹出菜单中选择“编辑断点…”,然后将“捕获GPU帧”操作添加到断点:

enter image description here


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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读