2.1 KiB
2.1 KiB
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)
当前会:
- 拒绝空数组
- 拒绝任一
!request.IsValid()的输入 - 复制一份请求数组
- 调用
SceneRenderRequestUtils::SortCameraRenderRequests(...)做稳定排序 - 逐条交给
m_cameraRenderer.Render(...) - 在每条 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