# RenderPipeline **命名空间**: `XCEngine::Rendering` **类型**: `class (abstract)` **头文件**: `XCEngine/Rendering/RenderPipeline.h` **描述**: 主场景 runtime 管线的统一接口,负责初始化、关闭,并把一份 `RenderSceneData` 绘制到目标 `RenderSurface`。 ## 概览 `RenderPipeline` 是当前渲染模块里最核心的 runtime 扩展点之一。它把“真正的主场景绘制”抽象成三个阶段: - `Initialize(const RenderContext&)` - `Shutdown()` - `Render(const RenderContext&, const RenderSurface&, const RenderSceneData&)` 上游不会直接依赖某个具体 builtin 管线类型,而是只依赖这个抽象接口。 ## 当前接入方式 默认情况下,具体 runtime pipeline 不是由 `SceneRenderer` 直接构造,而是由 `CameraRenderer` 通过 [RenderPipelineAsset](../RenderPipelineAsset/RenderPipelineAsset.md) 创建并持有。 当前公开的默认实现是: - [BuiltinForwardPipeline](../Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md) 默认工厂则是: - [BuiltinForwardPipelineAsset](../Pipelines/BuiltinForwardPipelineAsset/BuiltinForwardPipelineAsset.md) ## 当前职责边界 `RenderPipeline` 只负责主场景绘制本身,不负责: - 多相机 request 规划和排序 - shadow-caster / depth-only scene pass - object-id pass 与 object-id 输出目标 - `preScenePasses` / `postScenePasses` / `overlayPasses` 的外层编排 这些都由 [CameraRenderer](../CameraRenderer/CameraRenderer.md) 在外层编排。 ## 当前实现弹性 接口本身并不强制初始化策略。具体实现可以: - 在 `Initialize()` 中一次性准备资源。 - 或者像 `BuiltinForwardPipeline` 一样,在 `Render()` 中按需触发或复用初始化逻辑。 因此调用方只依赖语义契约,而不依赖某个具体实现的资源建立时机。 ## 公开方法 | 方法 | 说明 | |------|------| | [Destructor](Destructor.md) | 虚析构函数。 | | [Initialize](Initialize.md) | 初始化这条主管线所需的底层资源。 | | [Shutdown](Shutdown.md) | 释放主管线资源。 | | [Render](Render.md) | 把一份 `RenderSceneData` 绘制到指定 `RenderSurface`。 | ## 设计说明 把 `RenderContext`、`RenderSurface` 和 `RenderSceneData` 分开传入,是当前很关键的职责拆分: - `RenderContext` 表示底层设备与命令环境。 - `RenderSurface` 表示这次提交的目标与 render-area。 - `RenderSceneData` 表示已经提取好的相机、光照和可绘制项。 这样同一条 runtime pipeline 才能在不同 surface、不同 request 和不同场景提取结果之间复用。 ## 相关文档 - [Rendering](../Rendering.md) - [CameraRenderer](../CameraRenderer/CameraRenderer.md) - [RenderPipelineAsset](../RenderPipelineAsset/RenderPipelineAsset.md) - [BuiltinForwardPipelineAsset](../Pipelines/BuiltinForwardPipelineAsset/BuiltinForwardPipelineAsset.md) - [SceneRenderer](../SceneRenderer/SceneRenderer.md)