Files
XCEngine/docs/api/XCEngine/Rendering/RenderPipeline/RenderPipeline.md

79 lines
2.9 KiB
Markdown

# 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)