docs: rebuild Debug API content

This commit is contained in:
2026-03-26 17:21:44 +08:00
parent 122495e581
commit 2e2316aa55
69 changed files with 2371 additions and 1092 deletions

View File

@@ -1,31 +1,52 @@
# RenderDocCapture::BeginCapture
公开方法,详见头文件声明
开始一次手动 RenderDoc 抓帧
```cpp
bool BeginCapture(const char* title = nullptr);
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
- `title` - 参数语义详见头文件声明。
当前实现会在开始抓帧前依次检查:
**返回:** `bool` - 返回值语义详见头文件声明
1. RenderDoc 是否已加载
2. 当前是否已经处于抓帧中。
3. `m_device``m_window` 是否都非空。
**示例:**
任一条件不满足时都会记录警告并返回 `false`
如果检查通过,当前实现会:
- 如果 `title` 非空,则调用 `SetCaptureTitle(title)`
- 调用 `SetForegroundWindow``SetFocus`,把目标窗口切到前台。
- 调用 `SetActiveWindow(m_device, m_window)`
- 调用 `StartFrameCapture(m_device, m_window)`
## 参数
- `title` - 可选的 capture 标题。
## 返回值
- `bool` - `true` 表示已向 RenderDoc 发出开始抓帧请求;`false` 表示前置条件不满足。
## 线程语义
- 建议在拥有目标窗口与图形设备上下文的主线程调用。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
using namespace XCEngine::Debug;
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::BeginCapture(...)。
(void)object;
if (RenderDocCapture::Get().BeginCapture("D3D12_Triangle_Test")) {
Logger::Get().Info(LogCategory::RenderDoc, "Capture started");
}
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [EndCapture](EndCapture.md)
- [Initialize](Initialize.md)

View File

@@ -1,30 +1,48 @@
# RenderDocCapture::EndCapture
公开方法,详见头文件声明
结束当前正在进行的 RenderDoc 抓帧
```cpp
bool EndCapture();
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:** 无。
当前实现会先检查:
**返回:** `bool` - 返回值语义详见头文件声明
- RenderDoc 是否已加载
- 当前是否确实处于抓帧状态。
**示例:**
如果任一条件不成立,会记录警告并返回 `false`。条件成立时会调用:
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
m_api->EndFrameCapture(m_device, m_window);
```
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::EndCapture(...)
(void)object;
## 参数
-
## 返回值
- `bool` - `true` 表示已发出结束抓帧请求;`false` 表示当前没有可结束的抓帧。
## 线程语义
- 应与 [BeginCapture](BeginCapture.md) 在同一渲染工作流中配对调用。
## 示例
```cpp
if (XCEngine::Debug::RenderDocCapture::Get().EndCapture()) {
XCEngine::Debug::Logger::Get().Info(
XCEngine::Debug::LogCategory::RenderDoc,
"Capture ended"
);
}
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [BeginCapture](BeginCapture.md)

View File

@@ -1,29 +1,35 @@
# RenderDocCapture::Get
获取相关状态或对象
获取进程级全局 `RenderDocCapture` 实例
```cpp
static RenderDocCapture& Get();
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
当前实现使用函数内静态对象保存单例。`Get()` 本身不会加载 RenderDoc也不会自动设置 `device``window`
**返回:** `RenderDocCapture&` - 返回值语义详见头文件声明。
## 参数
**示例:**
- 无。
## 返回值
- `RenderDocCapture&` - 全局 RenderDoc 封装对象引用。
## 线程语义
- 单例构造由 C++ 保证线程安全;后续抓帧 API 仍建议在主线程统一使用。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
void Example() {
auto& instance = XCEngine::Debug::RenderDocCapture::Get();
(void)instance;
}
auto& capture = XCEngine::Debug::RenderDocCapture::Get();
capture.Initialize(nullptr, hwnd);
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [Initialize](Initialize.md)

View File

@@ -1,32 +1,52 @@
# RenderDocCapture::GetCapture
获取相关状态或对象
读取指定 capture 的元数据
```cpp
bool GetCapture(uint32_t index, RenderDocCaptureInfo* info) const;
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
- `index` - 参数语义详见头文件声明。
- `info` - 参数语义详见头文件声明。
当前实现要求:
**返回:** `bool` - 返回值语义详见头文件声明
- RenderDoc 已加载
- `info` 非空。
**示例:**
满足条件后,它会调用底层 RenderDoc API把结果写入 `info->filename``info->length``info->timestamp`。如果底层返回值等于 `1`,则方法返回 `true`
注意当前包装层的一个实现细节:
- `RenderDocCaptureInfo::filename` 是固定 256 字节数组。
- XCEngine 直接把这块缓冲区传给 RenderDoc。
因此调用方不应假设超长路径总能被完整保留。
## 参数
- `index` - capture 索引。
- `info` - 输出缓冲区,成功时会被填充。
## 返回值
- `bool` - `true` 表示成功读取该 capture 的元数据。
## 线程语义
- 无显式同步;通常在抓帧结束后的主线程诊断阶段调用。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
using namespace XCEngine::Debug;
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::GetCapture(...)。
(void)object;
RenderDocCaptureInfo info{};
if (RenderDocCapture::Get().GetCapture(0, &info)) {
Logger::Get().Info(LogCategory::RenderDoc, info.filename);
}
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [GetNumCaptures](GetNumCaptures.md)

View File

@@ -1,30 +1,34 @@
# RenderDocCapture::GetNumCaptures
获取相关状态或对象
查询当前可访问的 capture 数量
```cpp
uint32_t GetNumCaptures() const;
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
如果 RenderDoc 尚未加载,当前实现返回 `0`。否则直接转发到底层 `GetNumCaptures()`
**返回:** `uint32_t` - 返回值语义详见头文件声明。
## 参数
**示例:**
- 无。
## 返回值
- `uint32_t` - 当前 capture 数量RenderDoc 未加载时为 `0`
## 线程语义
- 无显式同步;通常在主线程诊断阶段调用。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::GetNumCaptures(...)。
(void)object;
}
uint32_t count = XCEngine::Debug::RenderDocCapture::Get().GetNumCaptures();
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [GetCapture](GetCapture.md)

View File

@@ -1,32 +1,54 @@
# RenderDocCapture::Initialize
初始化内部状态
加载 `renderdoc.dll` 并初始化当前抓帧上下文
```cpp
bool Initialize(void* device = nullptr, void* window = nullptr);
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
- `device` - 参数语义详见头文件声明。
- `window` - 参数语义详见头文件声明。
当前实现是幂等的:
**返回:** `bool` - 返回值语义详见头文件声明
- 如果已经初始化,直接返回 `true`
- 注意:在“已经初始化”的情况下,新的 `device``window` 参数不会写回内部状态。
**示例:**
首次初始化时,当前实现会:
1. 保存 `device``window` 指针。
2. 在可执行文件所在目录查找并加载 `renderdoc.dll`
3. 获取 RenderDoc 1.7.0 API。
4. 额外设置三个默认 U32 capture 选项:`2``8``9` 都设为 `1`
5. 记录一条初始化成功日志。
当前 API 允许在初始化时传空指针;这种情况下只要 DLL 可用,初始化仍可成功,但之后 [BeginCapture](BeginCapture.md) 仍要求设备和窗口已补齐。
## 参数
- `device` - 可选的图形设备指针。
- `window` - 可选的窗口句柄。
## 返回值
- `bool` - `true` 表示 RenderDoc 已成功加载并可继续配置;`false` 表示加载或 API 获取失败。
## 线程语义
- 建议在创建窗口后、图形后端初始化期间由主线程调用。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
using namespace XCEngine::Debug;
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::Initialize(...)。
(void)object;
if (RenderDocCapture::Get().Initialize(nullptr, hwnd)) {
RenderDocCapture::Get().SetDevice(devicePtr);
}
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [SetDevice](SetDevice.md)
- [SetWindow](SetWindow.md)
- [RenderDoc Capture Workflow](../../../_guides/Debug/RenderDoc-Capture-Workflow.md)

View File

@@ -1,30 +1,36 @@
# RenderDocCapture::IsCapturing
查询当前状态。
查询当前是否处于 RenderDoc 抓帧状态。
```cpp
bool IsCapturing() const;
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
如果 RenderDoc 尚未加载或 API 指针无效,当前实现返回 `false`。否则会调用底层 `IsFrameCapturing()`,并把非零结果解释为 `true`
**返回:** `bool` - 返回值语义详见头文件声明。
## 参数
**示例:**
- 无。
## 返回值
- `bool` - `true` 表示当前正在抓帧。
## 线程语义
- 无显式同步;通常与 [BeginCapture](BeginCapture.md) / [EndCapture](EndCapture.md) 在同一线程使用。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::IsCapturing(...)。
(void)object;
if (XCEngine::Debug::RenderDocCapture::Get().IsCapturing()) {
// ...
}
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [IsLoaded](IsLoaded.md)

View File

@@ -1,30 +1,36 @@
# RenderDocCapture::IsLoaded
查询当前状态
查询 RenderDoc 是否已成功加载
```cpp
bool IsLoaded() const;
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
这是一个内联查询函数,直接返回内部布尔值 `m_isLoaded`。它不验证 `device``window` 或当前是否处于抓帧状态,因此“已加载”只表示 RenderDoc API 已获取成功
**返回:** `bool` - 返回值语义详见头文件声明。
## 参数
**示例:**
- 无。
## 返回值
- `bool` - `true` 表示 RenderDoc DLL 和 API 已可用。
## 线程语义
- 只读查询;当前实现没有额外同步。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::IsLoaded(...)。
(void)object;
if (!XCEngine::Debug::RenderDocCapture::Get().IsLoaded()) {
// RenderDoc unavailable
}
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [Initialize](Initialize.md)

View File

@@ -1,32 +1,40 @@
# RenderDocCapture::LaunchReplayUI
公开方法,详见头文件声明
请求启动 RenderDoc Replay UI
```cpp
bool LaunchReplayUI(uint32_t connect = 1, const char* cmdline = nullptr);
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
- `connect` - 参数语义详见头文件声明。
- `cmdline` - 参数语义详见头文件声明。
如果 RenderDoc 尚未加载,当前实现会记录警告并返回 `false`。否则会直接调用底层 `LaunchReplayUI(connect, cmdline)` 并返回 `true`
**返回:** `bool` - 返回值语义详见头文件声明。
注意:
**示例:**
- 底层 RenderDoc 函数本身没有返回值。
- 因此 XCEngine 无法确认 Replay UI 最终是否真的成功启动。
## 参数
- `connect` - 是否尝试连接到目标实例。
- `cmdline` - 传给 Replay UI 的可选命令行。
## 返回值
- `bool` - `true` 表示已发出启动请求;`false` 表示 RenderDoc 未加载。
## 线程语义
- 建议在工具线程或主线程的诊断分支中调用。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::LaunchReplayUI(...)。
(void)object;
}
XCEngine::Debug::RenderDocCapture::Get().LaunchReplayUI();
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [GetCapture](GetCapture.md)

View File

@@ -6,41 +6,70 @@
**头文件**: `XCEngine/Debug/RenderDocCapture.h`
**描述**: 定义 `XCEngine/Debug` 子目录中的 `RenderDocCapture` public API
**描述**: 在 Windows 上动态加载 RenderDoc并为引擎或测试程序提供抓帧入口
## 概述
`RenderDocCapture.h` `XCEngine/Debug` 子目录 下的 public header当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明
`RenderDocCapture` 把外部 GPU 调试工具接入到引擎运行流程中。它的价值不在于替代 RenderDoc而在于让测试程序、后端样例和编辑器工具可以用统一代码主动触发捕获
当前实现的关键事实:
- 公共头文件直接依赖 `windows.h`,因此它是明显的 Windows 专用 API。
- 运行时会尝试从当前可执行文件目录加载 `renderdoc.dll`
- 初始化时可以先只传入 `window` 或者都传 `nullptr`,稍后再通过 [SetDevice](SetDevice.md) / [SetWindow](SetWindow.md) 补齐。
- 抓帧前要求 RenderDoc 已加载,且 `device``window` 都不为空。
## 当前实现边界
- 只封装了 RenderDoc 1.7.0 API 中的一小部分函数。
- `Initialize` 是幂等的;如果已经初始化,再次调用不会刷新 `device``window` 参数。
- `LaunchReplayUI` 的底层 RenderDoc 调用没有返回值XCEngine 只能报告“请求已发出”,不能证明 UI 一定成功启动。
- `SetCaptureComments` 当前直接把 `nullptr` 作为 capture file path 传给 RenderDoc。
## 线程语义
- 当前实现没有显式同步机制。
- 典型使用方式是在创建窗口和图形设备的主线程上完成初始化、抓帧和关闭。
- `BeginCapture``TriggerCapture` 会尝试把窗口设为前台并设置焦点,这属于有副作用的 UI 行为。
## 声明概览
| 声明 | 类型 | 说明 |
|------|------|------|
| `RenderDocCaptureInfo` | `struct` | 头文件中的公开声明。 |
| `RenderDocCapture` | `class` | 头文件中的公开声明。 |
| `RenderDocCaptureInfo` | `struct` | 保存单个 capture 的文件名、长度和时间戳。 |
| `RenderDocCapture` | `class` | RenderDoc 封装与抓帧控制入口。 |
## 公方法
## 公方法
| 方法 | 描述 |
| 方法 | 说明 |
|------|------|
| [Get](Get.md) | 获取相关状态或对象。 |
| [Initialize](Initialize.md) | 初始化内部状态。 |
| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 |
| [SetDevice](SetDevice.md) | 设置相关状态或配置。 |
| [SetWindow](SetWindow.md) | 设置相关状态或配置。 |
| [IsLoaded](IsLoaded.md) | 查询当前状态。 |
| [IsCapturing](IsCapturing.md) | 查询当前状态。 |
| [GetNumCaptures](GetNumCaptures.md) | 获取相关状态或对象。 |
| [GetCapture](GetCapture.md) | 获取相关状态或对象。 |
| [BeginCapture](BeginCapture.md) | 公开方法,详见头文件声明。 |
| [EndCapture](EndCapture.md) | 公开方法,详见头文件声明。 |
| [TriggerCapture](TriggerCapture.md) | 公开方法,详见头文件声明。 |
| [SetCaptureFilePath](SetCaptureFilePath.md) | 设置相关状态或配置。 |
| [SetCaptureComments](SetCaptureComments.md) | 设置相关状态或配置。 |
| [SetCaptureOptionU32](SetCaptureOptionU32.md) | 设置相关状态或配置。 |
| [LaunchReplayUI](LaunchReplayUI.md) | 公开方法,详见头文件声明。 |
| [Get](Get.md) | 获取全局 `RenderDocCapture` 实例。 |
| [Initialize](Initialize.md) | 加载 RenderDoc 并记录设备/窗口句柄。 |
| [Shutdown](Shutdown.md) | 结束抓帧并卸载 RenderDoc。 |
| [SetDevice](SetDevice.md) | 更新当前活动图形设备指针。 |
| [SetWindow](SetWindow.md) | 更新当前活动窗口句柄。 |
| [IsLoaded](IsLoaded.md) | 查询 RenderDoc 是否成功加载。 |
| [IsCapturing](IsCapturing.md) | 查询当前是否处于抓帧中。 |
| [GetNumCaptures](GetNumCaptures.md) | 查询可访问的 capture 数量。 |
| [GetCapture](GetCapture.md) | 读取指定 capture 的元数据。 |
| [BeginCapture](BeginCapture.md) | 开始一次手动抓帧。 |
| [EndCapture](EndCapture.md) | 结束当前抓帧。 |
| [TriggerCapture](TriggerCapture.md) | 请求 RenderDoc 触发一次 capture。 |
| [SetCaptureFilePath](SetCaptureFilePath.md) | 设置 capture 文件路径模板。 |
| [SetCaptureComments](SetCaptureComments.md) | 设置 capture 注释。 |
| [SetCaptureOptionU32](SetCaptureOptionU32.md) | 以原始 option id 设置 U32 选项。 |
| [LaunchReplayUI](LaunchReplayUI.md) | 请求启动 RenderDoc Replay UI。 |
## 真实使用位置
当前代码库已经在多个 D3D12 / OpenGL 集成测试中使用它:
- 先创建窗口。
- 调用 `Initialize(nullptr, hwnd)`
- 图形设备初始化完成后调用 `SetDevice(...)`
- 在目标帧前后调用 `BeginCapture` / `EndCapture`
## 相关文档
- [当前目录](../Debug.md) - 返回 `Debug` 平行目录
- [API 总索引](../../../main.md) - 返回顶层索引
- [当前模块](../Debug.md)
- [RenderDoc Capture Workflow](../../../_guides/Debug/RenderDoc-Capture-Workflow.md)

View File

@@ -1,31 +1,40 @@
# RenderDocCapture::SetCaptureComments
设置相关状态或配置
设置 capture 注释文本
```cpp
void SetCaptureComments(const char* comments);
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
- `comments` - 参数语义详见头文件声明。
**返回:** `void` - 无返回值。
**示例:**
如果 RenderDoc 尚未加载,当前实现直接返回。否则会调用:
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
m_api->SetCaptureFileComments(nullptr, comments);
```
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::SetCaptureComments(...)。
(void)object;
}
这意味着 XCEngine 当前没有显式指定 capture 文件路径,而是把 `nullptr` 传给 RenderDoc。注释最终如何关联到具体 capture取决于 RenderDoc 对该调用形式的处理。
## 参数
- `comments` - 注释文本。
## 返回值
- 无。
## 线程语义
- 无显式同步;通常在抓帧前后由主线程调用。
## 示例
```cpp
XCEngine::Debug::RenderDocCapture::Get().SetCaptureComments("Frame 30 validation capture");
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [SetCaptureFilePath](SetCaptureFilePath.md)

View File

@@ -1,31 +1,36 @@
# RenderDocCapture::SetCaptureFilePath
设置相关状态或配置
设置 capture 文件路径模板
```cpp
void SetCaptureFilePath(const char* path);
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
- `path` - 参数语义详见头文件声明。
如果 RenderDoc 尚未加载,当前实现直接返回。否则会把 `path` 转发给底层 `SetCaptureFilePathTemplate`
**返回:** `void` - 无返回值
这个路径通常在抓帧前配置,用于决定生成的 `.rdc` 文件落到哪里,以及以什么名前缀生成
**示例:**
## 参数
- `path` - capture 文件路径模板。
## 返回值
- 无。
## 线程语义
- 建议在开始抓帧前完成配置。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::SetCaptureFilePath(...)。
(void)object;
}
XCEngine::Debug::RenderDocCapture::Get().SetCaptureFilePath(".\\triangle_frame30");
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [SetCaptureComments](SetCaptureComments.md)

View File

@@ -1,32 +1,37 @@
# RenderDocCapture::SetCaptureOptionU32
设置相关状态或配置
以原始 option id 设置一个 32 位 RenderDoc capture 选项
```cpp
void SetCaptureOptionU32(uint32_t option, uint32_t value);
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
- `option` - 参数语义详见头文件声明。
- `value` - 参数语义详见头文件声明。
如果 RenderDoc 尚未加载,当前实现直接返回。否则会把 `option``value` 原样传给底层 `SetCaptureOptionU32`
**返回:** `void` - 无返回值
当前公共头文件没有为这些 option id 提供命名常量,因此调用方需要自行保证 option 编号与目标 RenderDoc 版本匹配
**示例:**
## 参数
- `option` - RenderDoc 选项编号。
- `value` - 对应的 U32 值。
## 返回值
- 无。
## 线程语义
- 建议在初始化阶段或抓帧前配置。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::SetCaptureOptionU32(...)。
(void)object;
}
XCEngine::Debug::RenderDocCapture::Get().SetCaptureOptionU32(2, 1);
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [Initialize](Initialize.md)

View File

@@ -1,31 +1,40 @@
# RenderDocCapture::SetDevice
设置相关状态或配置
更新当前用于抓帧的图形设备指针
```cpp
void SetDevice(void* device);
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
- `device` - 参数语义详见头文件声明。
当前实现只是把 `device` 原样写入内部成员 `m_device`,不做类型检查、平台检查或合法性验证。
**返回:** `void` - 无返回值。
这个方法通常用于这样的流程:
**示例:**
1. 先在创建窗口后调用 [Initialize](Initialize.md)。
2. 图形后端初始化完成后,把真实设备指针补给 `RenderDocCapture`
## 参数
- `device` - 底层图形设备指针。
## 返回值
- 无。
## 线程语义
- 建议在图形设备创建线程中配置,并在抓帧前保持稳定。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::SetDevice(...)。
(void)object;
}
XCEngine::Debug::RenderDocCapture::Get().SetDevice(gDevice.GetDevice());
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [SetWindow](SetWindow.md)
- [Initialize](Initialize.md)

View File

@@ -1,31 +1,34 @@
# RenderDocCapture::SetWindow
设置相关状态或配置
更新当前用于抓帧的窗口句柄
```cpp
void SetWindow(void* window);
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:**
- `window` - 参数语义详见头文件声明。
当前实现只是把 `window` 原样写入内部成员 `m_window`,不做任何合法性检查。之后 [BeginCapture](BeginCapture.md) 与 [TriggerCapture](TriggerCapture.md) 可能会把它转换为 `HWND` 并尝试设置前台窗口与焦点。
**返回:** `void` - 无返回值。
## 参数
**示例:**
- `window` - 目标窗口指针;在 Windows 平台上通常是 `HWND`
## 返回值
- 无。
## 线程语义
- 建议在窗口所属线程或主线程设置。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::SetWindow(...)。
(void)object;
}
XCEngine::Debug::RenderDocCapture::Get().SetWindow(hwnd);
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [SetDevice](SetDevice.md)

View File

@@ -1,30 +1,42 @@
# RenderDocCapture::Shutdown
关闭并清理内部状态
结束抓帧并卸载 RenderDoc
```cpp
void Shutdown();
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:** 无。
当前实现只有在 `m_initialized``true` 时才执行关闭逻辑。关闭流程包括:
**返回:** `void` - 无返回值
1. 如果当前仍在抓帧,先调用 [EndCapture](EndCapture.md)
2. 卸载 `renderdoc.dll`
3. 清空 API 指针并把 `m_isLoaded` 设为 `false`
4.`m_initialized` 设为 `false`
**示例:**
当前不会清空 `m_device``m_window` 指针,但下次 `Initialize` 会用新的参数覆盖它们。
## 参数
- 无。
## 返回值
- 无。
## 线程语义
- 建议在图形设备和窗口销毁前、主线程受控退出阶段调用。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::Shutdown(...)。
(void)object;
}
XCEngine::Debug::RenderDocCapture::Get().Shutdown();
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [Initialize](Initialize.md)
- [EndCapture](EndCapture.md)

View File

@@ -1,30 +1,39 @@
# RenderDocCapture::TriggerCapture
公开方法,详见头文件声明
请求 RenderDoc 触发一次 capture
```cpp
void TriggerCapture();
```
该方法声明于 `XCEngine/Debug/RenderDocCapture.h`,当前页面用于固定 `RenderDocCapture` 类目录下的方法级 canonical 路径。
## 行为说明
**参数:** 无。
如果 RenderDoc 尚未加载,当前实现直接返回。否则:
**返回:** `void` - 无返回值
- 如果 `m_window` 非空,会先把窗口设为前台并设置焦点
- 调用底层 `TriggerCapture()` 请求 RenderDoc 执行一次捕获。
**示例:**
与 [BeginCapture](BeginCapture.md) / [EndCapture](EndCapture.md) 相比,这个方法更适合交给 RenderDoc 自己决定具体捕获时机。
## 参数
- 无。
## 返回值
- 无。
## 线程语义
- 建议在拥有目标窗口焦点控制权的线程调用。
## 示例
```cpp
#include <XCEngine/Debug/RenderDocCapture.h>
void Example() {
XCEngine::Debug::RenderDocCapture object;
// 根据上下文补齐参数后调用 RenderDocCapture::TriggerCapture(...)。
(void)object;
}
XCEngine::Debug::RenderDocCapture::Get().TriggerCapture();
```
## 相关文档
- [返回类总览](RenderDocCapture.md)
- [返回模块目录](../Debug.md)
- [返回类总览](RenderDocCapture.md)
- [BeginCapture](BeginCapture.md)