# SceneViewPanel::Render **命名空间**: `XCEngine::Editor` **类型**: `method` **源文件**: `editor/src/panels/SceneViewPanel.h` ## 签名 ```cpp void Render() override; ``` ## 作用 渲染 Scene View 面板,并在同一帧内完成: - Scene viewport 内容请求 - toolbar / tool overlay 更新 - Scene View hover / click 解析 - transform gizmo 生命周期推进 - editor camera 导航输入提交 - HUD / gizmo presentation 刷新 ## 当前实现行为 按 `editor/src/panels/SceneViewPanel.cpp` 的当前实现,这个方法会依次执行: 1. 先渲染顶部 toolbar,并更新 `pivotMode / transformSpaceMode`。 2. 再通过 `RenderViewportPanelContent(...)` 请求 Scene 视口纹理与交互表面。 3. 若存在 `IViewportHostService`,则渲染左侧工具按钮 overlay,并把按钮点击与快捷键折叠成 `SceneViewportToolCommand`。 4. 通过 `ExecuteSceneViewportToolCommand(...)` 切换 `m_toolMode`,必要时先取消当前 gizmo 拖拽。 5. 基于 `m_toolMode / m_pivotMode / m_transformSpaceMode` 构造 `SceneViewportToolState`,并把 viewport 尺寸与鼠标位置组装成 `SceneViewportFrameGeometry`。 6. 调用 `BuildSceneViewportInteractionFrameState(...)`,刷新 gizmo frame、提交 gizmo overlay state,并取回当前 canonical `SceneViewportOverlayFrameData`。 7. 在允许交互解析时,调用 `ResolveSceneViewportInteraction(...)` 获取 hovered interaction,再把结果折叠成 `SceneViewportInteractionActions`。 8. 用 `ApplySceneViewportHoveredHandleState(...)` 更新 move / rotate / scale gizmo 的 hovered state。 9. 通过 `UpdateSceneViewportNavigationState(...)` 更新 look / pan 状态,再调用 `ShouldFocusSceneViewportAfterInteraction(...)` 决定本帧是否需要 `ImGui::SetWindowFocus()`。 10. 先执行 `BuildBeginSceneViewportTransformGizmoLifecycleCommand(...)` 产出的 begin 命令,再分发交互动作。 11. 再执行 `BuildFrameSceneViewportTransformGizmoLifecycleCommand(...)` 产出的 frame 命令,推进 gizmo update / end。 12. 构造 `SceneViewportCaptureFlags`,必要时请求 ImGui 在下一帧捕获鼠标或键盘。 13. 构造 `SceneViewportInput`,并提交给 `IViewportHostService::UpdateSceneViewInput(...)` 以驱动 editor camera。 14. 最后通过 `RefreshAndDrawSceneViewportPresentation(...)` 对齐最新 gizmo frame,并绘制 HUD overlay。 15. 面板尾部调用 `Actions::ObserveInactiveActionRoute(*m_context)`,维持动作路由状态。 ## 当前边界 - 该方法不直接构建底层 `screenTriangles / handleRecords`;这部分已下沉到 `SceneViewportOverlayHandleBuilder` 与 provider 链。 - 该方法不直接持有 render target,也不直接执行 Scene / Game 视口渲染。 - 该方法负责 orchestration,不负责定义 gizmo 几何或 overlay provider 契约本身。 ## 相关文档 - [SceneViewPanel](SceneViewPanel.md) - [SceneViewportChrome](../../Viewport/SceneViewportChrome/SceneViewportChrome.md) - [SceneViewportInteractionFrame](../../Viewport/SceneViewportInteractionFrame/SceneViewportInteractionFrame.md) - [SceneViewportNavigation](../../Viewport/SceneViewportNavigation/SceneViewportNavigation.md) - [SceneViewportTransformGizmoCoordinator](../../Viewport/SceneViewportTransformGizmoCoordinator/SceneViewportTransformGizmoCoordinator.md) - [SceneViewportInteractionActions](../../Viewport/SceneViewportInteractionActions/SceneViewportInteractionActions.md)