using System.Diagnostics; using UnityEngine.Rendering; using UnityEngine.Rendering.RendererUtils; // Typedefs for the in-engine RendererList API (to avoid conflicts with the experimental version) using CoreRendererList = UnityEngine.Rendering.RendererUtils.RendererList; using CoreRendererListDesc = UnityEngine.Rendering.RendererUtils.RendererListDesc; namespace UnityEngine.Experimental.Rendering.RenderGraphModule { /// /// Renderer List resource handle. /// [DebuggerDisplay("RendererList ({handle})")] public struct RendererListHandle { bool m_IsValid; internal int handle { get; private set; } internal RendererListHandle(int handle) { this.handle = handle; m_IsValid = true; } /// /// Conversion to int. /// /// Renderer List handle to convert. /// The integer representation of the handle. public static implicit operator int(RendererListHandle handle) { return handle.handle; } /// /// Cast to RendererList /// /// Input RendererListHandle. /// Resource as a RendererList. public static implicit operator CoreRendererList(RendererListHandle rendererList) => rendererList.IsValid() ? RenderGraphResourceRegistry.current.GetRendererList(rendererList) : CoreRendererList.nullRendererList; /// /// Return true if the handle is valid. /// /// True if the handle is valid. public bool IsValid() => m_IsValid; } internal struct RendererListResource { public CoreRendererListDesc desc; public CoreRendererList rendererList; internal RendererListResource(in CoreRendererListDesc desc) { this.desc = desc; this.rendererList = new CoreRendererList(); // Invalid by default } } }