# SceneRenderer::BuildRenderRequests **命名空间**: `XCEngine::Rendering` **类型**: `method` **头文件**: `XCEngine/Rendering/Execution/SceneRenderer.h` ## 签名 ```cpp std::vector 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)