refactor: generalize renderer builtin post process

This commit is contained in:
2026-04-02 14:49:00 +08:00
parent 697deb4e41
commit ec7a15d85b
17 changed files with 430 additions and 327 deletions

View File

@@ -86,7 +86,7 @@ CameraRenderer::~CameraRenderer() {
if (m_objectIdPass != nullptr) {
m_objectIdPass->Shutdown();
}
m_builtinSceneViewPostProcessBuilder.Shutdown();
m_builtinPostProcessBuilder.Shutdown();
}
void CameraRenderer::SetPipeline(std::unique_ptr<RenderPipeline> pipeline) {
@@ -136,8 +136,8 @@ bool CameraRenderer::Render(
!request.objectId.IsValid()) {
return false;
}
if (request.builtinSceneViewPostProcess.IsRequested() &&
request.builtinSceneViewPostProcess.objectIdTextureView != nullptr &&
if (request.builtinPostProcess.IsRequested() &&
request.builtinPostProcess.objectIdTextureView != nullptr &&
!request.objectId.IsRequested()) {
return false;
}
@@ -201,36 +201,36 @@ bool CameraRenderer::Render(
return false;
}
RenderPassSequence builtinSceneViewPostPasses = {};
bool builtinSceneViewPostPassesInitialized = false;
if (request.builtinSceneViewPostProcess.IsRequested()) {
const Passes::BuiltinSceneViewPostPassSequenceBuildResult buildResult =
m_builtinSceneViewPostProcessBuilder.Build(
RenderPassSequence builtinPostProcessPasses = {};
bool builtinPostProcessPassesInitialized = false;
if (request.builtinPostProcess.IsRequested()) {
const Passes::BuiltinPostProcessPassSequenceBuildResult buildResult =
m_builtinPostProcessBuilder.Build(
{
request.builtinSceneViewPostProcess.gridPassData,
request.builtinSceneViewPostProcess.objectIdTextureView,
request.builtinSceneViewPostProcess.selectedObjectIds,
request.builtinSceneViewPostProcess.outlineStyle
request.builtinPostProcess.gridPassData,
request.builtinPostProcess.objectIdTextureView,
request.builtinPostProcess.selectedObjectIds,
request.builtinPostProcess.outlineStyle
},
builtinSceneViewPostPasses);
builtinPostProcessPasses);
if (!buildResult.valid ||
!InitializePassSequence(
&builtinSceneViewPostPasses,
&builtinPostProcessPasses,
request.context,
builtinSceneViewPostPassesInitialized)) {
builtinPostProcessPassesInitialized)) {
ShutdownPassSequence(request.postScenePasses, postScenePassesInitialized);
ShutdownPassSequence(request.preScenePasses, preScenePassesInitialized);
return false;
}
if (!builtinSceneViewPostPasses.Execute(passContext)) {
ShutdownPassSequence(&builtinSceneViewPostPasses, builtinSceneViewPostPassesInitialized);
if (!builtinPostProcessPasses.Execute(passContext)) {
ShutdownPassSequence(&builtinPostProcessPasses, builtinPostProcessPassesInitialized);
ShutdownPassSequence(request.postScenePasses, postScenePassesInitialized);
ShutdownPassSequence(request.preScenePasses, preScenePassesInitialized);
return false;
}
}
ShutdownPassSequence(&builtinSceneViewPostPasses, builtinSceneViewPostPassesInitialized);
ShutdownPassSequence(&builtinPostProcessPasses, builtinPostProcessPassesInitialized);
ShutdownPassSequence(request.postScenePasses, postScenePassesInitialized);
ShutdownPassSequence(request.preScenePasses, preScenePassesInitialized);

View File

@@ -1,6 +1,6 @@
#include "Rendering/Passes/BuiltinSceneViewPostPassSequenceBuilder.h"
#include "Rendering/Passes/BuiltinPostProcessPassSequenceBuilder.h"
#include "Rendering/Passes/BuiltinSceneViewPostPassPlan.h"
#include "Rendering/Passes/BuiltinPostProcessPassPlan.h"
#include <XCEngine/Core/Math/Color.h>
#include <XCEngine/RHI/RHICommandList.h>
@@ -47,19 +47,19 @@ std::unique_ptr<RenderPass> MakeLambdaRenderPass(const char* name, Callback&& ca
} // namespace
BuiltinSceneViewPostPassSequenceBuilder::~BuiltinSceneViewPostPassSequenceBuilder() {
BuiltinPostProcessPassSequenceBuilder::~BuiltinPostProcessPassSequenceBuilder() {
Shutdown();
}
void BuiltinSceneViewPostPassSequenceBuilder::Shutdown() {
void BuiltinPostProcessPassSequenceBuilder::Shutdown() {
m_outlinePass.Shutdown();
m_gridPass.Shutdown();
}
BuiltinSceneViewPostPassSequenceBuildResult BuiltinSceneViewPostPassSequenceBuilder::Build(
const BuiltinSceneViewPostPassSequenceInput& input,
BuiltinPostProcessPassSequenceBuildResult BuiltinPostProcessPassSequenceBuilder::Build(
const BuiltinPostProcessPassSequenceInput& input,
RenderPassSequence& outSequence) {
BuiltinSceneViewPostPassSequenceBuildResult result = {};
BuiltinPostProcessPassSequenceBuildResult result = {};
const bool hasSelection = !input.selectedObjectIds.empty();
const bool hasObjectIdTextureView = input.objectIdTextureView != nullptr;
@@ -67,7 +67,7 @@ BuiltinSceneViewPostPassSequenceBuildResult BuiltinSceneViewPostPassSequenceBuil
result.missingObjectIdTextureViewForSelection = true;
}
const BuiltinSceneViewPostPassPlan plan = BuildBuiltinSceneViewPostPassPlan({
const BuiltinPostProcessPassPlan plan = BuildBuiltinPostProcessPassPlan({
input.gridPassData.valid,
hasSelection,
input.outlineStyle.debugSelectionMask,
@@ -78,25 +78,25 @@ BuiltinSceneViewPostPassSequenceBuildResult BuiltinSceneViewPostPassSequenceBuil
}
result.valid = true;
for (const BuiltinSceneViewPostPassStep step : plan.steps) {
for (const BuiltinPostProcessPassStep step : plan.steps) {
switch (step) {
case BuiltinSceneViewPostPassStep::ColorToRenderTarget:
case BuiltinPostProcessPassStep::ColorToRenderTarget:
AddColorToRenderTargetPass(outSequence);
break;
case BuiltinSceneViewPostPassStep::InfiniteGrid:
case BuiltinPostProcessPassStep::InfiniteGrid:
AddInfiniteGridPass(input.gridPassData, outSequence);
break;
case BuiltinSceneViewPostPassStep::SelectionOutline:
case BuiltinPostProcessPassStep::SelectionOutline:
AddSelectionOutlinePass(
input.objectIdTextureView,
input.selectedObjectIds,
input.outlineStyle,
outSequence);
break;
case BuiltinSceneViewPostPassStep::ColorToShaderResource:
case BuiltinPostProcessPassStep::ColorToShaderResource:
AddColorToShaderResourcePass(outSequence);
break;
case BuiltinSceneViewPostPassStep::SelectionMaskDebug:
case BuiltinPostProcessPassStep::SelectionMaskDebug:
AddSelectionMaskDebugPass(
input.objectIdTextureView,
input.selectedObjectIds,
@@ -111,7 +111,7 @@ BuiltinSceneViewPostPassSequenceBuildResult BuiltinSceneViewPostPassSequenceBuil
return result;
}
void BuiltinSceneViewPostPassSequenceBuilder::AddColorToRenderTargetPass(
void BuiltinPostProcessPassSequenceBuilder::AddColorToRenderTargetPass(
RenderPassSequence& outSequence) {
outSequence.AddPass(MakeLambdaRenderPass(
"SceneColorToRenderTarget",
@@ -129,7 +129,7 @@ void BuiltinSceneViewPostPassSequenceBuilder::AddColorToRenderTargetPass(
}));
}
void BuiltinSceneViewPostPassSequenceBuilder::AddInfiniteGridPass(
void BuiltinPostProcessPassSequenceBuilder::AddInfiniteGridPass(
const InfiniteGridPassData& gridPassData,
RenderPassSequence& outSequence) {
outSequence.AddPass(MakeLambdaRenderPass(
@@ -142,7 +142,7 @@ void BuiltinSceneViewPostPassSequenceBuilder::AddInfiniteGridPass(
}));
}
void BuiltinSceneViewPostPassSequenceBuilder::AddSelectionOutlinePass(
void BuiltinPostProcessPassSequenceBuilder::AddSelectionOutlinePass(
RHI::RHIResourceView* objectIdTextureView,
const std::vector<uint64_t>& selectedObjectIds,
const ObjectIdOutlineStyle& outlineStyle,
@@ -159,7 +159,7 @@ void BuiltinSceneViewPostPassSequenceBuilder::AddSelectionOutlinePass(
}));
}
void BuiltinSceneViewPostPassSequenceBuilder::AddColorToShaderResourcePass(
void BuiltinPostProcessPassSequenceBuilder::AddColorToShaderResourcePass(
RenderPassSequence& outSequence) {
outSequence.AddPass(MakeLambdaRenderPass(
"SceneColorToShaderResource",
@@ -177,7 +177,7 @@ void BuiltinSceneViewPostPassSequenceBuilder::AddColorToShaderResourcePass(
}));
}
void BuiltinSceneViewPostPassSequenceBuilder::AddSelectionMaskDebugPass(
void BuiltinPostProcessPassSequenceBuilder::AddSelectionMaskDebugPass(
RHI::RHIResourceView* objectIdTextureView,
const std::vector<uint64_t>& selectedObjectIds,
const ObjectIdOutlineStyle& outlineStyle,