# CameraRenderer::CameraRenderer **命名空间**: `XCEngine::Rendering` **类型**: `constructor overload set` **头文件**: `XCEngine/Rendering/Execution/CameraRenderer.h` ## 签名 ```cpp CameraRenderer(); explicit CameraRenderer(std::unique_ptr pipeline); explicit CameraRenderer(std::shared_ptr pipelineAsset); CameraRenderer( std::unique_ptr pipeline, std::unique_ptr objectIdPass, std::unique_ptr depthOnlyPass = nullptr, std::unique_ptr shadowCasterPass = nullptr); ``` ## 当前构造路径 - 默认构造 回退到静态共享的 `BuiltinForwardPipelineAsset`,并建立 builtin object-id / depth-only / shadow-caster pass 与 fullscreen surface cache。 - `std::unique_ptr` 重载 接管外部传入的 runtime pipeline,并对三个独立 pass 使用 builtin 默认实现。 - `std::shared_ptr` 重载 保存 asset,再通过 [SetPipelineAsset](SetPipelineAsset.md) 创建当前 runtime pipeline。 - 完整重载 允许同时注入 pipeline 和三类独立 `RenderPass`;任一 pass 传空时都会回退到对应 builtin 实现。 ## 回退规则 - `objectIdPass == nullptr` 时,回退到 `Passes::BuiltinObjectIdPass` - `depthOnlyPass == nullptr` 时,回退到 `Passes::BuiltinDepthOnlyPass` - `shadowCasterPass == nullptr` 时,回退到 `Passes::BuiltinShadowCasterPass` - `pipeline == nullptr` 时,`ResetPipeline(...)` 会继续回退到默认 `BuiltinForwardPipelineAsset` ## 生命周期 - `RenderPipeline` 与三个独立 pass 都由 `CameraRenderer` 通过 `std::unique_ptr` 独占持有。 - `RenderPipelineAsset` 通过 `std::shared_ptr` 共享持有,只用来派生 runtime pipeline。 - 构造函数还会准备 `DirectionalShadowSurfaceCache` / `FullscreenPassSurfaceCache` 所需的成员槽位,使后续帧内阶段切换不必重新分配整个执行器。 ## 设计说明 这组重载同时覆盖两种接线方式: - 上层已经准备好 runtime pipeline,直接注入执行器 - 上层只声明 pipeline asset,让执行器按当前默认规则创建 runtime pipeline 这让运行时、测试和编辑器都能复用同一套单相机执行器,而不会把“如何创建主管线”写散在多个调用方里。 ## 相关文档 - [CameraRenderer](CameraRenderer.md) - [SetPipeline](SetPipeline.md) - [SetPipelineAsset](SetPipelineAsset.md) - [SetObjectIdPass](SetObjectIdPass.md) - [SetDepthOnlyPass](SetDepthOnlyPass.md) - [SetShadowCasterPass](SetShadowCasterPass.md)