55 lines
1.5 KiB
C++
55 lines
1.5 KiB
C++
#include "SceneViewportOverlayBuilder.h"
|
|
|
|
#include "Core/IEditorContext.h"
|
|
#include "Core/ISceneManager.h"
|
|
|
|
#include <XCEngine/Scene/Scene.h>
|
|
|
|
#include <utility>
|
|
|
|
namespace XCEngine {
|
|
namespace Editor {
|
|
|
|
SceneViewportOverlayBuilder::SceneViewportOverlayBuilder()
|
|
: m_providerRegistry(BuildDefaultSceneViewportOverlayProviderRegistry()) {
|
|
}
|
|
|
|
SceneViewportOverlayBuilder::SceneViewportOverlayBuilder(
|
|
SceneViewportOverlayProviderRegistry providerRegistry)
|
|
: m_providerRegistry(std::move(providerRegistry)) {
|
|
}
|
|
|
|
SceneViewportOverlayFrameData SceneViewportOverlayBuilder::Build(
|
|
IEditorContext& context,
|
|
const SceneViewportOverlayData& overlay,
|
|
uint32_t viewportWidth,
|
|
uint32_t viewportHeight,
|
|
const std::vector<uint64_t>& selectedObjectIds,
|
|
const SceneViewportTransformGizmoOverlayState* transformGizmoOverlayState) const {
|
|
SceneViewportOverlayFrameData frameData = {};
|
|
frameData.overlay = overlay;
|
|
if (!overlay.valid || viewportWidth == 0u || viewportHeight == 0u) {
|
|
return frameData;
|
|
}
|
|
|
|
const Components::Scene* scene = context.GetSceneManager().GetScene();
|
|
if (scene == nullptr) {
|
|
return frameData;
|
|
}
|
|
|
|
const SceneViewportOverlayBuildContext buildContext = {
|
|
&context,
|
|
scene,
|
|
&overlay,
|
|
viewportWidth,
|
|
viewportHeight,
|
|
&selectedObjectIds,
|
|
transformGizmoOverlayState
|
|
};
|
|
m_providerRegistry.AppendOverlay(buildContext, frameData);
|
|
return frameData;
|
|
}
|
|
|
|
} // namespace Editor
|
|
} // namespace XCEngine
|