namespace Ghost.RenderGraph.Concept; public static class RenderGraphExtensions { public static RenderGraphPassBuilder AddRenderPass( this RenderGraph renderGraph, string name, out TPassData passData, Action> setup) where TPassData : class, new() { var builder = renderGraph.AddRenderPass(name, out passData); setup(builder); builder.Dispose(); return builder; } } public sealed class RenderGraphPassScope : IDisposable where TPassData : class, new() { private readonly RenderGraphPassBuilder _builder; private readonly string _passName; internal RenderGraphPassScope(RenderGraphPassBuilder builder, string passName) { _builder = builder; _passName = passName; } public RenderGraphPassBuilder Builder => _builder; public void Dispose() { // Commit the pass when the using block ends if (_builder.RenderFunc != null) { _builder.Dispose(); } } }