Lock URP runtime invalidation to asset and renderer data state

This commit is contained in:
2026-04-27 19:56:29 +08:00
parent f528295f88
commit 9428fec350
7 changed files with 467 additions and 1 deletions

View File

@@ -2228,6 +2228,77 @@ namespace Gameplay
}
}
internal sealed class ManagedUniversalConfigInvalidationProbeAsset
: UniversalRenderPipelineAsset
{
private readonly UniversalRendererData m_rendererData;
public ManagedUniversalConfigInvalidationProbeAsset()
{
m_rendererData =
ProbeScriptableObjectFactory
.Create<UniversalRendererData>();
rendererDataList =
ProbeScriptableObjectFactory
.CreateRendererDataList(
m_rendererData);
shadows =
UniversalShadowSettings.CreateDefault();
finalColor =
UniversalFinalColorSettings.CreateDefault();
}
public void MutateRendererDataForTest()
{
if (m_rendererData == null)
{
return;
}
if (m_rendererData.mainScene == null)
{
m_rendererData.mainScene =
UniversalMainSceneData.CreateDefault();
}
m_rendererData.mainScene.renderOpaque =
!m_rendererData.mainScene.renderOpaque;
m_rendererData.mainScene.opaquePassEvent =
RenderPassEvent.AfterRenderingOpaques;
if (m_rendererData.depthPrepass == null)
{
m_rendererData.depthPrepass =
DepthPrepassBlockData.CreateDefault();
}
m_rendererData.depthPrepass.enabled =
!m_rendererData.depthPrepass.enabled;
}
public void MutateAssetSettingsForTest()
{
if (shadows == null)
{
shadows =
UniversalShadowSettings.CreateDefault();
}
shadows.supportsMainLightShadows =
!shadows.supportsMainLightShadows;
shadows.mainLightPlanningSettings.mapDimension = 1024u;
if (finalColor == null)
{
finalColor =
UniversalFinalColorSettings.CreateDefault();
}
finalColor.settings.finalColorScale =
new Vector4(0.75f, 0.80f, 0.85f, 1.0f);
}
}
public sealed class ManagedFeaturePassOrderProbeAsset
: UniversalRenderPipelineAsset
{
@@ -2940,6 +3011,58 @@ namespace Gameplay
}
}
public sealed class ManagedUniversalConfigInvalidationRuntimeSelectionProbe
: MonoBehaviour
{
public void Start()
{
GraphicsSettings.renderPipelineAsset =
ProbeScriptableObjectFactory
.Create<ManagedUniversalConfigInvalidationProbeAsset>();
}
}
public sealed class ManagedUniversalConfigInvalidationObservationProbe
: MonoBehaviour
{
public int ObservedRuntimeResourceVersionBeforeMutation;
public int ObservedRuntimeResourceVersionAfterRendererDataMutation;
public int ObservedRuntimeResourceVersionAfterAssetSettingsMutation;
public bool ObservedMutationRan;
public void Update()
{
if (ObservedMutationRan)
{
return;
}
ManagedUniversalConfigInvalidationProbeAsset selectedAsset =
GraphicsSettings.renderPipelineAsset
as ManagedUniversalConfigInvalidationProbeAsset;
if (selectedAsset == null)
{
return;
}
ObservedRuntimeResourceVersionBeforeMutation =
ProbeRuntimeVersionUtility
.GetRuntimeResourceVersion(
selectedAsset);
selectedAsset.MutateRendererDataForTest();
ObservedRuntimeResourceVersionAfterRendererDataMutation =
ProbeRuntimeVersionUtility
.GetRuntimeResourceVersion(
selectedAsset);
selectedAsset.MutateAssetSettingsForTest();
ObservedRuntimeResourceVersionAfterAssetSettingsMutation =
ProbeRuntimeVersionUtility
.GetRuntimeResourceVersion(
selectedAsset);
ObservedMutationRan = true;
}
}
public sealed class ManagedFeaturePassOrderRuntimeSelectionProbe
: MonoBehaviour
{