2026-04-03 16:26:20 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "SceneViewportEditorOverlayData.h"
|
|
|
|
|
|
|
|
|
|
#include <cstddef>
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
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<uint64_t>* selectedObjectIds = nullptr;
|
2026-04-03 16:50:46 +08:00
|
|
|
const SceneViewportTransformGizmoOverlayState* transformGizmoOverlayState = nullptr;
|
2026-04-03 16:26:20 +08:00
|
|
|
|
|
|
|
|
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<ISceneViewportOverlayProvider> provider);
|
|
|
|
|
size_t GetProviderCount() const;
|
|
|
|
|
const ISceneViewportOverlayProvider* GetProvider(size_t index) const;
|
|
|
|
|
void AppendOverlay(
|
|
|
|
|
const SceneViewportOverlayBuildContext& context,
|
|
|
|
|
SceneViewportOverlayFrameData& frameData) const;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
std::vector<std::unique_ptr<ISceneViewportOverlayProvider>> m_providers = {};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportCameraOverlayProvider();
|
|
|
|
|
std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportLightOverlayProvider();
|
2026-04-03 16:50:46 +08:00
|
|
|
std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportTransformGizmoOverlayProvider();
|
2026-04-03 16:26:20 +08:00
|
|
|
SceneViewportOverlayProviderRegistry BuildDefaultSceneViewportOverlayProviderRegistry();
|
|
|
|
|
|
|
|
|
|
} // namespace Editor
|
|
|
|
|
} // namespace XCEngine
|