refactor(srp): move renderer feature setup into renderer data

Introduce a formal ScriptableRendererData setup seam so renderer feature attachment is owned by renderer data instead of renderer constructors pulling feature caches.

Route lifecycle and reuse probes through the new setup path, lock the non-public setup seam in the API surface probe, and update scripting expectations accordingly.
This commit is contained in:
2026-04-20 02:30:07 +08:00
parent 778913ddcb
commit 5e88449e3d
7 changed files with 257 additions and 20 deletions

View File

@@ -23,6 +23,10 @@ namespace XCEngine.Rendering.Universal
if (m_rendererInstance == null)
{
m_rendererInstance = CreateRenderer();
if (m_rendererInstance != null)
{
SetupRendererInstance(m_rendererInstance);
}
}
return m_rendererInstance;
@@ -33,6 +37,17 @@ namespace XCEngine.Rendering.Universal
return GetRendererFeatures();
}
internal void SetupRendererInstance(
ScriptableRenderer renderer)
{
if (renderer == null)
{
return;
}
SetupRenderer(renderer);
}
internal string GetPipelineRendererAssetKeyInstance()
{
return GetPipelineRendererAssetKey();
@@ -116,6 +131,14 @@ namespace XCEngine.Rendering.Universal
return null;
}
protected virtual void SetupRenderer(
ScriptableRenderer renderer)
{
AddRendererFeatures(
renderer,
GetRendererFeatures());
}
protected virtual void ConfigureCameraRenderRequest(
CameraRenderRequestContext context)
{
@@ -162,6 +185,37 @@ namespace XCEngine.Rendering.Universal
context.nativeHandle);
}
protected void AddRendererFeature(
ScriptableRenderer renderer,
ScriptableRendererFeature rendererFeature)
{
if (renderer == null ||
rendererFeature == null)
{
return;
}
renderer.AddFeatureInstance(rendererFeature);
}
protected void AddRendererFeatures(
ScriptableRenderer renderer,
ScriptableRendererFeature[] rendererFeatures)
{
if (renderer == null ||
rendererFeatures == null)
{
return;
}
for (int i = 0; i < rendererFeatures.Length; ++i)
{
AddRendererFeature(
renderer,
rendererFeatures[i]);
}
}
private ScriptableRendererFeature[] GetRendererFeatures()
{
if (m_rendererFeatures == null)