# SceneRenderer::Render **命名空间**: `XCEngine::Rendering` **类型**: `method overload set` **头文件**: `XCEngine/Rendering/Execution/SceneRenderer.h` ## 签名 ```cpp bool Render(const CameraRenderRequest& request); bool Render(const std::vector& 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& 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)` 等价于: ```cpp return Render(BuildRenderRequests(scene, overrideCamera, context, surface)); ``` ## 设计说明 即使调用方手工构造了 request 数组,`SceneRenderer` 仍然会再次排序。 这不是多余,而是为了保证“camera stack / depth 规则”只有一份权威定义,不依赖每个调用方自己记住顺序约定。 ## 返回值 - 至少成功执行一条 request 时返回 `true` - 空输入、无效 request 或任一 request 执行失败时返回 `false` ## 相关文档 - [SceneRenderer](SceneRenderer.md) - [BuildRenderRequests](BuildRenderRequests.md) - [CameraRenderer](../CameraRenderer/CameraRenderer.md) - [SceneRenderRequestUtils](../../Planning/SceneRenderRequestUtils/SceneRenderRequestUtils.md)