namespace XCEngine { public abstract class ScriptableRenderPipeline : Object { private ScriptableRenderer m_renderer; protected ScriptableRenderPipeline() { } protected internal virtual ScriptableRenderer CreateRenderer() { return null; } protected internal virtual bool SupportsStageRenderGraph( CameraFrameStage stage) { ScriptableRenderer renderer = GetOrCreateRenderer(); return renderer != null && renderer.SupportsStageRenderGraph(stage); } protected internal virtual bool RecordStageRenderGraph( ScriptableRenderContext context) { ScriptableRenderer renderer = GetOrCreateRenderer(); return renderer != null && renderer.RecordStageRenderGraph(context); } protected ScriptableRenderer renderer => GetOrCreateRenderer(); private ScriptableRenderer GetOrCreateRenderer() { if (m_renderer == null) { m_renderer = CreateRenderer(); } return m_renderer; } } }