refactor(srp): tighten renderer feature lifecycle invalidation
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user