2.7 KiB
2.7 KiB
CameraRenderer::Constructor
命名空间: XCEngine::Rendering
类型: constructor-overload group
头文件: XCEngine/Rendering/CameraRenderer.h
签名
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,
std::unique_ptr<RenderPass> depthOnlyPass = nullptr,
std::unique_ptr<RenderPass> shadowCasterPass = nullptr);
行为说明
构造函数的核心职责是决定三件事:
- 当前主管线实例从哪里来
- 当前 object-id pass 是否使用默认 builtin 实现
- 当前 depth-only / shadow-caster pass 是否使用默认 builtin 实现
当前构造路径
默认构造
- 通过内部静态
CreateDefaultPipelineAsset()取得共享的默认 asset。 - 默认 asset 是 BuiltinForwardPipelineAsset。
- 随后走 asset 构造路径生成 runtime pipeline。
std::unique_ptr<RenderPipeline> 重载
- 交由四参重载处理。
- 如果未显式提供 object-id / depth-only / shadow-caster pass,会分别补:
std::shared_ptr<const RenderPipelineAsset> 重载
- 先保存 asset。
- 再调用 SetPipelineAsset,立即由 asset 创建 runtime pipeline。
- 默认同时创建 builtin object-id / depth-only / shadow-caster pass。
四参重载
- 若
objectIdPass为空,自动回退到 builtin object-id pass。 - 若
depthOnlyPass为空,自动回退到 builtin depth-only pass。 - 若
shadowCasterPass为空,自动回退到 builtin shadow-caster pass。 - 调用内部
ResetPipeline(std::move(pipeline))。 - 如果传入
pipeline为空,ResetPipeline()会继续回退到默认 pipeline asset,并创建 builtin forward 主管线。
所有权
RenderPipeline、ObjectIdPass、depthOnlyPass和shadowCasterPass都由CameraRenderer以std::unique_ptr独占持有。RenderPipelineAsset以std::shared_ptr<const ...>共享持有,只作为 runtime pipeline 的创建来源。