Extract scene viewport render pass bundle

This commit is contained in:
2026-04-04 17:53:36 +08:00
parent 5295ef3718
commit 0807b5a753
6 changed files with 204 additions and 30 deletions

View 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

View 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

View File

@@ -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