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

@@ -14,6 +14,8 @@ namespace XCEngine.Rendering.Universal
private ScriptableRenderer m_rendererInstance;
private bool m_rendererInvalidated;
private int m_runtimeStateVersion = 1;
private int m_runtimeStateHash;
private bool m_runtimeStateHashResolved;
private int m_rendererFeatureCollectionHash;
private bool m_rendererFeatureCollectionHashResolved;
@@ -72,7 +74,7 @@ namespace XCEngine.Rendering.Universal
internal int GetRuntimeStateVersionInstance()
{
SynchronizeRendererFeatureCollectionState();
SynchronizeRuntimeStateVersion();
return m_runtimeStateVersion;
}
@@ -191,6 +193,11 @@ namespace XCEngine.Rendering.Universal
{
}
protected virtual int ComputeRuntimeStateHash()
{
return 17;
}
protected virtual ScriptableRendererFeature[]
CreateDefaultRendererFeatures()
{
@@ -229,6 +236,32 @@ namespace XCEngine.Rendering.Universal
protected void SetDirty()
{
ApplyDirty(
ComputeRuntimeStateHash());
}
private void SynchronizeRuntimeStateVersion()
{
int runtimeStateHash =
ComputeRuntimeStateHash();
if (!m_runtimeStateHashResolved)
{
m_runtimeStateHash = runtimeStateHash;
m_runtimeStateHashResolved = true;
}
else if (runtimeStateHash != m_runtimeStateHash)
{
ApplyDirty(runtimeStateHash);
}
SynchronizeRendererFeatureCollectionState();
}
private void ApplyDirty(
int runtimeStateHash)
{
m_runtimeStateHash = runtimeStateHash;
m_runtimeStateHashResolved = true;
ReleaseRendererSetupCache();
m_rendererInvalidated = true;
unchecked