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;
}
}
}