#pragma once #include "SceneViewportEditorOverlayData.h" #include #include #include #include namespace XCEngine { namespace Components { class Scene; } // namespace Components namespace Editor { class IEditorContext; struct SceneViewportOverlayBuildContext { IEditorContext* editorContext = nullptr; const Components::Scene* scene = nullptr; const SceneViewportOverlayData* overlay = nullptr; uint32_t viewportWidth = 0u; uint32_t viewportHeight = 0u; const std::vector* selectedObjectIds = nullptr; const SceneViewportTransformGizmoOverlayState* transformGizmoOverlayState = nullptr; bool IsValid() const { return editorContext != nullptr && scene != nullptr && overlay != nullptr && overlay->valid && viewportWidth > 0u && viewportHeight > 0u && selectedObjectIds != nullptr; } }; class ISceneViewportOverlayProvider { public: virtual ~ISceneViewportOverlayProvider() = default; virtual const char* GetName() const = 0; virtual void AppendOverlay( const SceneViewportOverlayBuildContext& context, SceneViewportOverlayFrameData& frameData) const = 0; }; class SceneViewportOverlayProviderRegistry { public: void AddProvider(std::unique_ptr provider); size_t GetProviderCount() const; const ISceneViewportOverlayProvider* GetProvider(size_t index) const; void AppendOverlay( const SceneViewportOverlayBuildContext& context, SceneViewportOverlayFrameData& frameData) const; private: std::vector> m_providers = {}; }; std::unique_ptr CreateSceneViewportCameraOverlayProvider(); std::unique_ptr CreateSceneViewportLightOverlayProvider(); std::unique_ptr CreateSceneViewportTransformGizmoOverlayProvider(); SceneViewportOverlayProviderRegistry BuildDefaultSceneViewportOverlayProviderRegistry(); } // namespace Editor } // namespace XCEngine