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

@@ -450,6 +450,28 @@ public:
}
};
class SceneViewportTransformGizmoOverlayProvider final : public ISceneViewportOverlayProvider {
public:
const char* GetName() const override {
return "SceneViewportTransformGizmoOverlayProvider";
}
void AppendOverlay(
const SceneViewportOverlayBuildContext& context,
SceneViewportOverlayFrameData& frameData) const override {
if (!context.IsValid() ||
context.transformGizmoOverlayState == nullptr ||
!context.transformGizmoOverlayState->HasAnyVisibleGizmo()) {
return;
}
const SceneViewportTransformGizmoHandleBuildInputs inputs =
BuildSceneViewportTransformGizmoHandleBuildInputs(*context.transformGizmoOverlayState);
AppendTransformGizmoScreenTriangles(frameData, inputs);
AppendTransformGizmoHandleRecords(frameData, inputs);
}
};
} // namespace
void SceneViewportOverlayProviderRegistry::AddProvider(
@@ -491,10 +513,15 @@ std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportLightOverlayPr
return std::make_unique<SceneViewportLightOverlayProvider>();
}
std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportTransformGizmoOverlayProvider() {
return std::make_unique<SceneViewportTransformGizmoOverlayProvider>();
}
SceneViewportOverlayProviderRegistry BuildDefaultSceneViewportOverlayProviderRegistry() {
SceneViewportOverlayProviderRegistry registry;
registry.AddProvider(CreateSceneViewportCameraOverlayProvider());
registry.AddProvider(CreateSceneViewportLightOverlayProvider());
registry.AddProvider(CreateSceneViewportTransformGizmoOverlayProvider());
return registry;
}