Files
XCEngine/docs/api/XCEngine/Rendering/RenderPass/RenderPass.md

3.3 KiB
Raw Blame History

RenderPass

命名空间: XCEngine::Rendering

类型: header-overview

头文件: XCEngine/Rendering/RenderPass.h

描述: 定义轻量通用 pass 抽象 RenderPass、执行上下文 RenderPassContext 以及顺序执行容器 RenderPassSequence

概览

RenderPass.h 是当前渲染基础设施里最通用的一层 pass 协议。它统一回答三件事:

  • pass 执行时能拿到什么上下文
  • 一个 pass 至少需要实现哪些生命周期函数
  • 多个 pass 如何按顺序组成一个小型执行序列

当前定义

RenderPassContext

RenderPassContext 当前包含 6 个字段:

字段 说明
renderContext 当前后端、设备与命令列表。
surface 当前 pass 的输出目标 surface。
sceneData 本帧已提取的场景数据。
sourceSurface fullscreen / chained pass 的输入 surface无上游输入时可为空。
sourceColorView 上游传入的颜色输入视图;无上游输入时可为空。
sourceColorState sourceColorView 当前约定的资源状态,供自动切换或校验使用。

前向场景 pass 往往只使用 renderContextsurfacesceneDatafullscreen post-process / final-output 链路则会继续消费 sourceSurfacesourceColorViewsourceColorState

RenderPass

抽象基类包含 4 个核心成员:

成员 当前语义
GetName() 返回 pass 的可读名称。
Initialize() 默认返回 true,需要时准备一次性资源。
Execute() 纯虚函数,执行真正的 pass 逻辑。
Shutdown() 默认空实现,释放 pass 资源。

RenderPassSequence

RenderPassSequence 是一个拥有型容器,内部以 std::unique_ptr<RenderPass> 顺序保存 pass。

当前行为是:

  • AddPass() 会忽略空指针。
  • GetPassCount() 返回当前持有的 pass 数量。
  • Initialize() 按插入顺序调用每个 pass 的 Initialize()
  • Execute() 按插入顺序调用每个 pass 的 Execute()
  • Shutdown() 按逆序调用每个 pass 的 Shutdown()

失败与回滚语义

  • Initialize() 遇到失败会立刻返回 false
  • Execute() 遇到失败也会立刻停止后续 pass。
  • RenderPassSequence 自身不会在 Initialize() 失败时自动回滚已经初始化过的 pass。

更高层调用方,例如 CameraRenderer,会在 sequence 初始化失败时显式再做一次 Shutdown() 回滚。

测试与真实行为

tests/Rendering/unit/test_render_pass.cpp 已覆盖:

  • 初始化和执行按插入顺序发生
  • Shutdown() 按逆序发生
  • 中间某个 pass 执行失败时,后续 pass 不再执行

当前实现边界

  • 这套协议仍然是线性顺序执行,不是 render graph也没有显式资源依赖建模。
  • RenderPassSequence 只管理 pass 对象,不管理共享资源或跨 pass 的状态同步。
  • RenderPassContext 虽然现在已经能表达“一个输出 surface + 一路可选上游颜色输入”,但仍不适合描述更复杂的多目标或多阶段图结构。

相关文档