1.9 KiB
1.9 KiB
CameraRenderer::Constructor
CameraRenderer();
explicit CameraRenderer(std::unique_ptr<RenderPipeline> pipeline);
explicit CameraRenderer(std::shared_ptr<const RenderPipelineAsset> pipelineAsset);
CameraRenderer(
std::unique_ptr<RenderPipeline> pipeline,
std::unique_ptr<ObjectIdPass> objectIdPass);
行为说明
构造函数的核心职责是决定两件事:
- 当前主管线实例从哪里来。
- 当前 object-id pass 是否使用默认 builtin 实现。
当前构造路径
默认构造
- 调用内部静态
CreateDefaultPipelineAsset()。 - 默认 asset 是共享的 BuiltinForwardPipelineAsset。
- 随后走 asset 构造路径生成主管线。
std::unique_ptr<RenderPipeline> 重载
- 交由
(pipeline, objectIdPass)这个双参重载处理。 - 如果未显式提供 object-id pass,默认补一个 Passes::BuiltinObjectIdPass。
std::shared_ptr<const RenderPipelineAsset> 重载
- 先保存 asset。
- 再调用 SetPipelineAsset,立即由 asset 创建 runtime pipeline。
- 默认同时创建 builtin object-id pass。
(pipeline, objectIdPass) 重载
- 若
objectIdPass为空,自动回退到 builtin object-id pass。 - 调用内部
ResetPipeline(std::move(pipeline))。 - 如果传入
pipeline为空,ResetPipeline()会继续回退到默认 pipeline asset,并创建 builtin forward 主管线。
所有权
RenderPipeline和ObjectIdPass由CameraRenderer以std::unique_ptr独占持有。RenderPipelineAsset以std::shared_ptr<const ...>共享持有,只作为 runtime pipeline 的创建来源。