截帧工具在渲染子进程中的使用
记录一下渲染子进程中的截帧工具的使用,记录原因是,一开始并不顺利。目标程序是一个launcher进程,然后需要截帧的是子进程,渲染时OpenGL的,话说几个月前,通过RenderDoc的Capture Child Processes配置是成功截取过的,但是这次失效了,连同Nsight Graphics也遇到了问题。经过一些摸索,最终在两个工具中都能顺利截帧,在此记录一下。
RenderDoc
RenderDoc设置Capture Child Processes,但是启动子进程一直失败,先是尝试使用File>Attach
to runing Instance未奏效,然后尝试进程注入。

RenderDoc提供了两种注入方式,一种是手动注入(Enable process injection),通过File>Inject into Process;第二种是全局hooking(Allow global process hooking),界面上提示了这种方式的风险,但是成功了,设置了全局hook之后,直接启动可执行程序,然后通过Attach方式连接。
Nsight Graphics
Nsight Graphics可能作为nVidia的工具,确实在启动程序上更胜一筹,但是子进程中截帧之后,截帧倒是能够截帧,但并没有顺利进入API Inspector窗口。最后查AI,虽然AI给的指引都是瞎编的,但是提醒了我可能需要通过Attach的方式连接。

注意Automatically Connect要设置为No。启动目标进程,然后再通过Attach功能,连接进程,就能够顺利截帧分析了。
总结
Nsight Graphics虽然很强,RenderDoc也有很多可取之处,自我感觉RenderDoc的要简洁直观一些。比如Pixel
History功能,在RenderDoc里就更可靠一些,且提示信息更简洁,Nsight Graphics显示好像UI里没有展示全部的pixel历史,如果我的操作没问题的话。网上有说Nsight
Graphics 对 OpenGL 的 Pixel History 不如 D3D11/D3D12/Vulkan
完善,可能OpenGL真到了快完全被抛弃的时候了。