using System; using System.Runtime.InteropServices; namespace UnityEngine.XR.ARSubsystems { /// /// Describes a set of conversion parameters for use with 's conversion methods. /// [StructLayout(LayoutKind.Sequential)] public struct XRCameraImageConversionParams : IEquatable { RectInt m_InputRect; Vector2Int m_OutputDimensions; TextureFormat m_Format; CameraImageTransformation m_Transformation; /// /// The portion of the original image that will be used as input to the conversion. /// /// /// The input rectangle must be completely contained inside the XRCameraImage /// . /// /// /// The portion of the original image that will be converted. /// public RectInt inputRect { get { return m_InputRect; } set { m_InputRect = value; } } /// /// The dimensions of the converted image. The output dimensions must be less than or equal to the /// 's dimensions. If the output dimensions are less than the 's /// dimensions, downsampling is performed using nearest neighbor. /// /// /// The dimensions of the converted image. /// public Vector2Int outputDimensions { get { return m_OutputDimensions; } set { m_OutputDimensions = value; } } /// /// The TextureFormat to which to convert. See for a list of /// supported formats. /// /// /// The TextureFormat to which to convert. /// public TextureFormat outputFormat { get { return m_Format; } set { m_Format = value; } } /// /// The transformation to apply to the image during conversion. /// /// /// The transformation to apply to the image during conversion. /// public CameraImageTransformation transformation { get { return m_Transformation; } set { m_Transformation = value; } } /// /// Constructs a using the 's full /// resolution. That is, it sets to (0, 0, image.width, image.height) and /// to (image.width, image.height). /// /// The source . /// The TextureFormat to convert to. /// An optional to apply. public XRCameraImageConversionParams( XRCameraImage image, TextureFormat format, CameraImageTransformation transformation = CameraImageTransformation.None) { m_InputRect = new RectInt(0, 0, image.width, image.height); m_OutputDimensions = new Vector2Int(image.width, image.height); m_Format = format; m_Transformation = transformation; } public override int GetHashCode() { unchecked { var hash = inputRect.GetHashCode(); hash = hash * 486187739 + outputDimensions.GetHashCode(); hash = hash * 486187739 + ((int)outputFormat).GetHashCode(); hash = hash * 486187739 + ((int)transformation).GetHashCode(); return hash; } } public bool Equals(XRCameraImageConversionParams other) { return (inputRect.Equals(other.inputRect) && outputDimensions.Equals(other.outputDimensions) && outputFormat.Equals(other.outputFormat) && transformation.Equals(other.transformation)); } public override bool Equals(object obj) { return (ReferenceEquals(this, obj) || ((obj is XRCameraImageConversionParams) && Equals((XRCameraImageConversionParams)obj))); } public static bool operator ==(XRCameraImageConversionParams lhs, XRCameraImageConversionParams rhs) { return lhs.Equals(rhs); } public static bool operator !=(XRCameraImageConversionParams lhs, XRCameraImageConversionParams rhs) { return !lhs.Equals(rhs); } public override string ToString() { return string.Format( "inputRect: {0} outputDimensions: {1} format: {2} transformation: {3})", inputRect, outputDimensions, outputFormat, transformation); } } }