Formalize scene viewport transform gizmo overlay provider
This commit is contained in:
@@ -16,7 +16,7 @@ namespace Editor {
|
|||||||
|
|
||||||
class IEditorContext;
|
class IEditorContext;
|
||||||
struct SceneViewportOverlayFrameData;
|
struct SceneViewportOverlayFrameData;
|
||||||
struct SceneViewportTransformGizmoHandleBuildInputs;
|
struct SceneViewportTransformGizmoOverlayState;
|
||||||
|
|
||||||
enum class EditorViewportKind {
|
enum class EditorViewportKind {
|
||||||
Scene,
|
Scene,
|
||||||
@@ -86,13 +86,8 @@ public:
|
|||||||
virtual void AlignSceneViewToOrientationAxis(SceneViewportOrientationAxis axis) = 0;
|
virtual void AlignSceneViewToOrientationAxis(SceneViewportOrientationAxis axis) = 0;
|
||||||
virtual SceneViewportOverlayData GetSceneViewOverlayData() const = 0;
|
virtual SceneViewportOverlayData GetSceneViewOverlayData() const = 0;
|
||||||
virtual const SceneViewportOverlayFrameData& GetSceneViewEditorOverlayFrameData(IEditorContext& context) = 0;
|
virtual const SceneViewportOverlayFrameData& GetSceneViewEditorOverlayFrameData(IEditorContext& context) = 0;
|
||||||
virtual const SceneViewportOverlayFrameData& GetSceneViewInteractionOverlayFrameData(
|
virtual void SetSceneViewTransformGizmoOverlayState(
|
||||||
IEditorContext& context,
|
const SceneViewportTransformGizmoOverlayState& state) = 0;
|
||||||
const SceneViewportOverlayData& overlay,
|
|
||||||
const SceneViewportTransformGizmoHandleBuildInputs& inputs) = 0;
|
|
||||||
virtual void SetSceneViewTransientTransformGizmoOverlayData(
|
|
||||||
const SceneViewportOverlayData& overlay,
|
|
||||||
const SceneViewportTransformGizmoHandleBuildInputs& inputs) = 0;
|
|
||||||
virtual void RenderRequestedViewports(
|
virtual void RenderRequestedViewports(
|
||||||
IEditorContext& context,
|
IEditorContext& context,
|
||||||
const Rendering::RenderContext& renderContext) = 0;
|
const Rendering::RenderContext& renderContext) = 0;
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ SceneViewportOverlayFrameData SceneViewportOverlayBuilder::Build(
|
|||||||
const SceneViewportOverlayData& overlay,
|
const SceneViewportOverlayData& overlay,
|
||||||
uint32_t viewportWidth,
|
uint32_t viewportWidth,
|
||||||
uint32_t viewportHeight,
|
uint32_t viewportHeight,
|
||||||
const std::vector<uint64_t>& selectedObjectIds) const {
|
const std::vector<uint64_t>& selectedObjectIds,
|
||||||
|
const SceneViewportTransformGizmoOverlayState* transformGizmoOverlayState) const {
|
||||||
SceneViewportOverlayFrameData frameData = {};
|
SceneViewportOverlayFrameData frameData = {};
|
||||||
frameData.overlay = overlay;
|
frameData.overlay = overlay;
|
||||||
if (!overlay.valid || viewportWidth == 0u || viewportHeight == 0u) {
|
if (!overlay.valid || viewportWidth == 0u || viewportHeight == 0u) {
|
||||||
@@ -42,7 +43,8 @@ SceneViewportOverlayFrameData SceneViewportOverlayBuilder::Build(
|
|||||||
&overlay,
|
&overlay,
|
||||||
viewportWidth,
|
viewportWidth,
|
||||||
viewportHeight,
|
viewportHeight,
|
||||||
&selectedObjectIds
|
&selectedObjectIds,
|
||||||
|
transformGizmoOverlayState
|
||||||
};
|
};
|
||||||
m_providerRegistry.AppendOverlay(buildContext, frameData);
|
m_providerRegistry.AppendOverlay(buildContext, frameData);
|
||||||
return frameData;
|
return frameData;
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ public:
|
|||||||
const SceneViewportOverlayData& overlay,
|
const SceneViewportOverlayData& overlay,
|
||||||
uint32_t viewportWidth,
|
uint32_t viewportWidth,
|
||||||
uint32_t viewportHeight,
|
uint32_t viewportHeight,
|
||||||
const std::vector<uint64_t>& selectedObjectIds) const;
|
const std::vector<uint64_t>& selectedObjectIds,
|
||||||
|
const SceneViewportTransformGizmoOverlayState* transformGizmoOverlayState = nullptr) const;
|
||||||
|
|
||||||
const SceneViewportOverlayProviderRegistry& GetProviderRegistry() const {
|
const SceneViewportOverlayProviderRegistry& GetProviderRegistry() const {
|
||||||
return m_providerRegistry;
|
return m_providerRegistry;
|
||||||
|
|||||||
@@ -20,6 +20,24 @@ struct SceneViewportTransformGizmoHandleBuildInputs {
|
|||||||
uint64_t scaleEntityId = 0;
|
uint64_t scaleEntityId = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SceneViewportTransformGizmoOverlayState {
|
||||||
|
bool hasMoveGizmo = false;
|
||||||
|
SceneViewportMoveGizmoDrawData moveGizmo = {};
|
||||||
|
uint64_t moveEntityId = 0;
|
||||||
|
bool hasRotateGizmo = false;
|
||||||
|
SceneViewportRotateGizmoDrawData rotateGizmo = {};
|
||||||
|
uint64_t rotateEntityId = 0;
|
||||||
|
bool hasScaleGizmo = false;
|
||||||
|
SceneViewportScaleGizmoDrawData scaleGizmo = {};
|
||||||
|
uint64_t scaleEntityId = 0;
|
||||||
|
|
||||||
|
bool HasAnyVisibleGizmo() const {
|
||||||
|
return (hasMoveGizmo && moveGizmo.visible) ||
|
||||||
|
(hasRotateGizmo && rotateGizmo.visible) ||
|
||||||
|
(hasScaleGizmo && scaleGizmo.visible);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline SceneViewportTransformGizmoHandleBuildInputs BuildSceneViewportTransformGizmoHandleBuildInputs(
|
inline SceneViewportTransformGizmoHandleBuildInputs BuildSceneViewportTransformGizmoHandleBuildInputs(
|
||||||
bool showingMoveGizmo,
|
bool showingMoveGizmo,
|
||||||
const SceneViewportMoveGizmo& moveGizmo,
|
const SceneViewportMoveGizmo& moveGizmo,
|
||||||
@@ -47,6 +65,47 @@ inline SceneViewportTransformGizmoHandleBuildInputs BuildSceneViewportTransformG
|
|||||||
return inputs;
|
return inputs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline SceneViewportTransformGizmoOverlayState BuildSceneViewportTransformGizmoOverlayState(
|
||||||
|
const SceneViewportTransformGizmoHandleBuildInputs& inputs) {
|
||||||
|
SceneViewportTransformGizmoOverlayState state = {};
|
||||||
|
if (inputs.moveGizmo != nullptr) {
|
||||||
|
state.hasMoveGizmo = true;
|
||||||
|
state.moveGizmo = *inputs.moveGizmo;
|
||||||
|
state.moveEntityId = inputs.moveEntityId;
|
||||||
|
}
|
||||||
|
if (inputs.rotateGizmo != nullptr) {
|
||||||
|
state.hasRotateGizmo = true;
|
||||||
|
state.rotateGizmo = *inputs.rotateGizmo;
|
||||||
|
state.rotateEntityId = inputs.rotateEntityId;
|
||||||
|
}
|
||||||
|
if (inputs.scaleGizmo != nullptr) {
|
||||||
|
state.hasScaleGizmo = true;
|
||||||
|
state.scaleGizmo = *inputs.scaleGizmo;
|
||||||
|
state.scaleEntityId = inputs.scaleEntityId;
|
||||||
|
}
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline SceneViewportTransformGizmoHandleBuildInputs BuildSceneViewportTransformGizmoHandleBuildInputs(
|
||||||
|
const SceneViewportTransformGizmoOverlayState& state) {
|
||||||
|
SceneViewportTransformGizmoHandleBuildInputs inputs = {};
|
||||||
|
if (state.hasMoveGizmo) {
|
||||||
|
inputs.moveGizmo = &state.moveGizmo;
|
||||||
|
inputs.moveEntityId = state.moveEntityId;
|
||||||
|
}
|
||||||
|
if (state.hasRotateGizmo) {
|
||||||
|
inputs.rotateGizmo = &state.rotateGizmo;
|
||||||
|
inputs.rotateEntityId = state.rotateEntityId;
|
||||||
|
}
|
||||||
|
if (state.hasScaleGizmo) {
|
||||||
|
inputs.scaleGizmo = &state.scaleGizmo;
|
||||||
|
inputs.scaleEntityId = state.scaleEntityId;
|
||||||
|
}
|
||||||
|
|
||||||
|
return inputs;
|
||||||
|
}
|
||||||
|
|
||||||
namespace Detail {
|
namespace Detail {
|
||||||
|
|
||||||
inline constexpr int kSceneViewportHandlePrioritySceneIcon = 100;
|
inline constexpr int kSceneViewportHandlePrioritySceneIcon = 100;
|
||||||
|
|||||||
@@ -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
|
} // namespace
|
||||||
|
|
||||||
void SceneViewportOverlayProviderRegistry::AddProvider(
|
void SceneViewportOverlayProviderRegistry::AddProvider(
|
||||||
@@ -491,10 +513,15 @@ std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportLightOverlayPr
|
|||||||
return std::make_unique<SceneViewportLightOverlayProvider>();
|
return std::make_unique<SceneViewportLightOverlayProvider>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportTransformGizmoOverlayProvider() {
|
||||||
|
return std::make_unique<SceneViewportTransformGizmoOverlayProvider>();
|
||||||
|
}
|
||||||
|
|
||||||
SceneViewportOverlayProviderRegistry BuildDefaultSceneViewportOverlayProviderRegistry() {
|
SceneViewportOverlayProviderRegistry BuildDefaultSceneViewportOverlayProviderRegistry() {
|
||||||
SceneViewportOverlayProviderRegistry registry;
|
SceneViewportOverlayProviderRegistry registry;
|
||||||
registry.AddProvider(CreateSceneViewportCameraOverlayProvider());
|
registry.AddProvider(CreateSceneViewportCameraOverlayProvider());
|
||||||
registry.AddProvider(CreateSceneViewportLightOverlayProvider());
|
registry.AddProvider(CreateSceneViewportLightOverlayProvider());
|
||||||
|
registry.AddProvider(CreateSceneViewportTransformGizmoOverlayProvider());
|
||||||
return registry;
|
return registry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ struct SceneViewportOverlayBuildContext {
|
|||||||
uint32_t viewportWidth = 0u;
|
uint32_t viewportWidth = 0u;
|
||||||
uint32_t viewportHeight = 0u;
|
uint32_t viewportHeight = 0u;
|
||||||
const std::vector<uint64_t>* selectedObjectIds = nullptr;
|
const std::vector<uint64_t>* selectedObjectIds = nullptr;
|
||||||
|
const SceneViewportTransformGizmoOverlayState* transformGizmoOverlayState = nullptr;
|
||||||
|
|
||||||
bool IsValid() const {
|
bool IsValid() const {
|
||||||
return editorContext != nullptr &&
|
return editorContext != nullptr &&
|
||||||
@@ -60,6 +61,7 @@ private:
|
|||||||
|
|
||||||
std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportCameraOverlayProvider();
|
std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportCameraOverlayProvider();
|
||||||
std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportLightOverlayProvider();
|
std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportLightOverlayProvider();
|
||||||
|
std::unique_ptr<ISceneViewportOverlayProvider> CreateSceneViewportTransformGizmoOverlayProvider();
|
||||||
SceneViewportOverlayProviderRegistry BuildDefaultSceneViewportOverlayProviderRegistry();
|
SceneViewportOverlayProviderRegistry BuildDefaultSceneViewportOverlayProviderRegistry();
|
||||||
|
|
||||||
} // namespace Editor
|
} // namespace Editor
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ inline SceneViewportRenderPlanBuildResult BuildSceneViewportRenderPlan(
|
|||||||
const SceneViewportOverlayData& overlay,
|
const SceneViewportOverlayData& overlay,
|
||||||
const std::vector<uint64_t>& selectedObjectIds,
|
const std::vector<uint64_t>& selectedObjectIds,
|
||||||
const SceneViewportOverlayFrameData& editorOverlayFrameData,
|
const SceneViewportOverlayFrameData& editorOverlayFrameData,
|
||||||
const SceneViewportOverlayFrameData& transientOverlayFrameData,
|
|
||||||
const SceneViewportGridPassFactory& gridPassFactory,
|
const SceneViewportGridPassFactory& gridPassFactory,
|
||||||
const SceneViewportSelectionOutlinePassFactory& selectionOutlinePassFactory,
|
const SceneViewportSelectionOutlinePassFactory& selectionOutlinePassFactory,
|
||||||
const SceneViewportOverlayPassFactory& overlayPassFactory,
|
const SceneViewportOverlayPassFactory& overlayPassFactory,
|
||||||
@@ -85,11 +84,9 @@ inline SceneViewportRenderPlanBuildResult BuildSceneViewportRenderPlan(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SceneViewportOverlayFrameData renderOverlayFrameData = editorOverlayFrameData;
|
if (editorOverlayFrameData.HasOverlayPrimitives() &&
|
||||||
AppendSceneViewportOverlayFrameData(renderOverlayFrameData, transientOverlayFrameData);
|
|
||||||
if (renderOverlayFrameData.HasOverlayPrimitives() &&
|
|
||||||
overlayPassFactory != nullptr) {
|
overlayPassFactory != nullptr) {
|
||||||
std::unique_ptr<Rendering::RenderPass> overlayPass = overlayPassFactory(renderOverlayFrameData);
|
std::unique_ptr<Rendering::RenderPass> overlayPass = overlayPassFactory(editorOverlayFrameData);
|
||||||
if (overlayPass != nullptr) {
|
if (overlayPass != nullptr) {
|
||||||
result.plan.overlayPasses.AddPass(std::move(overlayPass));
|
result.plan.overlayPasses.AddPass(std::move(overlayPass));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -213,6 +213,8 @@ public:
|
|||||||
m_sceneViewportEditorOverlayRenderer.Shutdown();
|
m_sceneViewportEditorOverlayRenderer.Shutdown();
|
||||||
m_sceneViewCamera = {};
|
m_sceneViewCamera = {};
|
||||||
ResetSceneViewEditorOverlayFrameData();
|
ResetSceneViewEditorOverlayFrameData();
|
||||||
|
m_sceneViewTransformGizmoOverlayState = {};
|
||||||
|
m_sceneViewTransformGizmoOverlayDirty = false;
|
||||||
m_sceneViewLastRenderContext = {};
|
m_sceneViewLastRenderContext = {};
|
||||||
m_device = nullptr;
|
m_device = nullptr;
|
||||||
m_backend = nullptr;
|
m_backend = nullptr;
|
||||||
@@ -225,8 +227,8 @@ public:
|
|||||||
entry.requestedWidth = 0;
|
entry.requestedWidth = 0;
|
||||||
entry.requestedHeight = 0;
|
entry.requestedHeight = 0;
|
||||||
}
|
}
|
||||||
m_sceneViewTransientTransformGizmoOverlay = {};
|
m_sceneViewTransformGizmoOverlayState = {};
|
||||||
m_sceneViewTransientTransformGizmoInputs = {};
|
m_sceneViewTransformGizmoOverlayDirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorViewportFrame RequestViewport(EditorViewportKind kind, const ImVec2& requestedSize) override {
|
EditorViewportFrame RequestViewport(EditorViewportKind kind, const ImVec2& requestedSize) override {
|
||||||
@@ -360,23 +362,10 @@ public:
|
|||||||
return m_sceneViewEditorOverlayFrameData;
|
return m_sceneViewEditorOverlayFrameData;
|
||||||
}
|
}
|
||||||
|
|
||||||
const SceneViewportOverlayFrameData& GetSceneViewInteractionOverlayFrameData(
|
void SetSceneViewTransformGizmoOverlayState(
|
||||||
IEditorContext& context,
|
const SceneViewportTransformGizmoOverlayState& state) override {
|
||||||
const SceneViewportOverlayData& overlay,
|
m_sceneViewTransformGizmoOverlayState = state;
|
||||||
const SceneViewportTransformGizmoHandleBuildInputs& inputs) override {
|
m_sceneViewTransformGizmoOverlayDirty = true;
|
||||||
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 RenderRequestedViewports(
|
void RenderRequestedViewports(
|
||||||
@@ -533,7 +522,6 @@ private:
|
|||||||
|
|
||||||
void ResetSceneViewEditorOverlayFrameData() {
|
void ResetSceneViewEditorOverlayFrameData() {
|
||||||
m_sceneViewEditorOverlayFrameData = {};
|
m_sceneViewEditorOverlayFrameData = {};
|
||||||
m_sceneViewInteractionOverlayFrameData = {};
|
|
||||||
m_sceneViewEditorOverlayScene = nullptr;
|
m_sceneViewEditorOverlayScene = nullptr;
|
||||||
m_sceneViewEditorOverlaySelectedObjectIds.clear();
|
m_sceneViewEditorOverlaySelectedObjectIds.clear();
|
||||||
m_sceneViewEditorOverlayViewportWidth = 0u;
|
m_sceneViewEditorOverlayViewportWidth = 0u;
|
||||||
@@ -557,7 +545,8 @@ private:
|
|||||||
uint32_t viewportHeight,
|
uint32_t viewportHeight,
|
||||||
const std::vector<uint64_t>& selectedObjectIds,
|
const std::vector<uint64_t>& selectedObjectIds,
|
||||||
uint64_t contentSignature) const {
|
uint64_t contentSignature) const {
|
||||||
return !m_sceneViewEditorOverlayCached ||
|
return m_sceneViewTransformGizmoOverlayDirty ||
|
||||||
|
!m_sceneViewEditorOverlayCached ||
|
||||||
m_sceneViewEditorOverlayScene != scene ||
|
m_sceneViewEditorOverlayScene != scene ||
|
||||||
m_sceneViewEditorOverlayViewportWidth != viewportWidth ||
|
m_sceneViewEditorOverlayViewportWidth != viewportWidth ||
|
||||||
m_sceneViewEditorOverlayViewportHeight != viewportHeight ||
|
m_sceneViewEditorOverlayViewportHeight != viewportHeight ||
|
||||||
@@ -600,7 +589,8 @@ private:
|
|||||||
overlay,
|
overlay,
|
||||||
viewportWidth,
|
viewportWidth,
|
||||||
viewportHeight,
|
viewportHeight,
|
||||||
selectedObjectIds);
|
selectedObjectIds,
|
||||||
|
&m_sceneViewTransformGizmoOverlayState);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sceneViewEditorOverlayScene = scene;
|
m_sceneViewEditorOverlayScene = scene;
|
||||||
@@ -609,6 +599,7 @@ private:
|
|||||||
m_sceneViewEditorOverlayViewportHeight = viewportHeight;
|
m_sceneViewEditorOverlayViewportHeight = viewportHeight;
|
||||||
m_sceneViewEditorOverlayContentSignature = contentSignature;
|
m_sceneViewEditorOverlayContentSignature = contentSignature;
|
||||||
m_sceneViewEditorOverlayCached = true;
|
m_sceneViewEditorOverlayCached = true;
|
||||||
|
m_sceneViewTransformGizmoOverlayDirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplyViewportRenderFailure(
|
void ApplyViewportRenderFailure(
|
||||||
@@ -653,7 +644,6 @@ private:
|
|||||||
outState.overlay,
|
outState.overlay,
|
||||||
selectedObjectIds,
|
selectedObjectIds,
|
||||||
editorOverlayFrameData,
|
editorOverlayFrameData,
|
||||||
BuildSceneViewTransientTransformGizmoOverlayFrameData(),
|
|
||||||
[this](const Rendering::Passes::InfiniteGridPassData& data) {
|
[this](const Rendering::Passes::InfiniteGridPassData& data) {
|
||||||
return CreateSceneViewportGridPass(
|
return CreateSceneViewportGridPass(
|
||||||
m_sceneViewportGridRenderer,
|
m_sceneViewportGridRenderer,
|
||||||
@@ -864,12 +854,6 @@ private:
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
SceneViewportOverlayFrameData BuildSceneViewTransientTransformGizmoOverlayFrameData() const {
|
|
||||||
return BuildSceneViewportTransformGizmoOverlayFrameData(
|
|
||||||
m_sceneViewTransientTransformGizmoOverlay,
|
|
||||||
m_sceneViewTransientTransformGizmoInputs);
|
|
||||||
}
|
|
||||||
|
|
||||||
UI::ImGuiBackendBridge* m_backend = nullptr;
|
UI::ImGuiBackendBridge* m_backend = nullptr;
|
||||||
RHI::RHIDevice* m_device = nullptr;
|
RHI::RHIDevice* m_device = nullptr;
|
||||||
std::unique_ptr<Rendering::SceneRenderer> m_sceneRenderer;
|
std::unique_ptr<Rendering::SceneRenderer> m_sceneRenderer;
|
||||||
@@ -878,15 +862,14 @@ private:
|
|||||||
std::array<ViewportEntry, 2> m_entries = {};
|
std::array<ViewportEntry, 2> m_entries = {};
|
||||||
SceneViewCameraState m_sceneViewCamera;
|
SceneViewCameraState m_sceneViewCamera;
|
||||||
SceneViewportOverlayFrameData m_sceneViewEditorOverlayFrameData = {};
|
SceneViewportOverlayFrameData m_sceneViewEditorOverlayFrameData = {};
|
||||||
SceneViewportOverlayFrameData m_sceneViewInteractionOverlayFrameData = {};
|
SceneViewportTransformGizmoOverlayState m_sceneViewTransformGizmoOverlayState = {};
|
||||||
SceneViewportOverlayData m_sceneViewTransientTransformGizmoOverlay = {};
|
|
||||||
SceneViewportTransformGizmoHandleBuildInputs m_sceneViewTransientTransformGizmoInputs = {};
|
|
||||||
const Components::Scene* m_sceneViewEditorOverlayScene = nullptr;
|
const Components::Scene* m_sceneViewEditorOverlayScene = nullptr;
|
||||||
std::vector<uint64_t> m_sceneViewEditorOverlaySelectedObjectIds = {};
|
std::vector<uint64_t> m_sceneViewEditorOverlaySelectedObjectIds = {};
|
||||||
uint32_t m_sceneViewEditorOverlayViewportWidth = 0u;
|
uint32_t m_sceneViewEditorOverlayViewportWidth = 0u;
|
||||||
uint32_t m_sceneViewEditorOverlayViewportHeight = 0u;
|
uint32_t m_sceneViewEditorOverlayViewportHeight = 0u;
|
||||||
uint64_t m_sceneViewEditorOverlayContentSignature = 0u;
|
uint64_t m_sceneViewEditorOverlayContentSignature = 0u;
|
||||||
bool m_sceneViewEditorOverlayCached = false;
|
bool m_sceneViewEditorOverlayCached = false;
|
||||||
|
bool m_sceneViewTransformGizmoOverlayDirty = false;
|
||||||
SceneViewportGridPassRenderer m_sceneViewportGridRenderer;
|
SceneViewportGridPassRenderer m_sceneViewportGridRenderer;
|
||||||
SceneViewportSelectionOutlinePassRenderer m_sceneViewportSelectionOutlineRenderer;
|
SceneViewportSelectionOutlinePassRenderer m_sceneViewportSelectionOutlineRenderer;
|
||||||
SceneViewportEditorOverlayPassRenderer m_sceneViewportEditorOverlayRenderer;
|
SceneViewportEditorOverlayPassRenderer m_sceneViewportEditorOverlayRenderer;
|
||||||
|
|||||||
@@ -14,13 +14,9 @@
|
|||||||
#include "Platform/Win32Utf8.h"
|
#include "Platform/Win32Utf8.h"
|
||||||
#include "UI/UI.h"
|
#include "UI/UI.h"
|
||||||
|
|
||||||
#include <XCEngine/Debug/Logger.h>
|
|
||||||
|
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdarg>
|
|
||||||
#include <cstdio>
|
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@@ -388,15 +384,6 @@ SceneViewportToolOverlayResult RenderSceneViewportToolOverlay(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogSceneViewNavigation(Debug::Logger& logger, const char* format, ...) {
|
|
||||||
char buffer[512] = {};
|
|
||||||
va_list args;
|
|
||||||
va_start(args, format);
|
|
||||||
std::vsnprintf(buffer, sizeof(buffer), format, args);
|
|
||||||
va_end(args);
|
|
||||||
logger.Info(Debug::LogCategory::General, buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ShouldBeginSceneViewportNavigationDrag(
|
bool ShouldBeginSceneViewportNavigationDrag(
|
||||||
bool hasInteractiveViewport,
|
bool hasInteractiveViewport,
|
||||||
bool hovered,
|
bool hovered,
|
||||||
@@ -428,7 +415,6 @@ void SceneViewPanel::Render() {
|
|||||||
const ViewportPanelContentResult content = RenderViewportPanelContent(*m_context, EditorViewportKind::Scene);
|
const ViewportPanelContentResult content = RenderViewportPanelContent(*m_context, EditorViewportKind::Scene);
|
||||||
if (IViewportHostService* viewportHostService = m_context->GetViewportHostService()) {
|
if (IViewportHostService* viewportHostService = m_context->GetViewportHostService()) {
|
||||||
const ImGuiIO& io = ImGui::GetIO();
|
const ImGuiIO& io = ImGui::GetIO();
|
||||||
auto& logger = Debug::Logger::Get();
|
|
||||||
const bool hasInteractiveViewport = content.hasViewportArea && content.frame.hasTexture;
|
const bool hasInteractiveViewport = content.hasViewportArea && content.frame.hasTexture;
|
||||||
const SceneViewportToolOverlayResult toolOverlay = RenderSceneViewportToolOverlay(content, m_toolMode);
|
const SceneViewportToolOverlayResult toolOverlay = RenderSceneViewportToolOverlay(content, m_toolMode);
|
||||||
const bool viewportContentHovered = content.hovered && !toolOverlay.hovered;
|
const bool viewportContentHovered = content.hovered && !toolOverlay.hovered;
|
||||||
@@ -536,12 +522,12 @@ void SceneViewPanel::Render() {
|
|||||||
m_scaleGizmo,
|
m_scaleGizmo,
|
||||||
gizmoFrameState.scaleContext)
|
gizmoFrameState.scaleContext)
|
||||||
: SceneViewportTransformGizmoHandleBuildInputs{};
|
: SceneViewportTransformGizmoHandleBuildInputs{};
|
||||||
|
const SceneViewportTransformGizmoOverlayState interactionGizmoOverlayState =
|
||||||
|
BuildSceneViewportTransformGizmoOverlayState(interactionGizmoInputs);
|
||||||
|
viewportHostService->SetSceneViewTransformGizmoOverlayState(interactionGizmoOverlayState);
|
||||||
const SceneViewportOverlayFrameData& interactionOverlayFrameData =
|
const SceneViewportOverlayFrameData& interactionOverlayFrameData =
|
||||||
hasInteractiveViewport
|
hasInteractiveViewport
|
||||||
? viewportHostService->GetSceneViewInteractionOverlayFrameData(
|
? viewportHostService->GetSceneViewEditorOverlayFrameData(*m_context)
|
||||||
*m_context,
|
|
||||||
overlay,
|
|
||||||
interactionGizmoInputs)
|
|
||||||
: emptySceneOverlayFrameData;
|
: emptySceneOverlayFrameData;
|
||||||
const SceneViewportOverlayHandleHitResult overlayHandleHit =
|
const SceneViewportOverlayHandleHitResult overlayHandleHit =
|
||||||
hasInteractiveViewport
|
hasInteractiveViewport
|
||||||
@@ -664,25 +650,6 @@ void SceneViewPanel::Render() {
|
|||||||
ImGuiMouseButton_Middle);
|
ImGuiMouseButton_Middle);
|
||||||
const bool beginPanDrag = beginLeftPanDrag || beginMiddlePanDrag;
|
const bool beginPanDrag = beginLeftPanDrag || beginMiddlePanDrag;
|
||||||
|
|
||||||
if (ImGui::IsMouseClicked(ImGuiMouseButton_Right) || ImGui::IsMouseClicked(ImGuiMouseButton_Middle)) {
|
|
||||||
LogSceneViewNavigation(
|
|
||||||
logger,
|
|
||||||
"SceneView nav click hovered=%d focused=%d hasViewport=%d clickedR=%d clickedM=%d downR=%d downM=%d "
|
|
||||||
"look=%d pan=%d gizmoActive=%d ioDelta=(%.2f, %.2f)",
|
|
||||||
content.hovered ? 1 : 0,
|
|
||||||
content.focused ? 1 : 0,
|
|
||||||
hasInteractiveViewport ? 1 : 0,
|
|
||||||
ImGui::IsMouseClicked(ImGuiMouseButton_Right) ? 1 : 0,
|
|
||||||
ImGui::IsMouseClicked(ImGuiMouseButton_Middle) ? 1 : 0,
|
|
||||||
ImGui::IsMouseDown(ImGuiMouseButton_Right) ? 1 : 0,
|
|
||||||
ImGui::IsMouseDown(ImGuiMouseButton_Middle) ? 1 : 0,
|
|
||||||
m_lookDragging ? 1 : 0,
|
|
||||||
m_panDragging ? 1 : 0,
|
|
||||||
gizmoActive ? 1 : 0,
|
|
||||||
io.MouseDelta.x,
|
|
||||||
io.MouseDelta.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (toolOverlay.clicked || beginTransformGizmo || orientationGizmoClick || sceneIconClick || selectClick || beginLookDrag ||
|
if (toolOverlay.clicked || beginTransformGizmo || orientationGizmoClick || sceneIconClick || selectClick || beginLookDrag ||
|
||||||
beginPanDrag) {
|
beginPanDrag) {
|
||||||
ImGui::SetWindowFocus();
|
ImGui::SetWindowFocus();
|
||||||
@@ -741,14 +708,6 @@ void SceneViewPanel::Render() {
|
|||||||
m_panDragging = false;
|
m_panDragging = false;
|
||||||
m_loggedLookDelta = false;
|
m_loggedLookDelta = false;
|
||||||
m_loggedPanDelta = false;
|
m_loggedPanDelta = false;
|
||||||
LogSceneViewNavigation(
|
|
||||||
logger,
|
|
||||||
"SceneView begin look drag hovered=%d focused=%d downR=%d downM=%d gizmoActive=%d",
|
|
||||||
content.hovered ? 1 : 0,
|
|
||||||
content.focused ? 1 : 0,
|
|
||||||
ImGui::IsMouseDown(ImGuiMouseButton_Right) ? 1 : 0,
|
|
||||||
ImGui::IsMouseDown(ImGuiMouseButton_Middle) ? 1 : 0,
|
|
||||||
gizmoActive ? 1 : 0);
|
|
||||||
}
|
}
|
||||||
if (beginPanDrag) {
|
if (beginPanDrag) {
|
||||||
m_panDragging = true;
|
m_panDragging = true;
|
||||||
@@ -756,25 +715,13 @@ void SceneViewPanel::Render() {
|
|||||||
m_panDragButton = beginLeftPanDrag ? ImGuiMouseButton_Left : ImGuiMouseButton_Middle;
|
m_panDragButton = beginLeftPanDrag ? ImGuiMouseButton_Left : ImGuiMouseButton_Middle;
|
||||||
m_loggedPanDelta = false;
|
m_loggedPanDelta = false;
|
||||||
m_loggedLookDelta = false;
|
m_loggedLookDelta = false;
|
||||||
LogSceneViewNavigation(
|
|
||||||
logger,
|
|
||||||
"SceneView begin pan drag hovered=%d focused=%d button=%d downR=%d downM=%d downL=%d gizmoActive=%d",
|
|
||||||
content.hovered ? 1 : 0,
|
|
||||||
content.focused ? 1 : 0,
|
|
||||||
m_panDragButton,
|
|
||||||
ImGui::IsMouseDown(ImGuiMouseButton_Right) ? 1 : 0,
|
|
||||||
ImGui::IsMouseDown(ImGuiMouseButton_Middle) ? 1 : 0,
|
|
||||||
ImGui::IsMouseDown(ImGuiMouseButton_Left) ? 1 : 0,
|
|
||||||
gizmoActive ? 1 : 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_lookDragging && !ImGui::IsMouseDown(ImGuiMouseButton_Right)) {
|
if (m_lookDragging && !ImGui::IsMouseDown(ImGuiMouseButton_Right)) {
|
||||||
LogSceneViewNavigation(logger, "SceneView end look drag");
|
|
||||||
m_lookDragging = false;
|
m_lookDragging = false;
|
||||||
m_loggedLookDelta = false;
|
m_loggedLookDelta = false;
|
||||||
}
|
}
|
||||||
if (m_panDragging && !ImGui::IsMouseDown(m_panDragButton)) {
|
if (m_panDragging && !ImGui::IsMouseDown(m_panDragButton)) {
|
||||||
LogSceneViewNavigation(logger, "SceneView end pan drag");
|
|
||||||
m_panDragging = false;
|
m_panDragging = false;
|
||||||
m_panDragButton = ImGuiMouseButton_Middle;
|
m_panDragButton = ImGuiMouseButton_Middle;
|
||||||
m_loggedPanDelta = false;
|
m_loggedPanDelta = false;
|
||||||
@@ -819,13 +766,6 @@ void SceneViewPanel::Render() {
|
|||||||
input.mouseDelta = io.MouseDelta;
|
input.mouseDelta = io.MouseDelta;
|
||||||
if (!m_loggedLookDelta &&
|
if (!m_loggedLookDelta &&
|
||||||
(input.mouseDelta.x != 0.0f || input.mouseDelta.y != 0.0f)) {
|
(input.mouseDelta.x != 0.0f || input.mouseDelta.y != 0.0f)) {
|
||||||
LogSceneViewNavigation(
|
|
||||||
logger,
|
|
||||||
"SceneView look delta=(%.2f, %.2f) hovered=%d downR=%d",
|
|
||||||
input.mouseDelta.x,
|
|
||||||
input.mouseDelta.y,
|
|
||||||
content.hovered ? 1 : 0,
|
|
||||||
ImGui::IsMouseDown(ImGuiMouseButton_Right) ? 1 : 0);
|
|
||||||
m_loggedLookDelta = true;
|
m_loggedLookDelta = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -834,13 +774,6 @@ void SceneViewPanel::Render() {
|
|||||||
input.mouseDelta = io.MouseDelta;
|
input.mouseDelta = io.MouseDelta;
|
||||||
if (!m_loggedPanDelta &&
|
if (!m_loggedPanDelta &&
|
||||||
(input.mouseDelta.x != 0.0f || input.mouseDelta.y != 0.0f)) {
|
(input.mouseDelta.x != 0.0f || input.mouseDelta.y != 0.0f)) {
|
||||||
LogSceneViewNavigation(
|
|
||||||
logger,
|
|
||||||
"SceneView pan delta=(%.2f, %.2f) hovered=%d downM=%d",
|
|
||||||
input.mouseDelta.x,
|
|
||||||
input.mouseDelta.y,
|
|
||||||
content.hovered ? 1 : 0,
|
|
||||||
ImGui::IsMouseDown(ImGuiMouseButton_Middle) ? 1 : 0);
|
|
||||||
m_loggedPanDelta = true;
|
m_loggedPanDelta = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -866,18 +799,18 @@ void SceneViewPanel::Render() {
|
|||||||
showingScaleGizmo,
|
showingScaleGizmo,
|
||||||
m_scaleGizmo);
|
m_scaleGizmo);
|
||||||
|
|
||||||
viewportHostService->SetSceneViewTransientTransformGizmoOverlayData(
|
viewportHostService->SetSceneViewTransformGizmoOverlayState(
|
||||||
overlay,
|
BuildSceneViewportTransformGizmoOverlayState(
|
||||||
BuildSceneViewportTransformGizmoHandleBuildInputs(
|
BuildSceneViewportTransformGizmoHandleBuildInputs(
|
||||||
showingMoveGizmo,
|
showingMoveGizmo,
|
||||||
m_moveGizmo,
|
m_moveGizmo,
|
||||||
drawGizmoFrameState.moveContext,
|
drawGizmoFrameState.moveContext,
|
||||||
showingRotateGizmo,
|
showingRotateGizmo,
|
||||||
m_rotateGizmo,
|
m_rotateGizmo,
|
||||||
drawGizmoFrameState.rotateContext,
|
drawGizmoFrameState.rotateContext,
|
||||||
showingScaleGizmo,
|
showingScaleGizmo,
|
||||||
m_scaleGizmo,
|
m_scaleGizmo,
|
||||||
drawGizmoFrameState.scaleContext));
|
drawGizmoFrameState.scaleContext)));
|
||||||
|
|
||||||
DrawSceneViewportOverlay(
|
DrawSceneViewportOverlay(
|
||||||
ImGui::GetWindowDrawList(),
|
ImGui::GetWindowDrawList(),
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include "Core/EditorContext.h"
|
#include "Core/EditorContext.h"
|
||||||
#include "Viewport/SceneViewportOverlayBuilder.h"
|
#include "Viewport/SceneViewportOverlayBuilder.h"
|
||||||
|
#include "Viewport/SceneViewportOverlayHandleBuilder.h"
|
||||||
#include "Viewport/SceneViewportOverlayProviders.h"
|
#include "Viewport/SceneViewportOverlayProviders.h"
|
||||||
|
|
||||||
#include <XCEngine/Components/CameraComponent.h>
|
#include <XCEngine/Components/CameraComponent.h>
|
||||||
@@ -62,17 +63,35 @@ SceneViewportOverlayBuildContext CreateBuildContext(
|
|||||||
const SceneViewportOverlayData& overlay,
|
const SceneViewportOverlayData& overlay,
|
||||||
const std::vector<uint64_t>& selectedObjectIds,
|
const std::vector<uint64_t>& selectedObjectIds,
|
||||||
uint32_t viewportWidth = 1280u,
|
uint32_t viewportWidth = 1280u,
|
||||||
uint32_t viewportHeight = 720u) {
|
uint32_t viewportHeight = 720u,
|
||||||
|
const SceneViewportTransformGizmoOverlayState* transformGizmoOverlayState = nullptr) {
|
||||||
return {
|
return {
|
||||||
&context,
|
&context,
|
||||||
context.GetSceneManager().GetScene(),
|
context.GetSceneManager().GetScene(),
|
||||||
&overlay,
|
&overlay,
|
||||||
viewportWidth,
|
viewportWidth,
|
||||||
viewportHeight,
|
viewportHeight,
|
||||||
&selectedObjectIds
|
&selectedObjectIds,
|
||||||
|
transformGizmoOverlayState
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SceneViewportTransformGizmoOverlayState CreateMoveGizmoOverlayState(uint64_t entityId = 99u) {
|
||||||
|
SceneViewportTransformGizmoOverlayState state = {};
|
||||||
|
state.hasMoveGizmo = true;
|
||||||
|
state.moveEntityId = entityId;
|
||||||
|
state.moveGizmo.visible = true;
|
||||||
|
|
||||||
|
SceneViewportMoveGizmoHandleDrawData& handle = state.moveGizmo.handles[0];
|
||||||
|
handle.axis = SceneViewportGizmoAxis::X;
|
||||||
|
handle.start = Math::Vector2(24.0f, 48.0f);
|
||||||
|
handle.end = Math::Vector2(104.0f, 48.0f);
|
||||||
|
handle.color = Math::Color(0.91f, 0.09f, 0.05f, 1.0f);
|
||||||
|
handle.visible = true;
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
bool ContainsSpriteKind(
|
bool ContainsSpriteKind(
|
||||||
const SceneViewportOverlayFrameData& frameData,
|
const SceneViewportOverlayFrameData& frameData,
|
||||||
SceneViewportOverlaySpriteTextureKind textureKind) {
|
SceneViewportOverlaySpriteTextureKind textureKind) {
|
||||||
@@ -173,6 +192,32 @@ TEST(SceneViewportOverlayProviderRegistryTest, LightProviderBuildsSceneIconAndSe
|
|||||||
EXPECT_GT(frameData.worldLines.size(), 0u);
|
EXPECT_GT(frameData.worldLines.size(), 0u);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(SceneViewportOverlayProviderRegistryTest, TransformGizmoProviderBuildsOverlayFromFormalState) {
|
||||||
|
EditorContext context;
|
||||||
|
context.GetSceneManager().NewScene("Transform Gizmo Overlay Provider");
|
||||||
|
|
||||||
|
const SceneViewportOverlayData overlay = CreateValidOverlay();
|
||||||
|
const std::vector<uint64_t> selectedObjectIds = {};
|
||||||
|
const SceneViewportTransformGizmoOverlayState gizmoState = CreateMoveGizmoOverlayState(73u);
|
||||||
|
const SceneViewportOverlayBuildContext buildContext =
|
||||||
|
CreateBuildContext(context, overlay, selectedObjectIds, 1280u, 720u, &gizmoState);
|
||||||
|
|
||||||
|
auto provider = CreateSceneViewportTransformGizmoOverlayProvider();
|
||||||
|
ASSERT_NE(provider, nullptr);
|
||||||
|
|
||||||
|
SceneViewportOverlayFrameData frameData = {};
|
||||||
|
frameData.overlay = overlay;
|
||||||
|
provider->AppendOverlay(buildContext, frameData);
|
||||||
|
|
||||||
|
ASSERT_EQ(frameData.handleRecords.size(), 1u);
|
||||||
|
EXPECT_EQ(frameData.handleRecords[0].kind, SceneViewportOverlayHandleKind::MoveAxis);
|
||||||
|
EXPECT_EQ(frameData.handleRecords[0].handleId, static_cast<uint64_t>(SceneViewportGizmoAxis::X));
|
||||||
|
EXPECT_EQ(frameData.handleRecords[0].entityId, 73u);
|
||||||
|
EXPECT_GT(frameData.screenTriangles.size(), 0u);
|
||||||
|
EXPECT_TRUE(frameData.worldLines.empty());
|
||||||
|
EXPECT_TRUE(frameData.worldSprites.empty());
|
||||||
|
}
|
||||||
|
|
||||||
TEST(
|
TEST(
|
||||||
SceneViewportOverlayProviderRegistryTest,
|
SceneViewportOverlayProviderRegistryTest,
|
||||||
OverlayBuilderUsesDefaultRegistryToAggregateCameraAndLightProviders) {
|
OverlayBuilderUsesDefaultRegistryToAggregateCameraAndLightProviders) {
|
||||||
@@ -206,5 +251,25 @@ TEST(
|
|||||||
EXPECT_GT(frameData.worldLines.size(), 12u);
|
EXPECT_GT(frameData.worldLines.size(), 12u);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(
|
||||||
|
SceneViewportOverlayProviderRegistryTest,
|
||||||
|
OverlayBuilderAppendsFormalTransformGizmoProviderOutput) {
|
||||||
|
EditorContext context;
|
||||||
|
context.GetSceneManager().NewScene("Overlay Builder Transform Gizmo");
|
||||||
|
|
||||||
|
const SceneViewportOverlayData overlay = CreateValidOverlay();
|
||||||
|
const std::vector<uint64_t> selectedObjectIds = {};
|
||||||
|
const SceneViewportTransformGizmoOverlayState gizmoState = CreateMoveGizmoOverlayState(91u);
|
||||||
|
|
||||||
|
SceneViewportOverlayBuilder builder;
|
||||||
|
const SceneViewportOverlayFrameData frameData =
|
||||||
|
builder.Build(context, overlay, 1280u, 720u, selectedObjectIds, &gizmoState);
|
||||||
|
|
||||||
|
EXPECT_TRUE(frameData.overlay.valid);
|
||||||
|
ASSERT_EQ(frameData.handleRecords.size(), 1u);
|
||||||
|
EXPECT_EQ(frameData.handleRecords[0].entityId, 91u);
|
||||||
|
EXPECT_GT(frameData.screenTriangles.size(), 0u);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace XCEngine::Editor
|
} // namespace XCEngine::Editor
|
||||||
|
|||||||
@@ -255,11 +255,6 @@ TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanCollectsPostSceneA
|
|||||||
overlay,
|
overlay,
|
||||||
XCEngine::Math::Vector3::Zero(),
|
XCEngine::Math::Vector3::Zero(),
|
||||||
XCEngine::Math::Vector3::Right());
|
XCEngine::Math::Vector3::Right());
|
||||||
const SceneViewportOverlayFrameData transientOverlayFrameData =
|
|
||||||
CreateOverlayFrameDataWithLine(
|
|
||||||
overlay,
|
|
||||||
XCEngine::Math::Vector3::Zero(),
|
|
||||||
XCEngine::Math::Vector3::Up());
|
|
||||||
|
|
||||||
size_t factoryCallCount = 0u;
|
size_t factoryCallCount = 0u;
|
||||||
size_t combinedWorldLineCount = 0u;
|
size_t combinedWorldLineCount = 0u;
|
||||||
@@ -270,7 +265,6 @@ TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanCollectsPostSceneA
|
|||||||
overlay,
|
overlay,
|
||||||
{ 7u, 11u },
|
{ 7u, 11u },
|
||||||
editorOverlayFrameData,
|
editorOverlayFrameData,
|
||||||
transientOverlayFrameData,
|
|
||||||
[&gridPassFactoryCallCount](const XCEngine::Rendering::Passes::InfiniteGridPassData& data) {
|
[&gridPassFactoryCallCount](const XCEngine::Rendering::Passes::InfiniteGridPassData& data) {
|
||||||
++gridPassFactoryCallCount;
|
++gridPassFactoryCallCount;
|
||||||
EXPECT_TRUE(data.valid);
|
EXPECT_TRUE(data.valid);
|
||||||
@@ -298,7 +292,7 @@ TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanCollectsPostSceneA
|
|||||||
EXPECT_EQ(factoryCallCount, 1u);
|
EXPECT_EQ(factoryCallCount, 1u);
|
||||||
EXPECT_EQ(gridPassFactoryCallCount, 1u);
|
EXPECT_EQ(gridPassFactoryCallCount, 1u);
|
||||||
EXPECT_EQ(selectionOutlinePassFactoryCallCount, 1u);
|
EXPECT_EQ(selectionOutlinePassFactoryCallCount, 1u);
|
||||||
EXPECT_EQ(combinedWorldLineCount, 2u);
|
EXPECT_EQ(combinedWorldLineCount, 1u);
|
||||||
EXPECT_EQ(result.warningStatusText, nullptr);
|
EXPECT_EQ(result.warningStatusText, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -310,7 +304,6 @@ TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanWarnsWhenSelection
|
|||||||
overlay,
|
overlay,
|
||||||
{ 42u },
|
{ 42u },
|
||||||
{},
|
{},
|
||||||
{},
|
|
||||||
[](const XCEngine::Rendering::Passes::InfiniteGridPassData&) {
|
[](const XCEngine::Rendering::Passes::InfiniteGridPassData&) {
|
||||||
return std::make_unique<NoopRenderPass>();
|
return std::make_unique<NoopRenderPass>();
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user