using XCEngine; using XCEngine.Rendering; namespace XCEngine.Rendering.Renderer { public abstract class RendererBackedRenderPipeline : ScriptableRenderPipeline { private ScriptableRenderer m_renderer; protected RendererBackedRenderPipeline() { } protected internal virtual ScriptableRenderer CreateRenderer() { return null; } protected override bool SupportsStageRenderGraph( CameraFrameStage stage) { ScriptableRenderer renderer = GetOrCreateRenderer(); return renderer != null && renderer.SupportsStageRenderGraph(stage); } protected override 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; } } }