AMD Frame Latency Meter (FLM)
AMD Frame Latency Meter (FLM) 测量工具对于任何想要测量游戏响应时间(带鼠标事件)的人来说都是必不可少的。
RenderDoc 是一个出色的图形应用程序调试工具,对许多图形 API 都有广泛的支持。然而,有时 RenderDoc 无法弄清楚你在做什么。例如:我最近在调试一个着色器编译器问题,为此我使用了一个只进行一次提交和一次调度的简单测试程序。这不像任何游戏的样子,没有真正的帧开始或结束,我实际上只关心捕获调度,那么我该如何告诉 RenderDoc 我在做什么呢?
幸运的是,这很容易实现,这要归功于 RenderDoc API。它只需要一些小的代码改动,无需额外的链接步骤,并且在不使用 RenderDoc 时不会影响任何其他内容。我们需要做什么?很简单:如果我们启用了 RenderDoc,`renderdoc.dll` 文件就会存在,因此我们可以从此文件中查询 API。然后我们使用它手动启动/停止捕获。如果你已经阅读了 API 文档,那么你可能已经准备就绪,如果你还没有,请继续阅读 😊
实际上非常简单,你只需要获取 RenderDoc API 指针,一旦获取到,就可以使用 API 来控制 RenderDoc。对于 API,你需要包含头文件(它位于你的 RenderDoc 安装目录中),从那里开始就一切顺利了。
RENDERDOC_API_1_0_0* GetRenderDocApi(){ RENDERDOC_API_1_0_0* rdoc = nullptr; HMODULE module = GetModuleHandleA("renderdoc.dll");
if (module == NULL) { return nullptr; }
pRENDERDOC_GetAPI getApi = nullptr; getApi = (pRENDERDOC_GetAPI)GetProcAddress(module, "RENDERDOC_GetAPI");
if (getApi == nullptr) { return nullptr; }
if (getApi(eRENDERDOC_API_Version_1_0_0, (void**)&rdoc) != 1) { return nullptr; }
return rdoc;}你可以在应用程序的任何时候执行此操作。一旦你的设备准备就绪,就可以使用以下命令触发捕获:
if (rdoc){ rdoc->StartFrameCapture(nullptr, nullptr);}并使用以下命令停止:
if (rdoc){ rdoc->EndFrameCapture(nullptr, nullptr);}请注意,如果你的应用程序运行速度超快,就像我的应用程序一样——只运行了几毫秒——那么 UI 可能跟不上。一个简单的解决方法是在退出前等待按键。这只是 RenderDoc API 可以做的事情的开始。请务必查看文档以获取更多详细信息和高级用例!