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