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

2.1 KiB
Raw Blame History

SceneRenderer::Render

命名空间: XCEngine::Rendering

类型: method overload set

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

签名

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

行为说明

执行单条 request、执行 request 数组,或从场景直接生成并执行。

各重载的当前语义

Render(const CameraRenderRequest& request)

直接转发给 m_cameraRenderer.Render(request)

Render(const std::vector<CameraRenderRequest>& requests)

当前会:

  1. 拒绝空数组
  2. 拒绝任一 !request.IsValid() 的输入
  3. 复制一份请求数组
  4. 调用 SceneRenderRequestUtils::SortCameraRenderRequests(...) 做稳定排序
  5. 逐条交给 m_cameraRenderer.Render(...)
  6. 在每条 request 成功后,回写自己持有的 fullscreen surface 状态

这里的“状态回写”很关键。因为 SceneRenderer 可能为本帧生成了中间 fullscreen surface如果不在 request 之间同步颜色状态,多相机链路就可能拿到错误的 ResourceStates

Render(scene, overrideCamera, context, surface)

等价于:

return Render(BuildRenderRequests(scene, overrideCamera, context, surface));

设计说明

即使调用方手工构造了 request 数组,SceneRenderer 仍然会再次排序。
这不是多余而是为了保证“camera stack / depth 规则”只有一份权威定义,不依赖每个调用方自己记住顺序约定。

返回值

  • 至少成功执行一条 request 时返回 true
  • 空输入、无效 request 或任一 request 执行失败时返回 false

相关文档