Files
XCEngine/docs/api/XCEngine/Rendering/Execution/SceneRenderer/BuildRenderRequests.md

2.2 KiB

SceneRenderer::BuildRenderRequests

命名空间: XCEngine::Rendering

类型: method

头文件: XCEngine/Rendering/Execution/SceneRenderer.h

签名

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
  • sourceSurfacedestinationSurfacesourceColorViewpasses 写回 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
  • 如果当前场景没有可用相机,结果可能为空

相关文档