using System; using UnityEngine; using UnityEngine.XR.OpenXR.NativeTypes; namespace MagicLeap.OpenXR.Features.EyeTracker { internal unsafe class EyeTrackerNativeFunctions : NativeFunctionsBase { internal delegate* unmanaged[Cdecl] XrCreateEyeTracker; internal delegate* unmanaged[Cdecl] XrDestroyEyeTracker; internal delegate* unmanaged[Cdecl] XrGetEyeTrackerStaticData; internal delegate* unmanaged[Cdecl] XrGetEyeTrackerGeometricData; internal delegate* unmanaged[Cdecl] XrGetEyeTrackerPupilData; internal delegate* unmanaged[Cdecl] XrGetEyeTrackerGazeBehavior; internal delegate* unmanaged[Cdecl] XrGetEyeTrackerPoses; protected override void Validate() { base.Validate(); if (XrCreateEyeTracker == null) { Debug.LogError($"Unable to find {nameof(XrCreateEyeTracker)}"); } if (XrDestroyEyeTracker == null) { Debug.LogError($"Unable to find {nameof(XrDestroyEyeTracker)}"); } if (XrGetEyeTrackerStaticData == null) { Debug.LogError($"Unable to find {nameof(XrGetEyeTrackerStaticData)}"); } if (XrGetEyeTrackerGeometricData == null) { Debug.LogError($"Unable to find {nameof(XrGetEyeTrackerGeometricData)}"); } if (XrGetEyeTrackerPupilData == null) { Debug.LogError($"Unable to find {nameof(XrGetEyeTrackerPupilData)}"); } if (XrGetEyeTrackerGazeBehavior == null) { Debug.LogError($"Unable to find {nameof(XrGetEyeTrackerGazeBehavior)}"); } if (XrGetEyeTrackerPoses == null) { Debug.LogError($"Unable to find {nameof(XrGetEyeTrackerPoses)}"); } } private string SanitizeFunctionName(string input) { return $"{input.Replace("Xr", "xr")}ML"; } protected override void LocateNativeFunctions() { XrCreateEyeTracker = (delegate* unmanaged[Cdecl])LocateNativeFunction(SanitizeFunctionName(nameof(XrCreateEyeTracker))); XrDestroyEyeTracker = (delegate* unmanaged[Cdecl])LocateNativeFunction(SanitizeFunctionName(nameof(XrDestroyEyeTracker))); XrGetEyeTrackerStaticData = (delegate* unmanaged[Cdecl])LocateNativeFunction(SanitizeFunctionName(nameof(XrGetEyeTrackerStaticData))); XrGetEyeTrackerGeometricData = (delegate* unmanaged[Cdecl])LocateNativeFunction(SanitizeFunctionName(nameof(XrGetEyeTrackerGeometricData))); XrGetEyeTrackerPupilData = (delegate* unmanaged[Cdecl])LocateNativeFunction(SanitizeFunctionName(nameof(XrGetEyeTrackerPupilData))); XrGetEyeTrackerGazeBehavior = (delegate* unmanaged[Cdecl])LocateNativeFunction(SanitizeFunctionName(nameof(XrGetEyeTrackerGazeBehavior))); XrGetEyeTrackerPoses = (delegate* unmanaged[Cdecl])LocateNativeFunction(SanitizeFunctionName(nameof(XrGetEyeTrackerPoses))); } } }