Freeze URP renderer frame plans

This commit is contained in:
2026-04-27 23:12:36 +08:00
parent 45fede0b76
commit 87df14f47b
5 changed files with 342 additions and 61 deletions

View File

@@ -244,6 +244,57 @@ namespace Gameplay
}
}
internal sealed class MutableFullscreenPass : ScriptableRenderPass
{
private string m_passName = string.Empty;
public void Configure(
RenderPassEvent passEvent,
string passName)
{
renderPassEvent = passEvent;
m_passName = passName ?? string.Empty;
}
protected override bool RecordRenderGraph(
ScriptableRenderContext context,
RenderingData renderingData)
{
if (context == null ||
renderingData == null)
{
return false;
}
RenderGraphTextureHandle sourceColor =
context.sourceColorTexture;
RenderGraphTextureHandle outputColor =
context.primaryColorTarget;
if (!sourceColor.isValid ||
!outputColor.isValid)
{
return false;
}
return context
.AddRasterPass(ResolvePassName())
.UseColorSource(sourceColor)
.SetColorAttachment(outputColor)
.SetRenderFunc(
rasterContext =>
{
})
.Commit();
}
private string ResolvePassName()
{
return string.IsNullOrEmpty(m_passName)
? "Gameplay.MutableFullscreenRasterPass"
: m_passName;
}
}
internal sealed class RenderPassLifecycleApiProbePass
: ScriptableRenderPass
{
@@ -1749,6 +1800,52 @@ namespace Gameplay
}
}
internal sealed class ManagedPassQueueIsolationProbeFeature
: ScriptableRendererFeature
{
private readonly MutableFullscreenPass m_pass =
new MutableFullscreenPass();
private int m_addRenderPassesCallCount;
public override void AddRenderPasses(
ScriptableRenderer renderer,
RenderingData renderingData)
{
if (renderer == null ||
renderingData == null)
{
return;
}
m_addRenderPassesCallCount++;
m_pass.Configure(
RenderPassEvent.BeforeRenderingPostProcessing,
m_addRenderPassesCallCount == 1
? "ManagedPassQueueIsolation.First"
: "ManagedPassQueueIsolation.Second");
renderer.EnqueuePass(m_pass);
}
}
internal sealed class ManagedPassQueueIsolationProbeRendererData
: ProbeRendererData
{
public ManagedPassQueueIsolationProbeRendererData()
: base(false)
{
rendererFeatures =
ProbeScriptableObjectFactory
.CreateRendererFeatureList(
ProbeScriptableObjectFactory
.Create<ManagedPassQueueIsolationProbeFeature>());
}
protected override ScriptableRenderer CreateProbeRenderer()
{
return new ProbeSceneRenderer();
}
}
internal sealed class ManagedRenderContextCameraDataProbeRendererData
: ProbeRendererData
{
@@ -2433,6 +2530,19 @@ namespace Gameplay
}
}
public sealed class ManagedPassQueueIsolationProbeAsset
: UniversalRenderPipelineAsset
{
public ManagedPassQueueIsolationProbeAsset()
{
rendererDataList =
ProbeScriptableObjectFactory
.CreateRendererDataList(
ProbeScriptableObjectFactory
.Create<ManagedPassQueueIsolationProbeRendererData>());
}
}
public sealed class ManagedInvalidFullscreenStagePlanningProbeAsset
: UniversalRenderPipelineAsset
{