iOS   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了适用于iOS应用的“捕获GPU帧”第一帧大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

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

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

有人成功完成了吗?

@L_450_7@

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

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

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

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

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

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


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

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

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。