Extract scene viewport render pass bundle
This commit is contained in:
@@ -90,6 +90,7 @@ add_executable(${PROJECT_NAME} WIN32
|
||||
src/Viewport/SceneViewportOrientationGizmo.cpp
|
||||
src/Viewport/SceneViewportOverlayBuilder.cpp
|
||||
src/Viewport/SceneViewportOverlayFrameCache.cpp
|
||||
src/Viewport/SceneViewportRenderPassBundle.cpp
|
||||
src/Viewport/SceneViewportOverlaySpriteResources.cpp
|
||||
src/Viewport/SceneViewportOverlayProviders.cpp
|
||||
src/Viewport/Passes/SceneViewportEditorOverlayPass.cpp
|
||||
|
||||
43
editor/src/Viewport/SceneViewportRenderPassBundle.cpp
Normal file
43
editor/src/Viewport/SceneViewportRenderPassBundle.cpp
Normal file
@@ -0,0 +1,43 @@
|
||||
#include "Viewport/SceneViewportRenderPassBundle.h"
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Editor {
|
||||
|
||||
void SceneViewportRenderPassBundle::Shutdown() {
|
||||
m_overlayRenderer.Shutdown();
|
||||
m_selectionOutlineRenderer.Shutdown();
|
||||
m_gridRenderer.Shutdown();
|
||||
}
|
||||
|
||||
SceneViewportRenderPlanBuildResult SceneViewportRenderPassBundle::BuildRenderPlan(
|
||||
const ViewportRenderTargets& targets,
|
||||
const SceneViewportOverlayData& overlay,
|
||||
const std::vector<uint64_t>& selectedObjectIds,
|
||||
const SceneViewportOverlayFrameData& editorOverlayFrameData,
|
||||
bool debugSelectionMask) {
|
||||
return BuildSceneViewportRenderPlan(
|
||||
targets,
|
||||
overlay,
|
||||
selectedObjectIds,
|
||||
editorOverlayFrameData,
|
||||
[this](const SceneViewportGridPassData& data) {
|
||||
return CreateSceneViewportGridPass(m_gridRenderer, data);
|
||||
},
|
||||
[this](
|
||||
RHI::RHIResourceView* objectIdTextureView,
|
||||
const std::vector<uint64_t>& selectionIds,
|
||||
const SceneViewportSelectionOutlineStyle& style) {
|
||||
return CreateSceneViewportSelectionOutlinePass(
|
||||
m_selectionOutlineRenderer,
|
||||
objectIdTextureView,
|
||||
selectionIds,
|
||||
style);
|
||||
},
|
||||
[this](const SceneViewportOverlayFrameData& frameData) {
|
||||
return CreateSceneViewportEditorOverlayPass(m_overlayRenderer, frameData);
|
||||
},
|
||||
debugSelectionMask);
|
||||
}
|
||||
|
||||
} // namespace Editor
|
||||
} // namespace XCEngine
|
||||
31
editor/src/Viewport/SceneViewportRenderPassBundle.h
Normal file
31
editor/src/Viewport/SceneViewportRenderPassBundle.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
#include "Passes/SceneViewportEditorOverlayPass.h"
|
||||
#include "Passes/SceneViewportGridPass.h"
|
||||
#include "Passes/SceneViewportSelectionOutlinePass.h"
|
||||
#include "SceneViewportRenderPlan.h"
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Editor {
|
||||
|
||||
class SceneViewportRenderPassBundle {
|
||||
public:
|
||||
~SceneViewportRenderPassBundle() = default;
|
||||
|
||||
void Shutdown();
|
||||
|
||||
SceneViewportRenderPlanBuildResult BuildRenderPlan(
|
||||
const ViewportRenderTargets& targets,
|
||||
const SceneViewportOverlayData& overlay,
|
||||
const std::vector<uint64_t>& selectedObjectIds,
|
||||
const SceneViewportOverlayFrameData& editorOverlayFrameData,
|
||||
bool debugSelectionMask = false);
|
||||
|
||||
private:
|
||||
SceneViewportGridPassRenderer m_gridRenderer;
|
||||
SceneViewportSelectionOutlinePassRenderer m_selectionOutlineRenderer;
|
||||
SceneViewportEditorOverlayPassRenderer m_overlayRenderer;
|
||||
};
|
||||
|
||||
} // namespace Editor
|
||||
} // namespace XCEngine
|
||||
@@ -4,14 +4,12 @@
|
||||
#include "Core/ISceneManager.h"
|
||||
#include "Core/ISelectionManager.h"
|
||||
#include "IViewportHostService.h"
|
||||
#include "Passes/SceneViewportEditorOverlayPass.h"
|
||||
#include "Passes/SceneViewportGridPass.h"
|
||||
#include "Passes/SceneViewportSelectionOutlinePass.h"
|
||||
#include "SceneViewportCameraController.h"
|
||||
#include "SceneViewportEditorOverlayData.h"
|
||||
#include "SceneViewportOverlayFrameCache.h"
|
||||
#include "SceneViewportOverlayHandleBuilder.h"
|
||||
#include "SceneViewportOverlayBuilder.h"
|
||||
#include "SceneViewportRenderPassBundle.h"
|
||||
#include "SceneViewportRenderPlan.h"
|
||||
#include "ViewportHostRenderFlowUtils.h"
|
||||
#include "ViewportHostRenderTargets.h"
|
||||
@@ -78,9 +76,7 @@ public:
|
||||
entry = {};
|
||||
}
|
||||
|
||||
m_sceneViewportSelectionOutlineRenderer.Shutdown();
|
||||
m_sceneViewportGridRenderer.Shutdown();
|
||||
m_sceneViewportEditorOverlayRenderer.Shutdown();
|
||||
m_sceneViewportRenderPassBundle.Shutdown();
|
||||
m_sceneViewCamera = {};
|
||||
ResetSceneViewportOverlayFrameCacheState(m_sceneViewEditorOverlayFrameCache);
|
||||
m_sceneViewTransformGizmoOverlayState = {};
|
||||
@@ -507,31 +503,11 @@ private:
|
||||
const SceneViewportOverlayFrameData& editorOverlayFrameData =
|
||||
GetSceneViewEditorOverlayFrameData(context);
|
||||
SceneViewportRenderPlanBuildResult renderPlan =
|
||||
BuildSceneViewportRenderPlan(
|
||||
m_sceneViewportRenderPassBundle.BuildRenderPlan(
|
||||
entry.renderTargets,
|
||||
outState.overlay,
|
||||
selectedObjectIds,
|
||||
editorOverlayFrameData,
|
||||
[this](const SceneViewportGridPassData& data) {
|
||||
return CreateSceneViewportGridPass(
|
||||
m_sceneViewportGridRenderer,
|
||||
data);
|
||||
},
|
||||
[this](
|
||||
RHI::RHIResourceView* objectIdTextureView,
|
||||
const std::vector<uint64_t>& selectedObjectIds,
|
||||
const SceneViewportSelectionOutlineStyle& style) {
|
||||
return CreateSceneViewportSelectionOutlinePass(
|
||||
m_sceneViewportSelectionOutlineRenderer,
|
||||
objectIdTextureView,
|
||||
selectedObjectIds,
|
||||
style);
|
||||
},
|
||||
[this](const SceneViewportOverlayFrameData& frameData) {
|
||||
return CreateSceneViewportEditorOverlayPass(
|
||||
m_sceneViewportEditorOverlayRenderer,
|
||||
frameData);
|
||||
},
|
||||
kDebugSceneSelectionMask);
|
||||
outState.renderPlan = std::move(renderPlan.plan);
|
||||
if (renderPlan.warningStatusText != nullptr) {
|
||||
@@ -732,9 +708,7 @@ private:
|
||||
SceneViewportTransformGizmoOverlayState m_sceneViewTransformGizmoOverlayState = {};
|
||||
SceneViewportOverlayFrameCacheState m_sceneViewEditorOverlayFrameCache = {};
|
||||
bool m_sceneViewTransformGizmoOverlayDirty = false;
|
||||
SceneViewportGridPassRenderer m_sceneViewportGridRenderer;
|
||||
SceneViewportSelectionOutlinePassRenderer m_sceneViewportSelectionOutlineRenderer;
|
||||
SceneViewportEditorOverlayPassRenderer m_sceneViewportEditorOverlayRenderer;
|
||||
SceneViewportRenderPassBundle m_sceneViewportRenderPassBundle;
|
||||
};
|
||||
|
||||
} // namespace Editor
|
||||
|
||||
Reference in New Issue
Block a user