refactor(rendering): unify fullscreen stage color-chain queries

This commit is contained in:
2026-04-15 15:31:05 +08:00
parent 3afe44d2fa
commit ce573d4e2d
4 changed files with 36 additions and 25 deletions

View File

@@ -41,23 +41,23 @@ bool CameraFramePlan::UsesGraphManagedMainSceneColor() const {
}
bool CameraFramePlan::UsesGraphManagedOutputColor(CameraFrameStage stage) const {
switch (stage) {
case CameraFrameStage::PostProcess:
return colorChain.postProcess.usesGraphManagedOutputColor;
default:
return false;
if (const CameraFrameFullscreenStagePlan* fullscreenStagePlan =
GetFullscreenStagePlan(stage);
fullscreenStagePlan != nullptr) {
return fullscreenStagePlan->usesGraphManagedOutputColor;
}
return false;
}
CameraFrameColorSource CameraFramePlan::ResolveStageColorSource(CameraFrameStage stage) const {
switch (stage) {
case CameraFrameStage::PostProcess:
return colorChain.postProcess.source;
case CameraFrameStage::FinalOutput:
return colorChain.finalOutput.source;
default:
return CameraFrameColorSource::ExplicitSurface;
if (const CameraFrameFullscreenStagePlan* fullscreenStagePlan =
GetFullscreenStagePlan(stage);
fullscreenStagePlan != nullptr) {
return fullscreenStagePlan->source;
}
return CameraFrameColorSource::ExplicitSurface;
}
bool CameraFramePlan::IsPostProcessStageValid() const {
@@ -161,6 +161,18 @@ const FullscreenPassRenderRequest* CameraFramePlan::GetFullscreenPassRequest(
}
}
const CameraFrameFullscreenStagePlan* CameraFramePlan::GetFullscreenStagePlan(
CameraFrameStage stage) const {
switch (stage) {
case CameraFrameStage::PostProcess:
return &colorChain.postProcess;
case CameraFrameStage::FinalOutput:
return &colorChain.finalOutput;
default:
return nullptr;
}
}
const ScenePassRenderRequest* CameraFramePlan::GetScenePassRequest(CameraFrameStage stage) const {
switch (GetCameraFrameStageRequestKind(stage)) {
case CameraFrameStageRequestKind::ShadowCaster:

View File

@@ -314,20 +314,15 @@ RenderGraphTextureHandle ResolveStageOutputColorHandle(
const RenderGraphImportedSurface& outputSurface,
RenderGraphBuilder& graphBuilder) {
if (UsesCameraFrameStageGraphManagedOutputColor(plan, stage)) {
switch (stage) {
case CameraFrameStage::MainScene:
return graphBuilder.CreateTransientTexture(
stageName + ".Color",
BuildImportedTextureDesc(
const RenderGraphTextureDesc outputDesc =
IsCameraFrameFullscreenSequenceStage(stage)
? BuildFullscreenTransientTextureDesc(stagePassContext.surface)
: BuildImportedTextureDesc(
stagePassContext.surface,
kRenderGraphImportedColorFormat));
case CameraFrameStage::PostProcess:
return graphBuilder.CreateTransientTexture(
stageName + ".Color",
BuildFullscreenTransientTextureDesc(stagePassContext.surface));
default:
break;
}
kRenderGraphImportedColorFormat);
return graphBuilder.CreateTransientTexture(
stageName + ".Color",
outputDesc);
}
return GetPrimaryColorTexture(outputSurface);