refactor: move scene view post-pass planning into renderer

This commit is contained in:
2026-04-01 18:42:51 +08:00
parent 1ff2800b29
commit 44771d3cc1
8 changed files with 187 additions and 183 deletions

View File

@@ -1,65 +0,0 @@
#pragma once
#include <cstdint>
#include <vector>
namespace XCEngine {
namespace Editor {
enum class SceneViewportPostPassStep : uint8_t {
ColorToRenderTarget,
InfiniteGrid,
SelectionOutline,
ColorToShaderResource,
SelectionMaskDebug
};
struct SceneViewportPostPassPlanInput {
bool overlayValid = false;
bool hasSelection = false;
bool debugSelectionMask = false;
bool hasObjectIdShaderView = false;
};
struct SceneViewportPostPassPlan {
bool valid = false;
std::vector<SceneViewportPostPassStep> steps;
};
inline SceneViewportPostPassPlan BuildSceneViewportPostPassPlan(
const SceneViewportPostPassPlanInput& input) {
SceneViewportPostPassPlan plan = {};
if (!input.overlayValid) {
return plan;
}
plan.valid = true;
if (input.debugSelectionMask) {
plan.steps.push_back(SceneViewportPostPassStep::ColorToRenderTarget);
if (input.hasSelection && input.hasObjectIdShaderView) {
plan.steps.push_back(SceneViewportPostPassStep::SelectionMaskDebug);
}
plan.steps.push_back(SceneViewportPostPassStep::ColorToShaderResource);
return plan;
}
plan.steps.push_back(SceneViewportPostPassStep::ColorToRenderTarget);
plan.steps.push_back(SceneViewportPostPassStep::InfiniteGrid);
if (input.hasSelection && input.hasObjectIdShaderView) {
plan.steps = {
SceneViewportPostPassStep::ColorToRenderTarget,
SceneViewportPostPassStep::InfiniteGrid,
SceneViewportPostPassStep::SelectionOutline,
SceneViewportPostPassStep::ColorToShaderResource
};
return plan;
}
plan.steps.push_back(SceneViewportPostPassStep::ColorToShaderResource);
return plan;
}
} // namespace Editor
} // namespace XCEngine

View File

@@ -6,7 +6,6 @@
#include "IViewportHostService.h"
#include "SceneViewportPicker.h"
#include "SceneViewportCameraController.h"
#include "SceneViewportPostPassPlan.h"
#include "UI/ImGuiBackendBridge.h"
#include <XCEngine/Components/CameraComponent.h>
@@ -18,6 +17,7 @@
#include <XCEngine/RHI/RHITexture.h>
#include <XCEngine/Rendering/ObjectIdEncoding.h>
#include <XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h>
#include <XCEngine/Rendering/Passes/BuiltinSceneViewPostPassPlan.h>
#include <XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass.h>
#include <XCEngine/Rendering/RenderContext.h>
#include <XCEngine/Rendering/RenderSurface.h>
@@ -688,25 +688,25 @@ private:
}
void AddSceneViewPostPassStep(
SceneViewportPostPassStep step,
Rendering::Passes::BuiltinSceneViewPostPassStep step,
ViewportEntry& entry,
const SceneViewportOverlayData& overlay,
const std::vector<uint64_t>& selectedObjectIds,
Rendering::RenderPassSequence& outPostPasses) {
switch (step) {
case SceneViewportPostPassStep::ColorToRenderTarget:
case Rendering::Passes::BuiltinSceneViewPostPassStep::ColorToRenderTarget:
AddSceneColorToRenderTargetPass(entry, outPostPasses);
break;
case SceneViewportPostPassStep::InfiniteGrid:
case Rendering::Passes::BuiltinSceneViewPostPassStep::InfiniteGrid:
AddSceneInfiniteGridPass(entry, overlay, outPostPasses);
break;
case SceneViewportPostPassStep::SelectionOutline:
case Rendering::Passes::BuiltinSceneViewPostPassStep::SelectionOutline:
AddSceneSelectionOutlinePass(entry, selectedObjectIds, outPostPasses);
break;
case SceneViewportPostPassStep::ColorToShaderResource:
case Rendering::Passes::BuiltinSceneViewPostPassStep::ColorToShaderResource:
AddSceneColorToShaderResourcePass(entry, outPostPasses);
break;
case SceneViewportPostPassStep::SelectionMaskDebug:
case Rendering::Passes::BuiltinSceneViewPostPassStep::SelectionMaskDebug:
AddSceneSelectionMaskDebugPass(
entry,
selectedObjectIds,
@@ -731,7 +731,8 @@ private:
SetViewportStatusIfEmpty(entry.statusText, "Scene object id shader view is unavailable");
}
const SceneViewportPostPassPlan plan = BuildSceneViewportPostPassPlan({
const Rendering::Passes::BuiltinSceneViewPostPassPlan plan =
Rendering::Passes::BuildBuiltinSceneViewPostPassPlan({
overlay.valid,
hasSelection,
kDebugSceneSelectionMask,
@@ -741,7 +742,7 @@ private:
return false;
}
for (const SceneViewportPostPassStep step : plan.steps) {
for (const Rendering::Passes::BuiltinSceneViewPostPassStep step : plan.steps) {
AddSceneViewPostPassStep(
step,
entry,