# RenderPipelineAsset::CreatePipeline **命名空间**: `XCEngine::Rendering` **类型**: `method` **头文件**: `XCEngine/Rendering/RenderPipelineAsset.h` 由具体 asset 创建一条新的 runtime 渲染管线实例。 ```cpp virtual std::unique_ptr CreatePipeline() const = 0; ``` ## 接口契约 从接口形状上,调用方可以依赖这些事实: - 返回值拥有独占所有权 - 返回对象是 `RenderPipeline` 派生实例 - 这是一个 `const` 工厂方法;asset 自己不需要暴露可变运行时状态 ## 当前调用链 当前最主要的消费者是 `CameraRenderer` 内部的 `CreatePipelineFromAsset()`: 1. 若存在 `pipelineAsset`,先调用 `asset->CreatePipeline()` 2. 若拿到有效实例,就把它接成当前主管线 3. 若 asset 为空或返回空指针,再由 `CameraRenderer` 的调用路径回退到 builtin forward 要点是: - “创建 runtime pipeline”是这个接口的职责 - “创建失败后如何回退”是调用方的职责,不是接口本身的内建语义 ## 返回值 - `std::unique_ptr` - 新创建的运行时管线 - 允许派生类返回 `nullptr`;但这会被当前调用方视为“创建失败”,并走自己的 fallback 路径 ## 当前公开实现示例 - [BuiltinForwardPipelineAsset::CreatePipeline](../Pipelines/BuiltinForwardPipelineAsset/CreatePipeline.md) ## 设计说明 这里使用 `std::unique_ptr` 很关键,因为 runtime pipeline 往往持有设备指针、pipeline state、descriptor set、缓存和临时 GPU 资源。 这类对象通常应当有清晰的唯一生命周期,而不是被多处共享。 ## 相关文档 - [RenderPipelineAsset](RenderPipelineAsset.md) - [RenderPipeline](../RenderPipeline/RenderPipeline.md) - [BuiltinForwardPipelineAsset](../Pipelines/BuiltinForwardPipelineAsset/BuiltinForwardPipelineAsset.md)