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

65 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)