Files
XCEngine/docs/api/XCEngine/Debug/RenderDocCapture/RenderDocCapture.md

3.4 KiB
Raw Blame History

RenderDocCapture

命名空间: XCEngine::Debug

类型: class (singleton)

头文件: XCEngine/Debug/RenderDocCapture.h

描述: 在 Windows 上动态加载 RenderDoc并为引擎或测试程序提供抓帧入口。

概述

RenderDocCapture 把外部 GPU 调试工具接入到引擎运行流程中。它的价值不在于替代 RenderDoc而在于让测试程序、后端样例和编辑器工具可以用统一代码主动触发捕获。

当前实现的关键事实:

  • 公共头文件直接依赖 windows.h,因此它是明显的 Windows 专用 API。
  • 运行时会尝试从当前可执行文件目录加载 renderdoc.dll
  • 初始化时可以先只传入 window 或者都传 nullptr,稍后再通过 SetDevice / SetWindow 补齐。
  • 抓帧前要求 RenderDoc 已加载,且 devicewindow 都不为空。

当前实现边界

  • 只封装了 RenderDoc 1.7.0 API 中的一小部分函数。
  • Initialize 是幂等的;如果已经初始化,再次调用不会刷新 devicewindow 参数。
  • LaunchReplayUI 的底层 RenderDoc 调用没有返回值XCEngine 只能报告“请求已发出”,不能证明 UI 一定成功启动。
  • SetCaptureComments 当前直接把 nullptr 作为 capture file path 传给 RenderDoc。

线程语义

  • 当前实现没有显式同步机制。
  • 典型使用方式是在创建窗口和图形设备的主线程上完成初始化、抓帧和关闭。
  • BeginCaptureTriggerCapture 会尝试把窗口设为前台并设置焦点,这属于有副作用的 UI 行为。

声明概览

声明 类型 说明
RenderDocCaptureInfo struct 保存单个 capture 的文件名、长度和时间戳。
RenderDocCapture class RenderDoc 封装与抓帧控制入口。

公开方法

方法 说明
Get 获取全局 RenderDocCapture 实例。
Initialize 加载 RenderDoc 并记录设备/窗口句柄。
Shutdown 结束抓帧并卸载 RenderDoc。
SetDevice 更新当前活动图形设备指针。
SetWindow 更新当前活动窗口句柄。
IsLoaded 查询 RenderDoc 是否成功加载。
IsCapturing 查询当前是否处于抓帧中。
GetNumCaptures 查询可访问的 capture 数量。
GetCapture 读取指定 capture 的元数据。
BeginCapture 开始一次手动抓帧。
EndCapture 结束当前抓帧。
TriggerCapture 请求 RenderDoc 触发一次 capture。
SetCaptureFilePath 设置 capture 文件路径模板。
SetCaptureComments 设置 capture 注释。
SetCaptureOptionU32 以原始 option id 设置 U32 选项。
LaunchReplayUI 请求启动 RenderDoc Replay UI。

真实使用位置

当前代码库已经在多个 D3D12 / OpenGL 集成测试中使用它:

  • 先创建窗口。
  • 调用 Initialize(nullptr, hwnd)
  • 图形设备初始化完成后调用 SetDevice(...)
  • 在目标帧前后调用 BeginCapture / EndCapture

相关文档