diff --git a/editor/src/Viewport/Passes/SceneViewportGridPass.cpp b/editor/src/Viewport/Passes/SceneViewportGridPass.cpp index 30696476..8c234dd8 100644 --- a/editor/src/Viewport/Passes/SceneViewportGridPass.cpp +++ b/editor/src/Viewport/Passes/SceneViewportGridPass.cpp @@ -11,7 +11,7 @@ class SceneViewportGridPass final : public Rendering::RenderPass { public: SceneViewportGridPass( SceneViewportGridPassRenderer& renderer, - const Rendering::Passes::InfiniteGridPassData& data) + const SceneViewportGridPassData& data) : m_renderer(renderer) , m_data(data) { } @@ -29,7 +29,7 @@ public: private: SceneViewportGridPassRenderer& m_renderer; - Rendering::Passes::InfiniteGridPassData m_data = {}; + SceneViewportGridPassData m_data = {}; }; } // namespace @@ -45,13 +45,16 @@ void SceneViewportGridPassRenderer::Shutdown() { bool SceneViewportGridPassRenderer::Render( const Rendering::RenderContext& renderContext, const Rendering::RenderSurface& surface, - const Rendering::Passes::InfiniteGridPassData& data) { - return m_gridPass.Render(renderContext, surface, data); + const SceneViewportGridPassData& data) { + return m_gridPass.Render( + renderContext, + surface, + ToBuiltinSceneViewportGridPassData(data)); } std::unique_ptr CreateSceneViewportGridPass( SceneViewportGridPassRenderer& renderer, - const Rendering::Passes::InfiniteGridPassData& data) { + const SceneViewportGridPassData& data) { return std::make_unique(renderer, data); } diff --git a/editor/src/Viewport/Passes/SceneViewportGridPass.h b/editor/src/Viewport/Passes/SceneViewportGridPass.h index 82b16649..f6bc2150 100644 --- a/editor/src/Viewport/Passes/SceneViewportGridPass.h +++ b/editor/src/Viewport/Passes/SceneViewportGridPass.h @@ -1,5 +1,7 @@ #pragma once +#include "Viewport/SceneViewportPassSpecs.h" + #include #include #include @@ -20,7 +22,7 @@ public: bool Render( const Rendering::RenderContext& renderContext, const Rendering::RenderSurface& surface, - const Rendering::Passes::InfiniteGridPassData& data); + const SceneViewportGridPassData& data); private: Rendering::Passes::BuiltinInfiniteGridPass m_gridPass; @@ -28,7 +30,7 @@ private: std::unique_ptr CreateSceneViewportGridPass( SceneViewportGridPassRenderer& renderer, - const Rendering::Passes::InfiniteGridPassData& data); + const SceneViewportGridPassData& data); } // namespace Editor } // namespace XCEngine diff --git a/editor/src/Viewport/Passes/SceneViewportSelectionOutlinePass.cpp b/editor/src/Viewport/Passes/SceneViewportSelectionOutlinePass.cpp index 5ba0247c..e6e7ee05 100644 --- a/editor/src/Viewport/Passes/SceneViewportSelectionOutlinePass.cpp +++ b/editor/src/Viewport/Passes/SceneViewportSelectionOutlinePass.cpp @@ -1,3 +1,5 @@ +#include + #include "Passes/SceneViewportSelectionOutlinePass.h" #include "Viewport/SceneViewportShaderPaths.h" @@ -13,7 +15,7 @@ public: SceneViewportSelectionOutlinePassRenderer& renderer, RHI::RHIResourceView* objectIdTextureView, std::vector selectedObjectIds, - const Rendering::Passes::ObjectIdOutlineStyle& style) + const SceneViewportSelectionOutlineStyle& style) : m_renderer(renderer) , m_objectIdTextureView(objectIdTextureView) , m_selectedObjectIds(std::move(selectedObjectIds)) @@ -37,7 +39,7 @@ private: SceneViewportSelectionOutlinePassRenderer& m_renderer; RHI::RHIResourceView* m_objectIdTextureView = nullptr; std::vector m_selectedObjectIds = {}; - Rendering::Passes::ObjectIdOutlineStyle m_style = {}; + SceneViewportSelectionOutlineStyle m_style = {}; }; } // namespace @@ -55,20 +57,20 @@ bool SceneViewportSelectionOutlinePassRenderer::Render( const Rendering::RenderSurface& surface, RHI::RHIResourceView* objectIdTextureView, const std::vector& selectedObjectIds, - const Rendering::Passes::ObjectIdOutlineStyle& style) { + const SceneViewportSelectionOutlineStyle& style) { return m_outlinePass.Render( renderContext, surface, objectIdTextureView, selectedObjectIds, - style); + ToBuiltinSceneViewportSelectionOutlineStyle(style)); } std::unique_ptr CreateSceneViewportSelectionOutlinePass( SceneViewportSelectionOutlinePassRenderer& renderer, RHI::RHIResourceView* objectIdTextureView, const std::vector& selectedObjectIds, - const Rendering::Passes::ObjectIdOutlineStyle& style) { + const SceneViewportSelectionOutlineStyle& style) { return std::make_unique( renderer, objectIdTextureView, diff --git a/editor/src/Viewport/Passes/SceneViewportSelectionOutlinePass.h b/editor/src/Viewport/Passes/SceneViewportSelectionOutlinePass.h index 75dbe760..02238517 100644 --- a/editor/src/Viewport/Passes/SceneViewportSelectionOutlinePass.h +++ b/editor/src/Viewport/Passes/SceneViewportSelectionOutlinePass.h @@ -1,5 +1,7 @@ #pragma once +#include "Viewport/SceneViewportPassSpecs.h" + #include #include #include @@ -24,7 +26,7 @@ public: const Rendering::RenderSurface& surface, RHI::RHIResourceView* objectIdTextureView, const std::vector& selectedObjectIds, - const Rendering::Passes::ObjectIdOutlineStyle& style); + const SceneViewportSelectionOutlineStyle& style); private: Rendering::Passes::BuiltinObjectIdOutlinePass m_outlinePass; @@ -34,7 +36,7 @@ std::unique_ptr CreateSceneViewportSelectionOutlinePass( SceneViewportSelectionOutlinePassRenderer& renderer, RHI::RHIResourceView* objectIdTextureView, const std::vector& selectedObjectIds, - const Rendering::Passes::ObjectIdOutlineStyle& style); + const SceneViewportSelectionOutlineStyle& style); } // namespace Editor } // namespace XCEngine diff --git a/editor/src/Viewport/SceneViewportPassSpecs.h b/editor/src/Viewport/SceneViewportPassSpecs.h new file mode 100644 index 00000000..777b5d07 --- /dev/null +++ b/editor/src/Viewport/SceneViewportPassSpecs.h @@ -0,0 +1,54 @@ +#pragma once + +#include +#include +#include +#include + +namespace XCEngine { +namespace Editor { + +struct SceneViewportGridPassData { + bool valid = false; + Math::Vector3 cameraPosition = Math::Vector3::Zero(); + Math::Vector3 cameraForward = Math::Vector3::Forward(); + Math::Vector3 cameraRight = Math::Vector3::Right(); + Math::Vector3 cameraUp = Math::Vector3::Up(); + float verticalFovDegrees = 60.0f; + float nearClipPlane = 0.03f; + float farClipPlane = 2000.0f; + float orbitDistance = 6.0f; +}; + +inline Rendering::Passes::InfiniteGridPassData ToBuiltinSceneViewportGridPassData( + const SceneViewportGridPassData& data) { + Rendering::Passes::InfiniteGridPassData builtinData = {}; + builtinData.valid = data.valid; + builtinData.cameraPosition = data.cameraPosition; + builtinData.cameraForward = data.cameraForward; + builtinData.cameraRight = data.cameraRight; + builtinData.cameraUp = data.cameraUp; + builtinData.verticalFovDegrees = data.verticalFovDegrees; + builtinData.nearClipPlane = data.nearClipPlane; + builtinData.farClipPlane = data.farClipPlane; + builtinData.orbitDistance = data.orbitDistance; + return builtinData; +} + +struct SceneViewportSelectionOutlineStyle { + Math::Color outlineColor = Math::Color(1.0f, 0.4f, 0.0f, 1.0f); + float outlineWidthPixels = 2.0f; + bool debugSelectionMask = false; +}; + +inline Rendering::Passes::ObjectIdOutlineStyle ToBuiltinSceneViewportSelectionOutlineStyle( + const SceneViewportSelectionOutlineStyle& style) { + Rendering::Passes::ObjectIdOutlineStyle builtinStyle = {}; + builtinStyle.outlineColor = style.outlineColor; + builtinStyle.outlineWidthPixels = style.outlineWidthPixels; + builtinStyle.debugSelectionMask = style.debugSelectionMask; + return builtinStyle; +} + +} // namespace Editor +} // namespace XCEngine diff --git a/editor/src/Viewport/SceneViewportRenderPlan.h b/editor/src/Viewport/SceneViewportRenderPlan.h index 5d17b46a..05883fe8 100644 --- a/editor/src/Viewport/SceneViewportRenderPlan.h +++ b/editor/src/Viewport/SceneViewportRenderPlan.h @@ -35,11 +35,11 @@ struct SceneViewportRenderPlan { using SceneViewportOverlayPassFactory = std::function(const SceneViewportOverlayFrameData&)>; using SceneViewportGridPassFactory = - std::function(const Rendering::Passes::InfiniteGridPassData&)>; + std::function(const SceneViewportGridPassData&)>; using SceneViewportSelectionOutlinePassFactory = std::function( RHI::RHIResourceView*, const std::vector&, - const Rendering::Passes::ObjectIdOutlineStyle&)>; + const SceneViewportSelectionOutlineStyle&)>; struct SceneViewportRenderPlanBuildResult { SceneViewportRenderPlan plan = {}; @@ -60,7 +60,7 @@ inline SceneViewportRenderPlanBuildResult BuildSceneViewportRenderPlan( return result; } - const Rendering::Passes::InfiniteGridPassData gridPassData = BuildSceneViewportGridPassData(overlay); + const SceneViewportGridPassData gridPassData = BuildSceneViewportGridPassData(overlay); if (gridPassData.valid && gridPassFactory != nullptr) { std::unique_ptr gridPass = gridPassFactory(gridPassData); if (gridPass != nullptr) { diff --git a/editor/src/Viewport/ViewportHostRenderFlowUtils.h b/editor/src/Viewport/ViewportHostRenderFlowUtils.h index efd59f1d..8eaad18b 100644 --- a/editor/src/Viewport/ViewportHostRenderFlowUtils.h +++ b/editor/src/Viewport/ViewportHostRenderFlowUtils.h @@ -1,10 +1,10 @@ #pragma once #include "IViewportHostService.h" +#include "SceneViewportPassSpecs.h" #include "ViewportHostRenderTargets.h" #include -#include #include #include @@ -115,9 +115,9 @@ inline ViewportRenderFallbackPolicy BuildGameViewportRenderFailurePolicy( return policy; } -inline Rendering::Passes::InfiniteGridPassData BuildSceneViewportGridPassData( +inline SceneViewportGridPassData BuildSceneViewportGridPassData( const SceneViewportOverlayData& overlay) { - Rendering::Passes::InfiniteGridPassData data = {}; + SceneViewportGridPassData data = {}; data.valid = overlay.valid; data.cameraPosition = overlay.cameraPosition; data.cameraForward = overlay.cameraForward; @@ -130,9 +130,9 @@ inline Rendering::Passes::InfiniteGridPassData BuildSceneViewportGridPassData( return data; } -inline Rendering::Passes::ObjectIdOutlineStyle BuildSceneViewportSelectionOutlineStyle( +inline SceneViewportSelectionOutlineStyle BuildSceneViewportSelectionOutlineStyle( bool debugSelectionMask = false) { - Rendering::Passes::ObjectIdOutlineStyle style = {}; + SceneViewportSelectionOutlineStyle style = {}; style.outlineColor = Math::Color(1.0f, 0.4f, 0.0f, 1.0f); style.outlineWidthPixels = 2.0f; style.debugSelectionMask = debugSelectionMask; diff --git a/editor/src/Viewport/ViewportHostService.h b/editor/src/Viewport/ViewportHostService.h index ade72c59..3e0a7237 100644 --- a/editor/src/Viewport/ViewportHostService.h +++ b/editor/src/Viewport/ViewportHostService.h @@ -644,7 +644,7 @@ private: outState.overlay, selectedObjectIds, editorOverlayFrameData, - [this](const Rendering::Passes::InfiniteGridPassData& data) { + [this](const SceneViewportGridPassData& data) { return CreateSceneViewportGridPass( m_sceneViewportGridRenderer, data); @@ -652,7 +652,7 @@ private: [this]( RHI::RHIResourceView* objectIdTextureView, const std::vector& selectedObjectIds, - const Rendering::Passes::ObjectIdOutlineStyle& style) { + const SceneViewportSelectionOutlineStyle& style) { return CreateSceneViewportSelectionOutlinePass( m_sceneViewportSelectionOutlineRenderer, objectIdTextureView,