refactor(srp): add renderer data invalidation seam
Introduce ScriptableRendererData dirty/invalidation support so renderer and feature caches can be released and rebuilt within the same managed asset runtime. Add managed probes and scripting coverage for non-public dirty APIs and for renderer rebuild after invalidation, then archive the completed phase plan.
This commit is contained in:
@@ -8,6 +8,7 @@ namespace XCEngine.Rendering.Universal
|
||||
{
|
||||
private ScriptableRendererFeature[] m_rendererFeatures;
|
||||
private ScriptableRenderer m_rendererInstance;
|
||||
private bool m_rendererInvalidated;
|
||||
|
||||
protected ScriptableRendererData()
|
||||
{
|
||||
@@ -26,6 +27,7 @@ namespace XCEngine.Rendering.Universal
|
||||
if (m_rendererInstance != null)
|
||||
{
|
||||
SetupRendererInstance(m_rendererInstance);
|
||||
m_rendererInvalidated = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +50,11 @@ namespace XCEngine.Rendering.Universal
|
||||
SetupRenderer(renderer);
|
||||
}
|
||||
|
||||
internal void SetDirtyInstance()
|
||||
{
|
||||
SetDirty();
|
||||
}
|
||||
|
||||
internal string GetPipelineRendererAssetKeyInstance()
|
||||
{
|
||||
return GetPipelineRendererAssetKey();
|
||||
@@ -55,31 +62,9 @@ namespace XCEngine.Rendering.Universal
|
||||
|
||||
internal void ReleaseRuntimeResourcesInstance()
|
||||
{
|
||||
if (m_rendererInstance != null)
|
||||
{
|
||||
m_rendererInstance.ReleaseRuntimeResourcesInstance();
|
||||
m_rendererInstance = null;
|
||||
m_rendererFeatures = null;
|
||||
ReleaseRuntimeResources();
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_rendererFeatures != null)
|
||||
{
|
||||
for (int i = 0; i < m_rendererFeatures.Length; ++i)
|
||||
{
|
||||
ScriptableRendererFeature rendererFeature =
|
||||
m_rendererFeatures[i];
|
||||
if (rendererFeature != null)
|
||||
{
|
||||
rendererFeature.ReleaseRuntimeResourcesInstance();
|
||||
}
|
||||
}
|
||||
|
||||
m_rendererFeatures = null;
|
||||
}
|
||||
|
||||
ReleaseRendererSetupCache();
|
||||
ReleaseRuntimeResources();
|
||||
m_rendererInvalidated = false;
|
||||
}
|
||||
|
||||
internal void ConfigureCameraRenderRequestInstance(
|
||||
@@ -163,6 +148,14 @@ namespace XCEngine.Rendering.Universal
|
||||
{
|
||||
}
|
||||
|
||||
protected bool isInvalidated
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_rendererInvalidated;
|
||||
}
|
||||
}
|
||||
|
||||
protected bool HasDirectionalShadow(
|
||||
CameraRenderRequestContext context)
|
||||
{
|
||||
@@ -185,6 +178,12 @@ namespace XCEngine.Rendering.Universal
|
||||
context.nativeHandle);
|
||||
}
|
||||
|
||||
protected void SetDirty()
|
||||
{
|
||||
ReleaseRendererSetupCache();
|
||||
m_rendererInvalidated = true;
|
||||
}
|
||||
|
||||
protected void AddRendererFeature(
|
||||
ScriptableRenderer renderer,
|
||||
ScriptableRendererFeature rendererFeature)
|
||||
@@ -227,6 +226,34 @@ namespace XCEngine.Rendering.Universal
|
||||
|
||||
return m_rendererFeatures;
|
||||
}
|
||||
|
||||
private void ReleaseRendererSetupCache()
|
||||
{
|
||||
if (m_rendererInstance != null)
|
||||
{
|
||||
m_rendererInstance.ReleaseRuntimeResourcesInstance();
|
||||
m_rendererInstance = null;
|
||||
m_rendererFeatures = null;
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_rendererFeatures == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < m_rendererFeatures.Length; ++i)
|
||||
{
|
||||
ScriptableRendererFeature rendererFeature =
|
||||
m_rendererFeatures[i];
|
||||
if (rendererFeature != null)
|
||||
{
|
||||
rendererFeature.ReleaseRuntimeResourcesInstance();
|
||||
}
|
||||
}
|
||||
|
||||
m_rendererFeatures = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user