66 lines
2.6 KiB
Markdown
66 lines
2.6 KiB
Markdown
# RenderPass
|
||
|
||
**命名空间**: `XCEngine::Rendering`
|
||
|
||
**类型**: `header-overview`
|
||
|
||
**头文件**: `XCEngine/Rendering/RenderPass.h`
|
||
|
||
**描述**: 定义轻量通用 pass 抽象 `RenderPass`、执行上下文 `RenderPassContext` 以及顺序执行容器 `RenderPassSequence`。
|
||
|
||
## 概述
|
||
|
||
`RenderPass.h` 是当前渲染基础设施里最通用的一层 pass 协议。它统一回答三件事:
|
||
|
||
- 一个 pass 执行时能拿到什么上下文。
|
||
- 一个 pass 至少需要实现哪些生命周期函数。
|
||
- 多个 pass 如何按顺序组成一个小型执行序列。
|
||
|
||
## 当前定义
|
||
|
||
- [RenderPassContext](RenderPassContext.md)
|
||
统一描述当前输出 `surface`、源颜色输入和共享 `sceneData`。
|
||
- `RenderPass`
|
||
抽象基类,约定所有渲染 pass 的最小生命周期接口。
|
||
- [RenderPassSequence](RenderPassSequence.md)
|
||
拥有型顺序容器,负责按固定顺序初始化、执行和关闭多个 pass。
|
||
|
||
`RenderPass` 抽象基类当前包含 4 个核心成员:
|
||
|
||
| 成员 | 当前语义 |
|
||
|------|------|
|
||
| `GetName()` | 返回 pass 的可读名称。 |
|
||
| `Initialize()` | 默认返回 `true`,需要时准备一次性资源。 |
|
||
| `Execute()` | 纯虚函数,执行真正的 pass 逻辑。 |
|
||
| `Shutdown()` | 默认空实现,释放 pass 资源。 |
|
||
|
||
## 失败与回滚语义
|
||
|
||
- `RenderPassSequence::Initialize()` 遇到失败会立刻返回 `false`。
|
||
- `RenderPassSequence::Execute()` 遇到失败也会停止后续 pass。
|
||
- `RenderPassSequence` 自身不会在 `Initialize()` 失败时自动回滚已经初始化过的 pass。
|
||
- 更高层调用方,例如 `CameraRenderer`,会在 sequence 初始化失败时显式再做一次 `Shutdown()` 回滚。
|
||
|
||
## 测试与真实行为
|
||
|
||
`tests/Rendering/unit/test_render_pass.cpp` 当前覆盖了:
|
||
|
||
- 初始化与执行按插入顺序发生。
|
||
- `Shutdown()` 按逆序发生。
|
||
- 中间某个 pass 执行失败时,后续 pass 不再执行。
|
||
|
||
## 当前实现边界
|
||
|
||
- 这套协议仍然是线性顺序执行模型,不是 render graph,也没有显式资源依赖建模。
|
||
- `RenderPassSequence` 只管理 `RenderPass` 对象,不管理共享资源或跨 pass 的状态同步。
|
||
- `RenderPassContext` 虽然已经能表达“一个输出 `surface` + 一路可选上游颜色输入”,但还不适合描述更复杂的多目标或多阶段图结构。
|
||
|
||
## 相关文档
|
||
|
||
- [RenderPassContext](RenderPassContext.md)
|
||
- [RenderPassSequence](RenderPassSequence.md)
|
||
- [当前模块](../Rendering.md)
|
||
- [CameraRenderRequest](../Planning/CameraRenderRequest/CameraRenderRequest.md)
|
||
- [CameraRenderer](../Execution/CameraRenderer/CameraRenderer.md)
|
||
- [Passes](../Passes/Passes.md)
|