Files
XCEngine/docs/api/XCEngine/Editor/panels/SceneViewPanel/Render.md

3.4 KiB
Raw Blame History

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 的当前实现,这个方法会依次执行:

  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 契约本身。

相关文档