Files
XCEngine/docs/api/XCEngine/Rendering/Planning/SceneRenderRequestPlanner/BuildRequests.md

2.3 KiB
Raw Blame History

SceneRenderRequestPlanner::BuildRequests

std::vector<CameraRenderRequest> BuildRequests(
    const Components::Scene& scene,
    Components::CameraComponent* overrideCamera,
    const RenderContext& context,
    const RenderSurface& surface) const;

行为说明

当前实现先调用 CollectCameras 取得这次需要处理的相机列表,然后逐个调用 SceneRenderRequestUtils::BuildCameraRenderRequest(...) 生成请求。

构建过程中会维护两类计数:

  • renderedBaseCameraCount
  • 已成功加入结果数组的 request 数量

这两个计数会传给 ResolveClearFlags(),用于推导 Auto clear mode 的最终清屏行为。

在基础 request 构建成功后,当前实现还会尝试补方向光阴影规划:

  • 先判断这台相机当前是否应该进入自动方向光阴影路径。
  • 再按相机 cullingMask 查找主方向光,并要求该光源开启投影阴影。
  • 满足条件时,通过内部 DirectionalShadowPlanning helper 构建 request.directionalShadow
  • 如果 plan 有效,还会同步写入:
    • request.shadowCaster.clearFlags = RenderClearFlags::Depth
    • request.shadowCaster.hasCameraDataOverride = true
    • request.shadowCaster.cameraDataOverride = request.directionalShadow.cameraData

当前过滤规则

  • 如果某台相机最终生成的 request render area 宽高为 0,该请求会被跳过。
  • 只有真正成功加入结果数组的 base camera才会推进 renderedBaseCameraCount
  • 方法不会抛出失败原因;调用方只会拿到最终保留下来的请求数组。
  • 如果方向光阴影 plan 构建失败,主 request 仍然会保留,只是 directionalShadow 维持无效状态。

返回值

  • 一组已经完成基础字段填充的 CameraRenderRequest
  • 结果可能为空,例如没有可用相机,或所有相机的 render area 都被裁成了零尺寸。

相关文档