2.2 KiB
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。
当前流程
- 调用
m_requestPlanner.BuildRequests(...)生成基础 request - 调用
ResolveCameraFinalColorPolicies(...),把 pipeline 默认值和相机 override 合并成request.finalColorPolicy - 调用
AttachFullscreenStageRequests(...) - 返回最终 request 数组
fullscreen 阶段补全规则
AttachFullscreenStageRequests(...) 当前会:
- 为每个 request 按需构建 post-process sequence
- 为每个 request 按需构建 final-output sequence
- 为这些 sequence 分配
FullscreenPassSurfaceCache - 把
sourceSurface、destinationSurface、sourceColorView和passes写回 request
但并不是所有 request 都会成功挂上 fullscreen 阶段。当前会跳过这些情况:
request.camera == nullptrrequest.context.device == nullptrrequest.surface没有有效颜色目标- post-process 和 final-output 都为空
- 主颜色 surface 是多重采样
- 颜色格式未知
- 中间 surface cache 创建失败
为什么这里不是纯 planner
BuildRenderRequests(...) 已经不只是“收集相机并填基础字段”,它还会分配执行阶段真正需要的临时资源。
因此它必须位于 SceneRenderer,而不是继续下沉到 planner 层。
返回值
- 一组已完成基础规划、final-color 解析和 fullscreen 阶段补全的 request
- 如果当前场景没有可用相机,结果可能为空