2.2 KiB
2.2 KiB
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,因此所有权在加入序列时转移给容器。