Formalize scene viewport transform gizmo overlay provider

This commit is contained in:
2026-04-03 16:50:46 +08:00
parent 03bd755e0a
commit 73415915e6
11 changed files with 198 additions and 141 deletions

View File

@@ -213,6 +213,8 @@ public:
m_sceneViewportEditorOverlayRenderer.Shutdown();
m_sceneViewCamera = {};
ResetSceneViewEditorOverlayFrameData();
m_sceneViewTransformGizmoOverlayState = {};
m_sceneViewTransformGizmoOverlayDirty = false;
m_sceneViewLastRenderContext = {};
m_device = nullptr;
m_backend = nullptr;
@@ -225,8 +227,8 @@ public:
entry.requestedWidth = 0;
entry.requestedHeight = 0;
}
m_sceneViewTransientTransformGizmoOverlay = {};
m_sceneViewTransientTransformGizmoInputs = {};
m_sceneViewTransformGizmoOverlayState = {};
m_sceneViewTransformGizmoOverlayDirty = true;
}
EditorViewportFrame RequestViewport(EditorViewportKind kind, const ImVec2& requestedSize) override {
@@ -360,23 +362,10 @@ public:
return m_sceneViewEditorOverlayFrameData;
}
const SceneViewportOverlayFrameData& GetSceneViewInteractionOverlayFrameData(
IEditorContext& context,
const SceneViewportOverlayData& overlay,
const SceneViewportTransformGizmoHandleBuildInputs& inputs) override {
EnsureSceneViewEditorOverlayFrameData(context);
m_sceneViewInteractionOverlayFrameData = m_sceneViewEditorOverlayFrameData;
AppendSceneViewportOverlayFrameData(
m_sceneViewInteractionOverlayFrameData,
BuildSceneViewportTransformGizmoOverlayFrameData(overlay, inputs));
return m_sceneViewInteractionOverlayFrameData;
}
void SetSceneViewTransientTransformGizmoOverlayData(
const SceneViewportOverlayData& overlay,
const SceneViewportTransformGizmoHandleBuildInputs& inputs) override {
m_sceneViewTransientTransformGizmoOverlay = overlay;
m_sceneViewTransientTransformGizmoInputs = inputs;
void SetSceneViewTransformGizmoOverlayState(
const SceneViewportTransformGizmoOverlayState& state) override {
m_sceneViewTransformGizmoOverlayState = state;
m_sceneViewTransformGizmoOverlayDirty = true;
}
void RenderRequestedViewports(
@@ -533,7 +522,6 @@ private:
void ResetSceneViewEditorOverlayFrameData() {
m_sceneViewEditorOverlayFrameData = {};
m_sceneViewInteractionOverlayFrameData = {};
m_sceneViewEditorOverlayScene = nullptr;
m_sceneViewEditorOverlaySelectedObjectIds.clear();
m_sceneViewEditorOverlayViewportWidth = 0u;
@@ -557,7 +545,8 @@ private:
uint32_t viewportHeight,
const std::vector<uint64_t>& selectedObjectIds,
uint64_t contentSignature) const {
return !m_sceneViewEditorOverlayCached ||
return m_sceneViewTransformGizmoOverlayDirty ||
!m_sceneViewEditorOverlayCached ||
m_sceneViewEditorOverlayScene != scene ||
m_sceneViewEditorOverlayViewportWidth != viewportWidth ||
m_sceneViewEditorOverlayViewportHeight != viewportHeight ||
@@ -600,7 +589,8 @@ private:
overlay,
viewportWidth,
viewportHeight,
selectedObjectIds);
selectedObjectIds,
&m_sceneViewTransformGizmoOverlayState);
}
m_sceneViewEditorOverlayScene = scene;
@@ -609,6 +599,7 @@ private:
m_sceneViewEditorOverlayViewportHeight = viewportHeight;
m_sceneViewEditorOverlayContentSignature = contentSignature;
m_sceneViewEditorOverlayCached = true;
m_sceneViewTransformGizmoOverlayDirty = false;
}
void ApplyViewportRenderFailure(
@@ -653,7 +644,6 @@ private:
outState.overlay,
selectedObjectIds,
editorOverlayFrameData,
BuildSceneViewTransientTransformGizmoOverlayFrameData(),
[this](const Rendering::Passes::InfiniteGridPassData& data) {
return CreateSceneViewportGridPass(
m_sceneViewportGridRenderer,
@@ -864,12 +854,6 @@ private:
});
}
SceneViewportOverlayFrameData BuildSceneViewTransientTransformGizmoOverlayFrameData() const {
return BuildSceneViewportTransformGizmoOverlayFrameData(
m_sceneViewTransientTransformGizmoOverlay,
m_sceneViewTransientTransformGizmoInputs);
}
UI::ImGuiBackendBridge* m_backend = nullptr;
RHI::RHIDevice* m_device = nullptr;
std::unique_ptr<Rendering::SceneRenderer> m_sceneRenderer;
@@ -878,15 +862,14 @@ private:
std::array<ViewportEntry, 2> m_entries = {};
SceneViewCameraState m_sceneViewCamera;
SceneViewportOverlayFrameData m_sceneViewEditorOverlayFrameData = {};
SceneViewportOverlayFrameData m_sceneViewInteractionOverlayFrameData = {};
SceneViewportOverlayData m_sceneViewTransientTransformGizmoOverlay = {};
SceneViewportTransformGizmoHandleBuildInputs m_sceneViewTransientTransformGizmoInputs = {};
SceneViewportTransformGizmoOverlayState m_sceneViewTransformGizmoOverlayState = {};
const Components::Scene* m_sceneViewEditorOverlayScene = nullptr;
std::vector<uint64_t> m_sceneViewEditorOverlaySelectedObjectIds = {};
uint32_t m_sceneViewEditorOverlayViewportWidth = 0u;
uint32_t m_sceneViewEditorOverlayViewportHeight = 0u;
uint64_t m_sceneViewEditorOverlayContentSignature = 0u;
bool m_sceneViewEditorOverlayCached = false;
bool m_sceneViewTransformGizmoOverlayDirty = false;
SceneViewportGridPassRenderer m_sceneViewportGridRenderer;
SceneViewportSelectionOutlinePassRenderer m_sceneViewportSelectionOutlineRenderer;
SceneViewportEditorOverlayPassRenderer m_sceneViewportEditorOverlayRenderer;