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

2.2 KiB
Raw Blame History

RenderPassSequence

描述按固定顺序持有并执行多个 RenderPass 的拥有型容器。

class RenderPassSequence {
public:
    void AddPass(std::unique_ptr<RenderPass> pass);
    size_t GetPassCount() const;
    bool Empty() const;
    bool Initialize(const RenderContext& context);
    void Shutdown();
    bool Execute(const RenderPassContext& context);
    bool ExecutePass(size_t index, const RenderPassContext& context);
};

公开方法

方法 当前语义
AddPass() 追加一个 pass传入 nullptr 时直接忽略。
GetPassCount() 返回当前持有的 pass 数量。
Empty() 判断当前序列是否为空。
Initialize() 按插入顺序调用每个 pass 的 Initialize();遇到失败立即返回 false
Shutdown() 按逆序调用每个 pass 的 Shutdown()
Execute() 按插入顺序调用每个 pass 的 Execute();遇到失败立即停止。
ExecutePass() 只执行指定索引的单个 pass索引越界或该位置为空时返回 false

失败与回滚语义

  • Initialize() 失败时,RenderPassSequence 不会自动回滚已经初始化过的 pass。
  • Execute() 失败时,后续 pass 不再执行,但当前序列仍保留,调用方可以选择显式 Shutdown()
  • Shutdown() 总是按逆序发生,以匹配常见的资源依赖释放顺序。

测试覆盖

tests/Rendering/unit/test_render_pass.cpp 当前已经验证:

  • 初始化按插入顺序发生。
  • 执行按插入顺序发生。
  • 关闭按逆序发生。
  • 中间某个 pass 返回失败时,后续 pass 不再执行。

ExecutePass() 当前没有独立测试,但它的实现只是对索引和空指针做检查后转发到单个 RenderPass::Execute()

当前实现边界

  • 它是线性容器,不会重排 pass也不做依赖分析。
  • 共享资源、跨 pass 过渡和中间 surface 分配都不由 RenderPassSequence 统一管理。
  • 当前实现用 std::unique_ptr<RenderPass> 持有 pass因此所有权在加入序列时转移给容器。

相关文档