65 lines
1.9 KiB
Markdown
65 lines
1.9 KiB
Markdown
# RenderPipeline::Render
|
||
|
||
执行一次主场景 runtime 绘制。
|
||
|
||
```cpp
|
||
virtual bool Render(
|
||
const RenderContext& context,
|
||
const RenderSurface& surface,
|
||
const RenderSceneData& sceneData) = 0;
|
||
```
|
||
|
||
## 当前职责边界
|
||
|
||
这个接口只负责把已经提取好的主场景数据画到目标 [RenderSurface](../RenderSurface/RenderSurface.md):
|
||
|
||
- 消费 `sceneData.cameraData`
|
||
- 遍历 `sceneData.visibleItems`
|
||
- 读写 `surface` 的颜色/深度附件与 render-area
|
||
|
||
它不负责:
|
||
|
||
- 多相机 request 规划与排序
|
||
- shadow-caster / depth-only scene pass
|
||
- object-id pass
|
||
- `preScenePasses` / `postScenePasses` / `overlayPasses` 编排
|
||
|
||
这些外层编排由 [CameraRenderer](../CameraRenderer/CameraRenderer.md) 负责。
|
||
|
||
## 当前调用位置
|
||
|
||
按 `engine/src/Rendering/CameraRenderer.cpp`,当前主链路顺序是:
|
||
|
||
1. `preScenePasses`
|
||
2. `shadowCaster`
|
||
3. `depthOnly`
|
||
4. `m_pipeline->Render(...)`
|
||
5. `ObjectIdPass`
|
||
6. `postScenePasses`
|
||
7. `overlayPasses`
|
||
|
||
因此这里代表的是“主场景绘制槽位”,不是整次相机提交的全部流程。
|
||
|
||
## 当前实现弹性
|
||
|
||
- 具体实现可以假定 `sceneData` 已经由 [RenderSceneExtractor](../RenderSceneExtractor/RenderSceneExtractor.md) 产出。
|
||
- 具体实现也可以在这里内部做惰性初始化,只要对调用方维持一致的成败语义。
|
||
|
||
## 参数
|
||
|
||
- `context` - 当前帧的底层渲染上下文。
|
||
- `surface` - 本次主场景绘制的目标表面与 render-area。
|
||
- `sceneData` - 已提取好的相机、光照与可绘制项数据。
|
||
|
||
## 返回值
|
||
|
||
- 返回 `true`:主场景绘制成功。
|
||
- 返回 `false`:主场景绘制失败;外层 `CameraRenderer` 会终止这次提交并按已初始化阶段做清理。
|
||
|
||
## 相关文档
|
||
|
||
- [返回类型总览](RenderPipeline.md)
|
||
- [CameraRenderer::Render](../CameraRenderer/Render.md)
|
||
- [RenderSceneExtractor](../RenderSceneExtractor/RenderSceneExtractor.md)
|
||
- [RenderSurface](../RenderSurface/RenderSurface.md)
|