refactor(srp): require explicit managed renderer stage planning

This commit is contained in:
2026-04-22 01:23:52 +08:00
parent 9760bcb00e
commit 33e9041d60
4 changed files with 203 additions and 132 deletions

View File

@@ -419,6 +419,84 @@ namespace Gameplay
renderer.EnqueuePass(renderPass);
}
}
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