Extract editor-owned scene viewport pass specs
This commit is contained in:
@@ -11,7 +11,7 @@ class SceneViewportGridPass final : public Rendering::RenderPass {
|
|||||||
public:
|
public:
|
||||||
SceneViewportGridPass(
|
SceneViewportGridPass(
|
||||||
SceneViewportGridPassRenderer& renderer,
|
SceneViewportGridPassRenderer& renderer,
|
||||||
const Rendering::Passes::InfiniteGridPassData& data)
|
const SceneViewportGridPassData& data)
|
||||||
: m_renderer(renderer)
|
: m_renderer(renderer)
|
||||||
, m_data(data) {
|
, m_data(data) {
|
||||||
}
|
}
|
||||||
@@ -29,7 +29,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
SceneViewportGridPassRenderer& m_renderer;
|
SceneViewportGridPassRenderer& m_renderer;
|
||||||
Rendering::Passes::InfiniteGridPassData m_data = {};
|
SceneViewportGridPassData m_data = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
@@ -45,13 +45,16 @@ void SceneViewportGridPassRenderer::Shutdown() {
|
|||||||
bool SceneViewportGridPassRenderer::Render(
|
bool SceneViewportGridPassRenderer::Render(
|
||||||
const Rendering::RenderContext& renderContext,
|
const Rendering::RenderContext& renderContext,
|
||||||
const Rendering::RenderSurface& surface,
|
const Rendering::RenderSurface& surface,
|
||||||
const Rendering::Passes::InfiniteGridPassData& data) {
|
const SceneViewportGridPassData& data) {
|
||||||
return m_gridPass.Render(renderContext, surface, data);
|
return m_gridPass.Render(
|
||||||
|
renderContext,
|
||||||
|
surface,
|
||||||
|
ToBuiltinSceneViewportGridPassData(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Rendering::RenderPass> CreateSceneViewportGridPass(
|
std::unique_ptr<Rendering::RenderPass> CreateSceneViewportGridPass(
|
||||||
SceneViewportGridPassRenderer& renderer,
|
SceneViewportGridPassRenderer& renderer,
|
||||||
const Rendering::Passes::InfiniteGridPassData& data) {
|
const SceneViewportGridPassData& data) {
|
||||||
return std::make_unique<SceneViewportGridPass>(renderer, data);
|
return std::make_unique<SceneViewportGridPass>(renderer, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "Viewport/SceneViewportPassSpecs.h"
|
||||||
|
|
||||||
#include <XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h>
|
#include <XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h>
|
||||||
#include <XCEngine/Rendering/RenderContext.h>
|
#include <XCEngine/Rendering/RenderContext.h>
|
||||||
#include <XCEngine/Rendering/RenderPass.h>
|
#include <XCEngine/Rendering/RenderPass.h>
|
||||||
@@ -20,7 +22,7 @@ public:
|
|||||||
bool Render(
|
bool Render(
|
||||||
const Rendering::RenderContext& renderContext,
|
const Rendering::RenderContext& renderContext,
|
||||||
const Rendering::RenderSurface& surface,
|
const Rendering::RenderSurface& surface,
|
||||||
const Rendering::Passes::InfiniteGridPassData& data);
|
const SceneViewportGridPassData& data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Rendering::Passes::BuiltinInfiniteGridPass m_gridPass;
|
Rendering::Passes::BuiltinInfiniteGridPass m_gridPass;
|
||||||
@@ -28,7 +30,7 @@ private:
|
|||||||
|
|
||||||
std::unique_ptr<Rendering::RenderPass> CreateSceneViewportGridPass(
|
std::unique_ptr<Rendering::RenderPass> CreateSceneViewportGridPass(
|
||||||
SceneViewportGridPassRenderer& renderer,
|
SceneViewportGridPassRenderer& renderer,
|
||||||
const Rendering::Passes::InfiniteGridPassData& data);
|
const SceneViewportGridPassData& data);
|
||||||
|
|
||||||
} // namespace Editor
|
} // namespace Editor
|
||||||
} // namespace XCEngine
|
} // namespace XCEngine
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#include <XCEngine/Core/Asset/ResourceManager.h>
|
||||||
|
|
||||||
#include "Passes/SceneViewportSelectionOutlinePass.h"
|
#include "Passes/SceneViewportSelectionOutlinePass.h"
|
||||||
|
|
||||||
#include "Viewport/SceneViewportShaderPaths.h"
|
#include "Viewport/SceneViewportShaderPaths.h"
|
||||||
@@ -13,7 +15,7 @@ public:
|
|||||||
SceneViewportSelectionOutlinePassRenderer& renderer,
|
SceneViewportSelectionOutlinePassRenderer& renderer,
|
||||||
RHI::RHIResourceView* objectIdTextureView,
|
RHI::RHIResourceView* objectIdTextureView,
|
||||||
std::vector<uint64_t> selectedObjectIds,
|
std::vector<uint64_t> selectedObjectIds,
|
||||||
const Rendering::Passes::ObjectIdOutlineStyle& style)
|
const SceneViewportSelectionOutlineStyle& style)
|
||||||
: m_renderer(renderer)
|
: m_renderer(renderer)
|
||||||
, m_objectIdTextureView(objectIdTextureView)
|
, m_objectIdTextureView(objectIdTextureView)
|
||||||
, m_selectedObjectIds(std::move(selectedObjectIds))
|
, m_selectedObjectIds(std::move(selectedObjectIds))
|
||||||
@@ -37,7 +39,7 @@ private:
|
|||||||
SceneViewportSelectionOutlinePassRenderer& m_renderer;
|
SceneViewportSelectionOutlinePassRenderer& m_renderer;
|
||||||
RHI::RHIResourceView* m_objectIdTextureView = nullptr;
|
RHI::RHIResourceView* m_objectIdTextureView = nullptr;
|
||||||
std::vector<uint64_t> m_selectedObjectIds = {};
|
std::vector<uint64_t> m_selectedObjectIds = {};
|
||||||
Rendering::Passes::ObjectIdOutlineStyle m_style = {};
|
SceneViewportSelectionOutlineStyle m_style = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
@@ -55,20 +57,20 @@ bool SceneViewportSelectionOutlinePassRenderer::Render(
|
|||||||
const Rendering::RenderSurface& surface,
|
const Rendering::RenderSurface& surface,
|
||||||
RHI::RHIResourceView* objectIdTextureView,
|
RHI::RHIResourceView* objectIdTextureView,
|
||||||
const std::vector<uint64_t>& selectedObjectIds,
|
const std::vector<uint64_t>& selectedObjectIds,
|
||||||
const Rendering::Passes::ObjectIdOutlineStyle& style) {
|
const SceneViewportSelectionOutlineStyle& style) {
|
||||||
return m_outlinePass.Render(
|
return m_outlinePass.Render(
|
||||||
renderContext,
|
renderContext,
|
||||||
surface,
|
surface,
|
||||||
objectIdTextureView,
|
objectIdTextureView,
|
||||||
selectedObjectIds,
|
selectedObjectIds,
|
||||||
style);
|
ToBuiltinSceneViewportSelectionOutlineStyle(style));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Rendering::RenderPass> CreateSceneViewportSelectionOutlinePass(
|
std::unique_ptr<Rendering::RenderPass> CreateSceneViewportSelectionOutlinePass(
|
||||||
SceneViewportSelectionOutlinePassRenderer& renderer,
|
SceneViewportSelectionOutlinePassRenderer& renderer,
|
||||||
RHI::RHIResourceView* objectIdTextureView,
|
RHI::RHIResourceView* objectIdTextureView,
|
||||||
const std::vector<uint64_t>& selectedObjectIds,
|
const std::vector<uint64_t>& selectedObjectIds,
|
||||||
const Rendering::Passes::ObjectIdOutlineStyle& style) {
|
const SceneViewportSelectionOutlineStyle& style) {
|
||||||
return std::make_unique<SceneViewportSelectionOutlinePass>(
|
return std::make_unique<SceneViewportSelectionOutlinePass>(
|
||||||
renderer,
|
renderer,
|
||||||
objectIdTextureView,
|
objectIdTextureView,
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "Viewport/SceneViewportPassSpecs.h"
|
||||||
|
|
||||||
#include <XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass.h>
|
#include <XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass.h>
|
||||||
#include <XCEngine/Rendering/RenderContext.h>
|
#include <XCEngine/Rendering/RenderContext.h>
|
||||||
#include <XCEngine/Rendering/RenderPass.h>
|
#include <XCEngine/Rendering/RenderPass.h>
|
||||||
@@ -24,7 +26,7 @@ public:
|
|||||||
const Rendering::RenderSurface& surface,
|
const Rendering::RenderSurface& surface,
|
||||||
RHI::RHIResourceView* objectIdTextureView,
|
RHI::RHIResourceView* objectIdTextureView,
|
||||||
const std::vector<uint64_t>& selectedObjectIds,
|
const std::vector<uint64_t>& selectedObjectIds,
|
||||||
const Rendering::Passes::ObjectIdOutlineStyle& style);
|
const SceneViewportSelectionOutlineStyle& style);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Rendering::Passes::BuiltinObjectIdOutlinePass m_outlinePass;
|
Rendering::Passes::BuiltinObjectIdOutlinePass m_outlinePass;
|
||||||
@@ -34,7 +36,7 @@ std::unique_ptr<Rendering::RenderPass> CreateSceneViewportSelectionOutlinePass(
|
|||||||
SceneViewportSelectionOutlinePassRenderer& renderer,
|
SceneViewportSelectionOutlinePassRenderer& renderer,
|
||||||
RHI::RHIResourceView* objectIdTextureView,
|
RHI::RHIResourceView* objectIdTextureView,
|
||||||
const std::vector<uint64_t>& selectedObjectIds,
|
const std::vector<uint64_t>& selectedObjectIds,
|
||||||
const Rendering::Passes::ObjectIdOutlineStyle& style);
|
const SceneViewportSelectionOutlineStyle& style);
|
||||||
|
|
||||||
} // namespace Editor
|
} // namespace Editor
|
||||||
} // namespace XCEngine
|
} // namespace XCEngine
|
||||||
|
|||||||
54
editor/src/Viewport/SceneViewportPassSpecs.h
Normal file
54
editor/src/Viewport/SceneViewportPassSpecs.h
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <XCEngine/Core/Math/Color.h>
|
||||||
|
#include <XCEngine/Core/Math/Vector3.h>
|
||||||
|
#include <XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h>
|
||||||
|
#include <XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass.h>
|
||||||
|
|
||||||
|
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
|
||||||
@@ -35,11 +35,11 @@ struct SceneViewportRenderPlan {
|
|||||||
using SceneViewportOverlayPassFactory =
|
using SceneViewportOverlayPassFactory =
|
||||||
std::function<std::unique_ptr<Rendering::RenderPass>(const SceneViewportOverlayFrameData&)>;
|
std::function<std::unique_ptr<Rendering::RenderPass>(const SceneViewportOverlayFrameData&)>;
|
||||||
using SceneViewportGridPassFactory =
|
using SceneViewportGridPassFactory =
|
||||||
std::function<std::unique_ptr<Rendering::RenderPass>(const Rendering::Passes::InfiniteGridPassData&)>;
|
std::function<std::unique_ptr<Rendering::RenderPass>(const SceneViewportGridPassData&)>;
|
||||||
using SceneViewportSelectionOutlinePassFactory = std::function<std::unique_ptr<Rendering::RenderPass>(
|
using SceneViewportSelectionOutlinePassFactory = std::function<std::unique_ptr<Rendering::RenderPass>(
|
||||||
RHI::RHIResourceView*,
|
RHI::RHIResourceView*,
|
||||||
const std::vector<uint64_t>&,
|
const std::vector<uint64_t>&,
|
||||||
const Rendering::Passes::ObjectIdOutlineStyle&)>;
|
const SceneViewportSelectionOutlineStyle&)>;
|
||||||
|
|
||||||
struct SceneViewportRenderPlanBuildResult {
|
struct SceneViewportRenderPlanBuildResult {
|
||||||
SceneViewportRenderPlan plan = {};
|
SceneViewportRenderPlan plan = {};
|
||||||
@@ -60,7 +60,7 @@ inline SceneViewportRenderPlanBuildResult BuildSceneViewportRenderPlan(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Rendering::Passes::InfiniteGridPassData gridPassData = BuildSceneViewportGridPassData(overlay);
|
const SceneViewportGridPassData gridPassData = BuildSceneViewportGridPassData(overlay);
|
||||||
if (gridPassData.valid && gridPassFactory != nullptr) {
|
if (gridPassData.valid && gridPassFactory != nullptr) {
|
||||||
std::unique_ptr<Rendering::RenderPass> gridPass = gridPassFactory(gridPassData);
|
std::unique_ptr<Rendering::RenderPass> gridPass = gridPassFactory(gridPassData);
|
||||||
if (gridPass != nullptr) {
|
if (gridPass != nullptr) {
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "IViewportHostService.h"
|
#include "IViewportHostService.h"
|
||||||
|
#include "SceneViewportPassSpecs.h"
|
||||||
#include "ViewportHostRenderTargets.h"
|
#include "ViewportHostRenderTargets.h"
|
||||||
|
|
||||||
#include <XCEngine/Core/Math/Color.h>
|
#include <XCEngine/Core/Math/Color.h>
|
||||||
#include <XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h>
|
|
||||||
#include <XCEngine/Rendering/CameraRenderRequest.h>
|
#include <XCEngine/Rendering/CameraRenderRequest.h>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
@@ -115,9 +115,9 @@ inline ViewportRenderFallbackPolicy BuildGameViewportRenderFailurePolicy(
|
|||||||
return policy;
|
return policy;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Rendering::Passes::InfiniteGridPassData BuildSceneViewportGridPassData(
|
inline SceneViewportGridPassData BuildSceneViewportGridPassData(
|
||||||
const SceneViewportOverlayData& overlay) {
|
const SceneViewportOverlayData& overlay) {
|
||||||
Rendering::Passes::InfiniteGridPassData data = {};
|
SceneViewportGridPassData data = {};
|
||||||
data.valid = overlay.valid;
|
data.valid = overlay.valid;
|
||||||
data.cameraPosition = overlay.cameraPosition;
|
data.cameraPosition = overlay.cameraPosition;
|
||||||
data.cameraForward = overlay.cameraForward;
|
data.cameraForward = overlay.cameraForward;
|
||||||
@@ -130,9 +130,9 @@ inline Rendering::Passes::InfiniteGridPassData BuildSceneViewportGridPassData(
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Rendering::Passes::ObjectIdOutlineStyle BuildSceneViewportSelectionOutlineStyle(
|
inline SceneViewportSelectionOutlineStyle BuildSceneViewportSelectionOutlineStyle(
|
||||||
bool debugSelectionMask = false) {
|
bool debugSelectionMask = false) {
|
||||||
Rendering::Passes::ObjectIdOutlineStyle style = {};
|
SceneViewportSelectionOutlineStyle style = {};
|
||||||
style.outlineColor = Math::Color(1.0f, 0.4f, 0.0f, 1.0f);
|
style.outlineColor = Math::Color(1.0f, 0.4f, 0.0f, 1.0f);
|
||||||
style.outlineWidthPixels = 2.0f;
|
style.outlineWidthPixels = 2.0f;
|
||||||
style.debugSelectionMask = debugSelectionMask;
|
style.debugSelectionMask = debugSelectionMask;
|
||||||
|
|||||||
@@ -644,7 +644,7 @@ private:
|
|||||||
outState.overlay,
|
outState.overlay,
|
||||||
selectedObjectIds,
|
selectedObjectIds,
|
||||||
editorOverlayFrameData,
|
editorOverlayFrameData,
|
||||||
[this](const Rendering::Passes::InfiniteGridPassData& data) {
|
[this](const SceneViewportGridPassData& data) {
|
||||||
return CreateSceneViewportGridPass(
|
return CreateSceneViewportGridPass(
|
||||||
m_sceneViewportGridRenderer,
|
m_sceneViewportGridRenderer,
|
||||||
data);
|
data);
|
||||||
@@ -652,7 +652,7 @@ private:
|
|||||||
[this](
|
[this](
|
||||||
RHI::RHIResourceView* objectIdTextureView,
|
RHI::RHIResourceView* objectIdTextureView,
|
||||||
const std::vector<uint64_t>& selectedObjectIds,
|
const std::vector<uint64_t>& selectedObjectIds,
|
||||||
const Rendering::Passes::ObjectIdOutlineStyle& style) {
|
const SceneViewportSelectionOutlineStyle& style) {
|
||||||
return CreateSceneViewportSelectionOutlinePass(
|
return CreateSceneViewportSelectionOutlinePass(
|
||||||
m_sceneViewportSelectionOutlineRenderer,
|
m_sceneViewportSelectionOutlineRenderer,
|
||||||
objectIdTextureView,
|
objectIdTextureView,
|
||||||
|
|||||||
Reference in New Issue
Block a user