3.4 KiB
3.4 KiB
SceneViewPanel::Render
命名空间: XCEngine::Editor
类型: method
源文件: editor/src/panels/SceneViewPanel.h
签名
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 的当前实现,这个方法会依次执行:
- 先渲染顶部 toolbar,并更新
pivotMode / transformSpaceMode。 - 再通过
RenderViewportPanelContent(...)请求 Scene 视口纹理与交互表面。 - 若存在
IViewportHostService,则渲染左侧工具按钮 overlay,并把按钮点击与快捷键折叠成SceneViewportToolCommand。 - 通过
ExecuteSceneViewportToolCommand(...)切换m_toolMode,必要时先取消当前 gizmo 拖拽。 - 基于
m_toolMode / m_pivotMode / m_transformSpaceMode构造SceneViewportToolState,并把 viewport 尺寸与鼠标位置组装成SceneViewportFrameGeometry。 - 调用
BuildSceneViewportInteractionFrameState(...),刷新 gizmo frame、提交 gizmo overlay state,并取回当前 canonicalSceneViewportOverlayFrameData。 - 在允许交互解析时,调用
ResolveSceneViewportInteraction(...)获取 hovered interaction,再把结果折叠成SceneViewportInteractionActions。 - 用
ApplySceneViewportHoveredHandleState(...)更新 move / rotate / scale gizmo 的 hovered state。 - 通过
UpdateSceneViewportNavigationState(...)更新 look / pan 状态,再调用ShouldFocusSceneViewportAfterInteraction(...)决定本帧是否需要ImGui::SetWindowFocus()。 - 先执行
BuildBeginSceneViewportTransformGizmoLifecycleCommand(...)产出的 begin 命令,再分发交互动作。 - 再执行
BuildFrameSceneViewportTransformGizmoLifecycleCommand(...)产出的 frame 命令,推进 gizmo update / end。 - 构造
SceneViewportCaptureFlags,必要时请求 ImGui 在下一帧捕获鼠标或键盘。 - 构造
SceneViewportInput,并提交给IViewportHostService::UpdateSceneViewInput(...)以驱动 editor camera。 - 最后通过
RefreshAndDrawSceneViewportPresentation(...)对齐最新 gizmo frame,并绘制 HUD overlay。 - 面板尾部调用
Actions::ObserveInactiveActionRoute(*m_context),维持动作路由状态。
当前边界
- 该方法不直接构建底层
screenTriangles / handleRecords;这部分已下沉到SceneViewportOverlayHandleBuilder与 provider 链。 - 该方法不直接持有 render target,也不直接执行 Scene / Game 视口渲染。
- 该方法负责 orchestration,不负责定义 gizmo 几何或 overlay provider 契约本身。