79 lines
2.9 KiB
Markdown
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)
|