refactor(srp): tighten renderer feature lifecycle invalidation

This commit is contained in:
2026-04-21 19:43:45 +08:00
parent 97bd990b12
commit ffe4717d8f
7 changed files with 243 additions and 5 deletions

View File

@@ -7,12 +7,42 @@ namespace XCEngine.Rendering.Universal
{
private bool m_disposed;
private bool m_runtimeCreated;
private bool m_isActive = true;
private int m_runtimeStateVersion = 1;
private ScriptableRendererData m_owner;
protected ScriptableRendererFeature()
{
}
public bool isActive { get; set; } = true;
public bool isActive
{
get
{
return m_isActive;
}
set
{
if (m_isActive == value)
{
return;
}
m_isActive = value;
SetDirty();
}
}
internal void BindOwnerInstance(
ScriptableRendererData owner)
{
m_owner = owner;
}
internal int GetRuntimeStateVersionInstance()
{
return m_runtimeStateVersion;
}
internal void CreateInstance()
{
@@ -28,7 +58,8 @@ namespace XCEngine.Rendering.Universal
internal void ReleaseRuntimeResourcesInstance()
{
if (m_disposed)
if (m_disposed ||
!m_runtimeCreated)
{
return;
}
@@ -93,6 +124,33 @@ namespace XCEngine.Rendering.Universal
protected virtual void ReleaseRuntimeResources()
{
}
protected void SetDirty()
{
if (m_runtimeCreated &&
!m_disposed)
{
ReleaseRuntimeResources();
}
m_disposed = false;
m_runtimeCreated = false;
unchecked
{
++m_runtimeStateVersion;
}
if (m_runtimeStateVersion <= 0)
{
m_runtimeStateVersion = 1;
}
if (m_owner != null)
{
m_owner.InvalidateRendererFeaturesInstance();
}
}
}
}