Extract editor-owned scene viewport pass specs
This commit is contained in:
@@ -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<Rendering::RenderPass> CreateSceneViewportGridPass(
|
||||
SceneViewportGridPassRenderer& renderer,
|
||||
const Rendering::Passes::InfiniteGridPassData& data) {
|
||||
const SceneViewportGridPassData& data) {
|
||||
return std::make_unique<SceneViewportGridPass>(renderer, data);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "Viewport/SceneViewportPassSpecs.h"
|
||||
|
||||
#include <XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h>
|
||||
#include <XCEngine/Rendering/RenderContext.h>
|
||||
#include <XCEngine/Rendering/RenderPass.h>
|
||||
@@ -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<Rendering::RenderPass> CreateSceneViewportGridPass(
|
||||
SceneViewportGridPassRenderer& renderer,
|
||||
const Rendering::Passes::InfiniteGridPassData& data);
|
||||
const SceneViewportGridPassData& data);
|
||||
|
||||
} // namespace Editor
|
||||
} // namespace XCEngine
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#include <XCEngine/Core/Asset/ResourceManager.h>
|
||||
|
||||
#include "Passes/SceneViewportSelectionOutlinePass.h"
|
||||
|
||||
#include "Viewport/SceneViewportShaderPaths.h"
|
||||
@@ -13,7 +15,7 @@ public:
|
||||
SceneViewportSelectionOutlinePassRenderer& renderer,
|
||||
RHI::RHIResourceView* objectIdTextureView,
|
||||
std::vector<uint64_t> 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<uint64_t> 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<uint64_t>& selectedObjectIds,
|
||||
const Rendering::Passes::ObjectIdOutlineStyle& style) {
|
||||
const SceneViewportSelectionOutlineStyle& style) {
|
||||
return m_outlinePass.Render(
|
||||
renderContext,
|
||||
surface,
|
||||
objectIdTextureView,
|
||||
selectedObjectIds,
|
||||
style);
|
||||
ToBuiltinSceneViewportSelectionOutlineStyle(style));
|
||||
}
|
||||
|
||||
std::unique_ptr<Rendering::RenderPass> CreateSceneViewportSelectionOutlinePass(
|
||||
SceneViewportSelectionOutlinePassRenderer& renderer,
|
||||
RHI::RHIResourceView* objectIdTextureView,
|
||||
const std::vector<uint64_t>& selectedObjectIds,
|
||||
const Rendering::Passes::ObjectIdOutlineStyle& style) {
|
||||
const SceneViewportSelectionOutlineStyle& style) {
|
||||
return std::make_unique<SceneViewportSelectionOutlinePass>(
|
||||
renderer,
|
||||
objectIdTextureView,
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "Viewport/SceneViewportPassSpecs.h"
|
||||
|
||||
#include <XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass.h>
|
||||
#include <XCEngine/Rendering/RenderContext.h>
|
||||
#include <XCEngine/Rendering/RenderPass.h>
|
||||
@@ -24,7 +26,7 @@ public:
|
||||
const Rendering::RenderSurface& surface,
|
||||
RHI::RHIResourceView* objectIdTextureView,
|
||||
const std::vector<uint64_t>& selectedObjectIds,
|
||||
const Rendering::Passes::ObjectIdOutlineStyle& style);
|
||||
const SceneViewportSelectionOutlineStyle& style);
|
||||
|
||||
private:
|
||||
Rendering::Passes::BuiltinObjectIdOutlinePass m_outlinePass;
|
||||
@@ -34,7 +36,7 @@ std::unique_ptr<Rendering::RenderPass> CreateSceneViewportSelectionOutlinePass(
|
||||
SceneViewportSelectionOutlinePassRenderer& renderer,
|
||||
RHI::RHIResourceView* objectIdTextureView,
|
||||
const std::vector<uint64_t>& selectedObjectIds,
|
||||
const Rendering::Passes::ObjectIdOutlineStyle& style);
|
||||
const SceneViewportSelectionOutlineStyle& style);
|
||||
|
||||
} // namespace Editor
|
||||
} // 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 =
|
||||
std::function<std::unique_ptr<Rendering::RenderPass>(const SceneViewportOverlayFrameData&)>;
|
||||
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>(
|
||||
RHI::RHIResourceView*,
|
||||
const std::vector<uint64_t>&,
|
||||
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<Rendering::RenderPass> gridPass = gridPassFactory(gridPassData);
|
||||
if (gridPass != nullptr) {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
#include "IViewportHostService.h"
|
||||
#include "SceneViewportPassSpecs.h"
|
||||
#include "ViewportHostRenderTargets.h"
|
||||
|
||||
#include <XCEngine/Core/Math/Color.h>
|
||||
#include <XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h>
|
||||
#include <XCEngine/Rendering/CameraRenderRequest.h>
|
||||
|
||||
#include <string>
|
||||
@@ -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;
|
||||
|
||||
@@ -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<uint64_t>& selectedObjectIds,
|
||||
const Rendering::Passes::ObjectIdOutlineStyle& style) {
|
||||
const SceneViewportSelectionOutlineStyle& style) {
|
||||
return CreateSceneViewportSelectionOutlinePass(
|
||||
m_sceneViewportSelectionOutlineRenderer,
|
||||
objectIdTextureView,
|
||||
|
||||
Reference in New Issue
Block a user