2.8 KiB
2.8 KiB
RenderPipelineAsset
命名空间: XCEngine::Rendering
类型: class (abstract)
头文件: XCEngine/Rendering/RenderPipelineAsset.h
描述: 主管线工厂接口,用于按需创建新的 runtime RenderPipeline 实例。
概览
RenderPipelineAsset 不负责自己绘制场景,而是回答一个更高层的问题:
- 当前这台 CameraRenderer 应该创建哪一种主场景 runtime 管线?
这层抽象把“选择哪条主管线”和“真正执行主场景绘制”拆开:
- asset 负责创建 runtime pipeline
- runtime pipeline 负责执行主场景绘制
当前真实接线
当前最直接的消费者是 CameraRenderer:
- 默认构造路径会持有一份默认 asset
- SetPipelineAsset 会通过 asset 重建当前 runtime pipeline
- GetPipelineAsset 返回的是工厂对象,不是 runtime pipeline 实例
按当前源码,默认 concrete asset 是 BuiltinForwardPipelineAsset。
生命周期与所有权
- asset 通常以
std::shared_ptr<const RenderPipelineAsset>共享持有 - CreatePipeline 返回新的
std::unique_ptr<RenderPipeline> - asset 不保留运行时实例;实例生命周期由
CameraRenderer或调用方接管
这是一种“共享工厂对象 + 独占运行时实例”的分层。
当前实现边界
- 这里仍然只是纯 C++ 工厂接口,不是项目资源数据库里的可序列化 renderer asset。
- “空 asset”或“asset 返回空指针”之后如何回退,不属于这个接口本身的职责;当前 fallback 逻辑发生在
CameraRenderer的CreatePipelineFromAsset()调用路径里。 - 当前公开的 concrete asset 仍只有 builtin forward 一条。
公开方法
| 方法 | 说明 |
|---|---|
| Destructor | 虚析构函数,保证经由基类销毁派生 asset 时行为正确。 |
| CreatePipeline | 创建一条新的 runtime 管线实例。 |
设计说明
这一层的重要性不在于“多包一层接口”,而在于把“选哪种主管线”从 CameraRenderer 的执行逻辑里抽出来。 这样后续即便增加新的 concrete pipeline,也不需要改动单 request 执行主链路。