66 lines
2.2 KiB
Markdown
66 lines
2.2 KiB
Markdown
|
|
# SceneRenderer::BuildRenderRequests
|
||
|
|
|
||
|
|
**命名空间**: `XCEngine::Rendering`
|
||
|
|
|
||
|
|
**类型**: `method`
|
||
|
|
|
||
|
|
**头文件**: `XCEngine/Rendering/Execution/SceneRenderer.h`
|
||
|
|
|
||
|
|
## 签名
|
||
|
|
|
||
|
|
```cpp
|
||
|
|
std::vector<CameraRenderRequest> BuildRenderRequests(
|
||
|
|
const Components::Scene& scene,
|
||
|
|
Components::CameraComponent* overrideCamera,
|
||
|
|
const RenderContext& context,
|
||
|
|
const RenderSurface& surface);
|
||
|
|
```
|
||
|
|
|
||
|
|
## 行为说明
|
||
|
|
|
||
|
|
基于当前场景生成一组“可以立即执行”的 `CameraRenderRequest`。
|
||
|
|
|
||
|
|
## 当前流程
|
||
|
|
|
||
|
|
1. 调用 `m_requestPlanner.BuildRequests(...)` 生成基础 request
|
||
|
|
2. 调用 `ResolveCameraFinalColorPolicies(...)`,把 pipeline 默认值和相机 override 合并成 `request.finalColorPolicy`
|
||
|
|
3. 调用 `AttachFullscreenStageRequests(...)`
|
||
|
|
4. 返回最终 request 数组
|
||
|
|
|
||
|
|
## fullscreen 阶段补全规则
|
||
|
|
|
||
|
|
`AttachFullscreenStageRequests(...)` 当前会:
|
||
|
|
|
||
|
|
- 为每个 request 按需构建 post-process sequence
|
||
|
|
- 为每个 request 按需构建 final-output sequence
|
||
|
|
- 为这些 sequence 分配 `FullscreenPassSurfaceCache`
|
||
|
|
- 把 `sourceSurface`、`destinationSurface`、`sourceColorView` 和 `passes` 写回 request
|
||
|
|
|
||
|
|
但并不是所有 request 都会成功挂上 fullscreen 阶段。当前会跳过这些情况:
|
||
|
|
|
||
|
|
- `request.camera == nullptr`
|
||
|
|
- `request.context.device == nullptr`
|
||
|
|
- `request.surface` 没有有效颜色目标
|
||
|
|
- post-process 和 final-output 都为空
|
||
|
|
- 主颜色 surface 是多重采样
|
||
|
|
- 颜色格式未知
|
||
|
|
- 中间 surface cache 创建失败
|
||
|
|
|
||
|
|
## 为什么这里不是纯 planner
|
||
|
|
|
||
|
|
`BuildRenderRequests(...)` 已经不只是“收集相机并填基础字段”,它还会分配执行阶段真正需要的临时资源。
|
||
|
|
因此它必须位于 `SceneRenderer`,而不是继续下沉到 planner 层。
|
||
|
|
|
||
|
|
## 返回值
|
||
|
|
|
||
|
|
- 一组已完成基础规划、final-color 解析和 fullscreen 阶段补全的 request
|
||
|
|
- 如果当前场景没有可用相机,结果可能为空
|
||
|
|
|
||
|
|
## 相关文档
|
||
|
|
|
||
|
|
- [SceneRenderer](SceneRenderer.md)
|
||
|
|
- [Render](Render.md)
|
||
|
|
- [SceneRenderRequestPlanner](../../Planning/SceneRenderRequestPlanner/SceneRenderRequestPlanner.md)
|
||
|
|
- [CameraRenderRequest](../../Planning/CameraRenderRequest/CameraRenderRequest.md)
|
||
|
|
- [FinalColorSettings](../../Planning/FinalColorSettings/FinalColorSettings.md)
|