// ===================== 2022 HTC Corporation. All Rights Reserved. =================== using System; using System.Collections.Generic; using System.Runtime.InteropServices; using VIVE.OpenXR.EyeTracker; namespace VIVE.OpenXR { public class XR_HTC_eye_tracker_defs { public virtual XrResult xrCreateEyeTrackerHTC(XrEyeTrackerCreateInfoHTC createInfo, out XrEyeTrackerHTC eyeTracker) { eyeTracker = 0; return XrResult.XR_ERROR_FEATURE_UNSUPPORTED; } public virtual XrResult xrDestroyEyeTrackerHTC(XrEyeTrackerHTC eyeTracker) { return XrResult.XR_ERROR_FEATURE_UNSUPPORTED; } protected XrEyeGazeDataHTC m_eyeGazes = new XrEyeGazeDataHTC(); //= new XrEyeGazeDataHTC(XrStructureType.XR_TYPE_EYE_GAZE_DATA_HTC, IntPtr.Zero, 0); public virtual XrResult xrGetEyeGazeDataHTC(XrEyeTrackerHTC eyeTracker, XrEyeGazeDataInfoHTC gazeInfo, out XrEyeGazeDataHTC eyeGazes) { m_eyeGazes.type = XrStructureType.XR_TYPE_EYE_GAZE_DATA_HTC; m_eyeGazes.next = IntPtr.Zero; m_eyeGazes.time = 0; eyeGazes = m_eyeGazes; return XrResult.XR_ERROR_FEATURE_UNSUPPORTED; } public virtual bool GetEyeGazeData(out XrSingleEyeGazeDataHTC[] out_gazes) { m_eyeGazes.type = XrStructureType.XR_TYPE_EYE_GAZE_DATA_HTC; m_eyeGazes.next = IntPtr.Zero; m_eyeGazes.time = 0; out_gazes = m_eyeGazes.gaze; return false; } protected XrEyePupilDataHTC m_pupilData = new XrEyePupilDataHTC(); public virtual XrResult xrGetEyePupilDataHTC(XrEyeTrackerHTC eyeTracker, XrEyePupilDataInfoHTC pupilDataInfo, out XrEyePupilDataHTC pupilData) { m_pupilData.type = XrStructureType.XR_TYPE_EYE_PUPIL_DATA_HTC; m_pupilData.next = IntPtr.Zero; m_pupilData.time = 0; pupilData = m_pupilData; return XrResult.XR_ERROR_FEATURE_UNSUPPORTED; } public virtual bool GetEyePupilData(out XrSingleEyePupilDataHTC[] pupilData) { m_pupilData.type = XrStructureType.XR_TYPE_EYE_PUPIL_DATA_HTC; m_pupilData.next = IntPtr.Zero; m_pupilData.time = 0; pupilData = m_pupilData.pupilData; return false; } protected XrEyeGeometricDataHTC m_eyeGeometricData = new XrEyeGeometricDataHTC(); public virtual XrResult xrGetEyeGeometricDataHTC(XrEyeTrackerHTC eyeTracker, XrEyeGeometricDataInfoHTC info, out XrEyeGeometricDataHTC eyeGeometricData) { m_eyeGeometricData.type = XrStructureType.XR_TYPE_EYE_GEOMETRIC_DATA_HTC; m_eyeGeometricData.next = IntPtr.Zero; m_eyeGeometricData.time = 0; eyeGeometricData = m_eyeGeometricData; return XrResult.XR_ERROR_FEATURE_UNSUPPORTED; } public virtual bool GetEyeGeometricData(out XrSingleEyeGeometricDataHTC[] geometricData) { m_eyeGeometricData.type = XrStructureType.XR_TYPE_EYE_GEOMETRIC_DATA_HTC; m_eyeGeometricData.next = IntPtr.Zero; m_eyeGeometricData.time = 0; geometricData = m_eyeGeometricData.eyeGeometricData; return false; } } public class XR_HTC_eye_tracker { static XR_HTC_eye_tracker_defs m_Instance = null; public static XR_HTC_eye_tracker_defs Interop { get { if (m_Instance == null) { m_Instance = new XR_HTC_eye_tracker_impls(); } return m_Instance; } } /// /// An application can create an XrEyeTrackerHTC handle using CreateEyeTracker. /// /// The XrEyeTrackerCreateInfoHTC used to specify the eye tracker. /// The returned XrEyeTrackerHTC handle. /// XR_SUCCESS for success. public static XrResult xrCreateEyeTrackerHTC(XrEyeTrackerCreateInfoHTC createInfo, out XrEyeTrackerHTC eyeTracker) { return Interop.xrCreateEyeTrackerHTC(createInfo,out eyeTracker); } /// /// Releases the eye tracker and the underlying resources when the eye tracking experience is over. /// /// An XrEyeTrackerHTC previously created by xrCreateEyeTrackerHTC. /// XR_SUCCESS for success. public static XrResult xrDestroyEyeTrackerHTC(XrEyeTrackerHTC eyeTracker) { return Interop.xrDestroyEyeTrackerHTC(eyeTracker); } /// /// Retrieves the XrEyeGazeDataHTC data of a XrEyeTrackerHTC. /// /// An XrEyeTrackerHTC previously created by xrCreateEyeTrackerHTC. /// The information to get eye gaze. /// Output parameter to retrieve a pointer to XrEyeGazeDataHTC receiving the returned eye poses. /// XR_SUCCESS for success. public static XrResult xrGetEyeGazeDataHTC(XrEyeTrackerHTC eyeTracker, XrEyeGazeDataInfoHTC gazeInfo, out XrEyeGazeDataHTC eyeGazes) { return Interop.xrGetEyeGazeDataHTC(eyeTracker, gazeInfo, out eyeGazes); } /// /// Retrieves the XrEyePupilDataHTC data of a XrEyeTrackerHTC. /// /// An XrEyeTrackerHTC previously created by xrCreateEyeTrackerHTC. /// The information to get pupil data. /// A pointer to XrEyePupilDataHTC returned by the runtime. /// XR_SUCCESS for success. public static XrResult xrGetEyePupilDataHTC(XrEyeTrackerHTC eyeTracker, XrEyePupilDataInfoHTC pupilDataInfo, out XrEyePupilDataHTC pupilData) { return Interop.xrGetEyePupilDataHTC(eyeTracker, pupilDataInfo, out pupilData); } /// An XrEyeTrackerHTC previously created by xrCreateEyeTrackerHTC. /// A pointer to XrEyeGeometricDataInfoHTC structure. /// A pointer to XrEyeGeometricDataHTC returned by the runtime. /// XR_SUCCESS for success. public static XrResult xrGetEyeGeometricDataHTC(XrEyeTrackerHTC eyeTracker, XrEyeGeometricDataInfoHTC info, out XrEyeGeometricDataHTC eyeGeometricData) { return Interop.xrGetEyeGeometricDataHTC(eyeTracker,info, out eyeGeometricData); } } }