Lock URP runtime invalidation to asset and renderer data state
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user