using XCEngine; using XCEngine.Rendering; namespace XCEngine.Rendering.Universal { public abstract class RendererDrivenRenderPipeline : ScriptableRenderPipeline { protected RendererDrivenRenderPipeline() { } protected sealed override bool SupportsStageRenderGraph( CameraFrameStage stage) { return SupportsStageRenderGraphContextual( stage, -1); } protected sealed override bool SupportsStageRenderGraphContextual( CameraFrameStage stage, int rendererIndex) { return SupportsRendererRecording( new RendererRecordingContext( stage, rendererIndex)); } protected sealed override bool RecordStageRenderGraph( ScriptableRenderContext context) { if (context == null) { return false; } return RecordRenderer( new RendererRecordingContext(context)); } protected virtual bool SupportsRendererRecording( RendererRecordingContext context) { ScriptableRenderer renderer = ResolveRenderer(context); return renderer != null && renderer.SupportsRendererRecordingInstance(context); } protected virtual bool RecordRenderer( RendererRecordingContext context) { ScriptableRenderer renderer = ResolveRenderer(context); return renderer != null && renderer.RecordRendererInstance(context); } protected abstract ScriptableRenderer ResolveRenderer( RendererRecordingContext context); } }