refactor(srp): formalize universal renderer selection and caching

This commit is contained in:
2026-04-20 00:16:32 +08:00
parent ad32d64269
commit cbc0ddbd42
6 changed files with 379 additions and 38 deletions

View File

@@ -6,19 +6,18 @@ namespace XCEngine.Rendering.Universal
internal sealed class UniversalRenderPipeline
: ScriptableRenderPipeline
{
private readonly ScriptableRendererData m_rendererData;
private ScriptableRenderer m_renderer;
private readonly UniversalRenderPipelineAsset m_asset;
public UniversalRenderPipeline(
ScriptableRendererData rendererData)
UniversalRenderPipelineAsset asset)
{
m_rendererData = rendererData;
m_asset = asset;
}
protected override bool SupportsStageRenderGraph(
CameraFrameStage stage)
{
ScriptableRenderer renderer = GetOrCreateRenderer();
ScriptableRenderer renderer = GetDefaultRenderer();
return renderer != null &&
renderer.SupportsStageRenderGraph(stage);
}
@@ -26,21 +25,16 @@ namespace XCEngine.Rendering.Universal
protected override bool RecordStageRenderGraph(
ScriptableRenderContext context)
{
ScriptableRenderer renderer = GetOrCreateRenderer();
ScriptableRenderer renderer = GetDefaultRenderer();
return renderer != null &&
renderer.RecordStageRenderGraph(context);
}
private ScriptableRenderer GetOrCreateRenderer()
private ScriptableRenderer GetDefaultRenderer()
{
if (m_renderer == null &&
m_rendererData != null)
{
m_renderer =
m_rendererData.CreateRendererInstance();
}
return m_renderer;
return m_asset != null
? m_asset.GetDefaultRenderer()
: null;
}
}
}