fix(rendering): derive URP stages from pass queue

This commit is contained in:
2026-04-27 13:45:50 +08:00
parent 1de1f768d3
commit 8ebbd5d633
9 changed files with 267 additions and 112 deletions

View File

@@ -423,83 +423,6 @@ namespace Gameplay
}
}
public override void ConfigureCameraFramePlan(
ScriptableRenderPipelinePlanningContext context)
{
if (context == null)
{
return;
}
bool hasPostProcessPass = false;
bool hasFinalOutputPass = false;
for (int i = 0; i < m_passes.Length; ++i)
{
ScriptableRenderPass renderPass = m_passes[i];
if (renderPass == null)
{
continue;
}
if (renderPass.SupportsStage(
CameraFrameStage.PostProcess))
{
hasPostProcessPass = true;
}
if (renderPass.SupportsStage(
CameraFrameStage.FinalOutput))
{
hasFinalOutputPass = true;
}
}
bool needsGraphManagedPostProcessOutput =
context.HasFinalColorProcessing() ||
context.IsStageRequested(
CameraFrameStage.FinalOutput) ||
hasFinalOutputPass;
if (hasPostProcessPass)
{
if (!context.IsStageRequested(
CameraFrameStage.PostProcess))
{
context.RequestFullscreenStage(
CameraFrameStage.PostProcess,
CameraFrameColorSource.MainSceneColor,
needsGraphManagedPostProcessOutput);
}
else if (needsGraphManagedPostProcessOutput &&
context.GetStageColorSource(
CameraFrameStage.PostProcess) !=
CameraFrameColorSource.ExplicitSurface &&
!context.UsesGraphManagedOutputColor(
CameraFrameStage.PostProcess))
{
CameraFrameColorSource source =
context.GetStageColorSource(
CameraFrameStage.PostProcess);
context.ClearFullscreenStage(
CameraFrameStage.PostProcess);
context.RequestFullscreenStage(
CameraFrameStage.PostProcess,
source,
true);
}
}
if (hasFinalOutputPass &&
!context.IsStageRequested(
CameraFrameStage.FinalOutput))
{
context.RequestFullscreenStage(
CameraFrameStage.FinalOutput,
hasPostProcessPass
? CameraFrameColorSource.PostProcessColor
: CameraFrameColorSource.MainSceneColor);
}
}
}
internal class ProbeSceneRenderer : ScriptableRenderer