using System.Diagnostics; using UnityEngine.Scripting.APIUpdating; // Typedefs for the in-engine RendererList API (to avoid conflicts with the experimental version) using CoreRendererList = UnityEngine.Rendering.RendererList; using CoreRendererListDesc = UnityEngine.Rendering.RendererUtils.RendererListDesc; namespace UnityEngine.Rendering.RenderGraphModule { internal enum RendererListHandleType { // RendererList and async RendererList Renderers, // Other builtin rendererLists representing Gfx works scheduled by Unity core. Such as shadow/skybox/gizmo/etc Legacy } /// /// Renderer List resource handle. /// [DebuggerDisplay("RendererList ({handle})")] [MovedFrom(true, "UnityEngine.Experimental.Rendering.RenderGraphModule", "UnityEngine.Rendering.RenderGraphModule")] public struct RendererListHandle { internal RendererListHandleType type; bool m_IsValid; internal int handle { get; private set; } internal RendererListHandle(int handle, RendererListHandleType type = RendererListHandleType.Renderers) { this.handle = handle; m_IsValid = true; this.type = type; } /// /// 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 RendererListParams desc; public CoreRendererList rendererList; internal RendererListResource(in RendererListParams desc) { this.desc = desc; this.rendererList = new CoreRendererList(); // Invalid by default } } internal struct RendererListLegacyResource { public CoreRendererList rendererList; public bool isActive; internal RendererListLegacyResource(in bool active = false) { this.rendererList = new CoreRendererList(); // Invalid by default this.isActive = active; } } }