using System; namespace UnityEngine.XR.ARSubsystems { /// /// Descriptor for the describing capabilities which may vary by implementation. /// public sealed class XRSessionSubsystemDescriptor : SubsystemDescriptor { /// /// Whether the session supports the update or installation of session software. /// public bool supportsInstall { get; private set; } /// /// Whether the session supports matching the AR frame rate to the Unity frame rate. /// public bool supportsMatchFrameRate { get; private set; } /// /// Used in conjunction with to register a provider. /// This should only be used by subsystem implementors. /// public struct Cinfo : IEquatable { /// /// Whether the session supports the update or installation of session software. /// public bool supportsInstall { get; set; } /// /// Whether the session supports matching the AR frame rate to the Unity frame rate. /// public bool supportsMatchFrameRate { get; set; } /// /// The string used to identify this subsystem implementation. /// This will be available when enumerating the available descriptors at runtime. /// public string id { get; set; } /// /// The Type of the implementation. /// public Type subsystemImplementationType { get; set; } public override int GetHashCode() { unchecked { var hash = (id != null) ? id.GetHashCode() : 0; hash = hash * 486187739 + ((subsystemImplementationType != null) ? subsystemImplementationType.GetHashCode() : 0); hash = hash * 486187739 + supportsInstall.GetHashCode(); hash = hash * 486187739 + supportsMatchFrameRate.GetHashCode(); return hash; } } public override bool Equals(object obj) { if (!(obj is Cinfo)) return false; return Equals((Cinfo)obj); } public bool Equals(Cinfo other) { return string.Equals(id, other.id) && (subsystemImplementationType == other.subsystemImplementationType) && (supportsInstall == other.supportsInstall) && (supportsMatchFrameRate == other.supportsMatchFrameRate); } public static bool operator ==(Cinfo lhs, Cinfo rhs) { return lhs.Equals(rhs); } public static bool operator !=(Cinfo lhs, Cinfo rhs) { return !lhs.Equals(rhs); } } /// /// Register a subsystem implementation. /// This should only be used by subsystem implementors. /// /// Information used to construct the descriptor. public static void RegisterDescriptor(Cinfo cinfo) { SubsystemRegistration.CreateDescriptor(new XRSessionSubsystemDescriptor(cinfo)); } XRSessionSubsystemDescriptor(Cinfo cinfo) { id = cinfo.id; subsystemImplementationType = cinfo.subsystemImplementationType; supportsInstall = cinfo.supportsInstall; supportsMatchFrameRate = cinfo.supportsMatchFrameRate; } } }