mixedreality/com.microsoft.mixedreality..../Runtime/NativeLib.cs

459 lines
26 KiB
C#

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
using System.Runtime.InteropServices;
using System.Text;
using Microsoft.MixedReality.OpenXR.ARSubsystems;
using UnityEngine;
using UnityEngine.XR.ARSubsystems;
namespace Microsoft.MixedReality.OpenXR
{
[Flags]
internal enum NativeSpaceLocationFlags : uint
{
OrientationValid = 1,
PositionValid = 2,
OrientationTracked = 4,
PositionTracked = 8,
All = 15
}
[Serializable, StructLayout(LayoutKind.Sequential, Pack = 8)]
internal struct MixedRealityPluginOptions
{
private byte m_disableFirstPersonObserver;
private byte m_enablePoseUpdateOnBeforeRender;
public bool DisableFirstPersonObserver
{
get { return m_disableFirstPersonObserver != 0; }
set { m_disableFirstPersonObserver = (byte)(value ? 1 : 0); }
}
public bool EnablePoseUpdateOnBeforeRender
{
get { return m_enablePoseUpdateOnBeforeRender != 0; }
set { m_enablePoseUpdateOnBeforeRender = (byte)(value ? 1 : 0); }
}
}
[Serializable, StructLayout(LayoutKind.Sequential, Pack = 8)]
internal struct HandTrackingOptions
{
[SerializeField, Tooltip("The requested motion range for this hand.")]
private HandJointsMotionRange motionRange;
public HandJointsMotionRange MotionRange
{
get => motionRange;
set => motionRange = value;
}
}
// IL2CPP does not support marshaling delegates that do not have this attribute.
internal class MonoPInvokeCallbackAttribute : Attribute { public MonoPInvokeCallbackAttribute() { } }
internal class NativeLib
{
internal const string DllName = "MicrosoftOpenXRPlugin";
// Configure Unity's IL2CPP compiler to process C# string (always UTF16) interop to C++ "const char*".
// Unity by default is converting to UTF8 when compiling IL2CPP code for pinvoke.
// Using the [MarshalAs(UnmanagedUTF8Type)] string to make this conversion more explicitly.
// UnmanagedType.LPUTF8Str is only defined in Net40, so for compatibility on NET20, use 48 instead.
internal const short UnmanagedUTF8Type = 48; // UnmanagedType.LPUTF8Str
[DllImport(DllName, EntryPoint = "openxr_plugin_InitializePlugin")]
internal static extern void InitializePlugin();
[DllImport(DllName, EntryPoint = "openxr_plugin_InitializePluginProviders")]
internal static extern void InitializePluginProviders([MarshalAs(UnmanagedUTF8Type)] string featureName);
[DllImport(DllName, EntryPoint = "openxr_plugin_SetPluginEnvironment")]
internal static extern void SetPluginEnvironment(PluginEnvironment pluginEnvironment, [MarshalAs(UnmanagedUTF8Type)] string pluginInfo);
[DllImport(DllName, EntryPoint = "openxr_plugin_OnSubsystemsStarting")]
internal static extern void OnSubsystemsStarting();
[DllImport(DllName, EntryPoint = "openxr_plugin_OnSubsystemsStopped")]
internal static extern void OnSubsystemsStopped();
[DllImport(DllName, EntryPoint = "openxr_plugin_HookGetInstanceProcAddr")]
internal static extern IntPtr HookGetInstanceProcAddr(IntPtr func);
[DllImport(DllName, EntryPoint = "openxr_plugin_OnInstanceCreated")]
internal static extern void OnInstanceCreated(ulong instance, IntPtr xrGetInstanceProcAddr, string[] enabledExtensionNames, int enabledExtensionNamesCount);
[DllImport(DllName, EntryPoint = "openxr_plugin_OnInstanceDestroyed")]
internal static extern void OnInstanceDestroyed();
[DllImport(DllName, EntryPoint = "openxr_plugin_SetXrSystemId")]
internal static extern void SetXrSystemId(ulong systemId);
[DllImport(DllName, EntryPoint = "openxr_plugin_SetXrSession")]
internal static extern void SetXrSession(ulong session);
[DllImport(DllName, EntryPoint = "openxr_plugin_SetXrSessionRunning")]
internal static extern void SetXrSessionRunning([MarshalAs(UnmanagedType.U1)] bool running);
[DllImport(DllName, EntryPoint = "openxr_plugin_SetXrSessionState")]
internal static extern void SetSessionState(uint sessionState);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetViewTrackingFlags")]
internal static extern NativeSpaceLocationFlags GetViewTrackingFlags(ViewConfigurationType viewConfigurationType);
[DllImport(DllName, EntryPoint = "openxr_plugin_SetMixedRealityPluginOptions")]
internal static extern void SetMixedRealityPluginOptions(MixedRealityPluginOptions mixedRealityPluginOptions);
[DllImport(DllName, EntryPoint = "openxr_plugin_SetSceneOriginSpace")]
internal static extern void SetSceneOriginSpace(ulong sceneOriginSpace);
[DllImport(DllName, EntryPoint = "openxr_plugin_IsSelectKeywordFiltered")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool IsSelectKeywordFiltered();
[DllImport(DllName, EntryPoint = "openxr_plugin_GetEnabledViewConfigurationTypesCount")]
internal static extern uint GetEnabledViewConfigurationTypesCount();
[DllImport(DllName, EntryPoint = "openxr_plugin_GetEnabledViewConfigurationTypes")]
internal static extern void GetEnabledViewConfigurationTypes(ViewConfigurationType[] viewConfigurationTypes, uint viewConfigurationTypesCapacity);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetViewConfigurationIsActive")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool GetViewConfigurationIsActive(ViewConfigurationType viewConfigurationType);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetViewConfigurationIsPrimary")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool GetViewConfigurationIsPrimary(ViewConfigurationType viewConfigurationType);
[DllImport(DllName, EntryPoint = "openxr_plugin_SetStereoSeparationAdjustment")]
internal static extern void SetStereoSeparationAdjustment(float stereoSeparationAdjustment);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetStereoSeparationAdjustment")]
internal static extern float GetStereoSeparationAdjustment();
[DllImport(DllName, EntryPoint = "openxr_plugin_GetSupportedReprojectionModesCount")]
internal static extern uint GetSupportedReprojectionModesCount(ViewConfigurationType viewConfigurationType);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetSupportedReprojectionModes")]
internal static extern void GetSupportedReprojectionModes(ViewConfigurationType viewConfigurationType, ReprojectionMode[] reprojectionModes, uint reprojectionModesCapacity);
[DllImport(DllName, EntryPoint = "openxr_plugin_SetReprojectionSettings")]
internal static extern void SetReprojectionSettings(ViewConfigurationType viewConfigurationType, NativeReprojectionSettings nativeReprojectionSettings);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetPrimaryViewTrackingState")]
internal static extern NativeSpaceLocationFlags GetPrimaryViewTrackingState();
[DllImport(DllName, EntryPoint = "openxr_plugin_CreatePlaneProvider")]
internal static extern void CreatePlaneProvider();
[DllImport(DllName, EntryPoint = "openxr_plugin_StartPlaneSubsystem")]
internal static extern void StartPlaneSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_StopPlaneSubsystem")]
internal static extern void StopPlaneSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_DestroyPlaneSubsystem")]
internal static extern void DestroyPlaneSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_SetPlaneDetectionMode")]
internal static extern void SetPlaneDetectionMode(PlaneDetectionMode planeDetectionMode);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetNumPlaneChanges")]
internal static extern void GetNumPlaneChanges(FrameTime frameTime, ref uint numAddedPlanes, ref uint numUpdatedPlanes, ref uint numRemovedPlanes);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetPlaneChanges")]
unsafe internal static extern void GetPlaneChanges(uint addedPlanesSize, void* addedPlanes, uint updatedPlanesSize, void* updatedPlanes, uint removedPlanesSize, void* removedPlanes);
[DllImport(DllName, EntryPoint = "openxr_plugin_StartAnchorSubsystem")]
internal static extern void StartAnchorSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_StopAnchorSubsystem")]
internal static extern void StopAnchorSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_DestroyAnchorSubsystemPending")]
internal static extern void DestroyAnchorSubsystemPending();
[DllImport(DllName, EntryPoint = "openxr_plugin_DestroyAnchorSubsystem")]
internal static extern void DestroyAnchorSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_RemoveAllAnchors")]
internal static extern void RemoveAllAnchors();
[DllImport(DllName, EntryPoint = "openxr_plugin_TryAddAnchor")]
[return: MarshalAs(UnmanagedType.U1)]
unsafe internal static extern bool TryAddAnchor(FrameTime frameTime, Quaternion rotation, Vector3 position, void* anchorPtr);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryRemoveAnchor")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryRemoveAnchor(Guid anchorId);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetNumAnchorChanges")]
internal static extern void GetNumAnchorChanges(FrameTime frameTime, ref uint numAddedAnchors, ref uint numUpdatedAnchors, ref uint numRemovedAnchors);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetAnchorChanges")]
unsafe internal static extern void GetAnchorChanges(uint addedAnchorsSize, void* addedAnchors, uint updatedAnchorsSize, void* updatedAnchors, uint removedAnchorsSize, void* removedAnchors);
[DllImport(DllName, EntryPoint = "openxr_plugin_LoadAnchorStore")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool LoadAnchorStore();
[DllImport(DllName, EntryPoint = "openxr_plugin_ResetAnchorStore")]
internal static extern void ResetAnchorStore();
[DllImport(DllName, EntryPoint = "openxr_plugin_GetAnchorCount")]
internal static extern uint GetAnchorCount();
[DllImport(DllName, EntryPoint = "openxr_plugin_GetNumPersistedAnchorNames")]
internal static extern uint GetNumPersistedAnchorNames();
[DllImport(DllName, EntryPoint = "openxr_plugin_GetPersistedAnchorName")]
internal static extern void GetPersistedAnchorName(uint idx, [MarshalAs(UnmanagedUTF8Type)] StringBuilder nameOut, uint capacity);
[DllImport(DllName, EntryPoint = "openxr_plugin_LoadPersistedAnchor")]
internal static extern Guid LoadPersistedAnchor([MarshalAs(UnmanagedUTF8Type)] string name);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryPersistAnchor")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryPersistAnchor([MarshalAs(UnmanagedUTF8Type)] string name, Guid anchorId);
[DllImport(DllName, EntryPoint = "openxr_plugin_UnpersistAnchor")]
internal static extern void UnpersistAnchor([MarshalAs(UnmanagedUTF8Type)] string name);
[DllImport(DllName, EntryPoint = "openxr_plugin_ClearPersistedAnchors")]
internal static extern void ClearPersistedAnchors();
[DllImport(DllName, EntryPoint = "openxr_plugin_GetHandJointsMotionRange")]
internal static extern HandJointsMotionRange GetHandJointsMotionRange(Handedness handedness);
[DllImport(DllName, EntryPoint = "openxr_plugin_SetHandJointsMotionRange")]
internal static extern void SetHandJointsMotionRange(Handedness handedness, HandJointsMotionRange handTrackingOptions);
#pragma warning disable CS0618
[DllImport(DllName, EntryPoint = "openxr_plugin_TryGetHandJointData")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryGetHandJointData(Handedness handedness, FrameTime frameTime,
[MarshalAs(UnmanagedType.LPArray, SizeConst = HandTracker.JointCount)] HandJointLocation[] handJoints);
#pragma warning restore CS0618
[DllImport(DllName, EntryPoint = "openxr_plugin_TryLocateHandMesh")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryLocateHandMesh(Handedness handedness, FrameTime frameTime, HandPoseType handPoseType, out Pose pose);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryGetHandMesh")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryGetHandMesh(Handedness handedness, FrameTime frameTime, HandPoseType handPoseType,
ref ulong vertexBufferKey, out uint vertexCount, Vector3[] vertexPositions, Vector3[] vertexNormals,
ref uint indexBufferKey, out uint indexCount, int[] indices);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryGetHandMeshBufferSizes")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryGetHandMeshBufferSizes(out uint maxVertexCount, out uint maxIndexCount);
[DllImport(DllName, EntryPoint = "openxr_plugin_IsControllerModelSupported")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool IsControllerModelSupported();
[DllImport(DllName, EntryPoint = "openxr_plugin_TryGetControllerModelKey")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryGetControllerModelKey(Handedness handedness, out ulong modelKey);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryGetControllerModel")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryGetControllerModel(ulong modelKey, uint bufferCapacityInput, out uint bufferCountOutput, byte[] modelBuffer = null);
#pragma warning disable CS0618
[DllImport(DllName, EntryPoint = "openxr_plugin_TryGetControllerModelProperties")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryGetControllerModelProperties(ulong key, uint nodeCapacityInput, out uint nodeCountOutput, [Out] ControllerModel.ControllerModelNodeProperties[] properties = null);
#pragma warning restore CS0618
[DllImport(DllName, EntryPoint = "openxr_plugin_TryGetControllerModelState")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryGetControllerModelState(ulong key, uint nodeCapacityInput, out uint nodeCountOutput, Pose[] poses = null);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryEnableRemotingOverride")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryEnableRemotingOverride();
[DllImport(DllName, EntryPoint = "openxr_plugin_ResetRemotingOverride")]
internal static extern void ResetRemotingOverride();
[DllImport(DllName, EntryPoint = "openxr_plugin_ConnectRemoting")]
internal static extern void ConnectRemoting(Remoting.InternalRemotingConnectConfiguration configuration, [MarshalAs(UnmanagedType.U1)] bool secureConnect,
[MarshalAs(UnmanagedUTF8Type)] string authenticationToken, [MarshalAs(UnmanagedType.U1)] bool performSystemValidation,
[MarshalAs(UnmanagedType.FunctionPtr)] Remoting.InternalValidateServerCertificateDelegate validateServerCertificateCallback);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetNumCertificates")]
internal static extern uint GetNumCertificates();
[DllImport(DllName, EntryPoint = "openxr_plugin_GetCertificate")]
internal static extern IntPtr GetCertificate(uint certIndex, out int size);
[DllImport(DllName, EntryPoint = "openxr_plugin_ListenRemoting")]
unsafe internal static extern void ListenRemoting(
Remoting.InternalRemotingListenConfiguration listenConfiguration,
[MarshalAs(UnmanagedType.U1)] bool secureListen,
void* certificate,
uint certificateByteCount,
[MarshalAs(UnmanagedUTF8Type)] string subjectName,
[MarshalAs(UnmanagedUTF8Type)] string keyPassPhrase,
[MarshalAs(UnmanagedType.FunctionPtr)] Remoting.SecureRemotingValidateAuthenticationTokenDelegate validateAuthenticationTokenCallback);
[DllImport(DllName, EntryPoint = "openxr_plugin_DisconnectRemoting")]
internal static extern void DisconnectRemoting();
[DllImport(DllName, EntryPoint = "openxr_plugin_TryGetRemotingConnectionState")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryGetRemotingConnectionState(out Remoting.ConnectionState connectionState, out Remoting.DisconnectReason disconnectReason);
[DllImport(DllName, EntryPoint = "openxr_plugin_SetRemoteSpeechCulture")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool SetRemoteSpeechCulture([MarshalAs(UnmanagedUTF8Type)] string cultureName);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryLocateUserReferenceSpace")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryLocateUserReferenceSpace(FrameTime frameTime, out Pose pose);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryConvertToRemoteTime")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryConvertToRemoteTime(long playerPerformanceCount, out long remotePerformanceCount);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryConvertToPlayerTime")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryConvertToPlayerTime(long remotePerformanceCount, out long playerPerformanceCount);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryCreateSpaceFromStaticNodeId")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryCreateSpaceFromStaticNodeId(Guid id, out ulong spaceId);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryCreateSpaceFromDynamicNodeId")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryCreateSpaceFromDynamicNodeId(Guid id, out ulong spaceId);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryLocateSpatialGraphNodeSpace")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryLocateSpatialGraphNodeSpace(ulong spaceId, FrameTime frameTime, out Pose pose);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryLocateSpatialGraphNodeSpaceWithQpcTime")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryLocateSpatialGraphNodeSpace(ulong spaceId, long qpcTime, out Pose pose);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryLocateViewSpace")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryLocateViewSpace(FrameTime frameTime, out Pose pose, out long time);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryAcquireSceneCoordinateSystem")]
internal static extern IntPtr TryAcquireSceneCoordinateSystem(Pose poseInScene);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryAcquirePerceptionSpatialAnchorByHandle")]
internal static extern IntPtr TryAcquirePerceptionSpatialAnchor(ulong anchorHandle);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryAcquirePerceptionSpatialAnchorById")]
internal static extern IntPtr TryAcquirePerceptionSpatialAnchor(Guid trackableId);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryCreateARAnchorFromOpenXRHandle")]
internal static extern Guid TryCreateARAnchorFromOpenXRHandle(ulong openxrAnchor);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryCreateARAnchorFromPerceptionAnchor")]
internal static extern Guid TryCreateARAnchorFromPerceptionAnchor([MarshalAs(UnmanagedType.IUnknown)] object perceptionAnchor);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryAcquireAndReplaceXrSpatialAnchor")]
internal static extern Guid TryAcquireAndReplaceXrSpatialAnchor([MarshalAs(UnmanagedType.IUnknown)] object perceptionAnchor, Guid id);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryGetPerceptionDeviceFactory")]
internal static extern IntPtr TryGetPerceptionDeviceFactory(IntPtr pfnGetInstanceProcAddr);
[DllImport(DllName, EntryPoint = "openxr_plugin_SetMeshComputeSettings")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool SetMeshComputeSettings(MeshComputeSettings settings);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryCreateGestureRecognizer")]
internal static extern ulong TryCreateGestureRecognizer(GestureSettings settings);
[DllImport(DllName, EntryPoint = "openxr_plugin_DestroyGestureRecognizer")]
internal static extern void DestroyGestureRecognizer(ulong gestureRecognizer);
[DllImport(DllName, EntryPoint = "openxr_plugin_TrySetGestureSettings")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TrySetGestureSettings(ulong gestureRecognizer, GestureSettings settings);
[DllImport(DllName, EntryPoint = "openxr_plugin_CancelPendingGesture")]
internal static extern void CancelPendingGesture(ulong gestureRecognizer);
[DllImport(DllName, EntryPoint = "openxr_plugin_TryGetNextEventData")]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool TryGetNextEventData(ulong gestureRecognizer, ref GestureEventData eventData);
[DllImport(DllName, EntryPoint = "openxr_plugin_StartGestureRecognizer")]
internal static extern void StartGestureRecognizer(ulong gestureRecognizer);
[DllImport(DllName, EntryPoint = "openxr_plugin_StopGestureRecognizer")]
internal static extern void StopGestureRecognizer(ulong gestureRecognizer);
[DllImport(DllName, EntryPoint = "openxr_plugin_StartMarkerSubsystem")]
internal static extern void StartMarkerSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_StopMarkerSubsystem")]
internal static extern void StopMarkerSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_DestroyMarkerSubsystem")]
internal static extern void DestroyMarkerSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_SetEnabledMarkerTypes")]
internal static extern void SetEnabledMarkerTypes(XrSceneMarkerTypeMSFT[] enabledMarkerTypes, int numMarkerTypes);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetNumMarkerChanges")]
internal static extern void GetNumMarkerChanges(FrameTime frameTime, ref uint numAddedMarkers, ref uint numUpdatedMarkers, ref uint numRemovedMarkers);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetMarkerChanges")]
unsafe internal static extern void GetMarkerChanges(uint addedMarkersSize, void* addedMarkers, uint updatedMarkersSize, void* updatedMarkers, uint removedMarkersSize, void* removedMarkers);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetMarkerRawDataSize")]
internal static extern uint GetMarkerRawDataSize(Guid markerId);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetMarkerRawData")]
unsafe internal static extern void GetMarkerRawData(Guid markerId, void* rawDataOut, uint capacity);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetMarkerDecodedStringLength")]
internal static extern uint GetMarkerDecodedStringLength(Guid markerId);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetMarkerDecodedString")]
internal static extern void GetMarkerDecodedString(Guid markerId, [MarshalAs(UnmanagedUTF8Type)] StringBuilder decodedStringOut, uint capacity);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetMarkerQRCodeProperties")]
unsafe internal static extern void GetMarkerQRCodeProperties(Guid markerId, NativeQRCodeProperties* qrCodePropertiesOut, uint capacity);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetCurrentQpcTimeAsXrTime")]
internal static extern long GetCurrentQpcTimeAsXrTime();
[DllImport(DllName, EntryPoint = "openxr_plugin_ConvertXrTimeToQpcTime")]
internal static extern long ConvertXrTimeToQpcTime(long xrTime);
[DllImport(DllName, EntryPoint = "openxr_plugin_GetPredictedDisplayTimeInXrTime")]
internal static extern long GetPredictedDisplayTimeInXrTime(FrameTime frameTime);
[DllImport(DllName, EntryPoint = "openxr_plugin_StartMapTrackingSubsystem")]
internal static extern void StartMapTrackingSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_StopMapTrackingSubsystem")]
internal static extern void StopMapTrackingSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_DestroyMapTrackingSubsystem")]
internal static extern void DestroyMapTrackingSubsystem();
[DllImport(DllName, EntryPoint = "openxr_plugin_MapTrackingManagerSupportsApplicationExclusiveMaps")]
internal static extern bool MapTrackingManagerSupportsApplicationExclusiveMaps();
[DllImport(DllName, EntryPoint = "openxr_plugin_MapTrackingManagerGetActiveTrackingMapType")]
internal static extern int MapTrackingManagerGetActiveTrackingMapType();
[DllImport(DllName, EntryPoint = "openxr_plugin_MapTrackingManagerActivateExclusiveMap")]
internal static extern bool MapTrackingManagerActivateExclusiveMap(ref Guid mapId);
[DllImport(DllName, EntryPoint = "openxr_plugin_MapTrackingManagerActivateSharedMap")]
internal static extern bool MapTrackingManagerActivateSharedMap();
}
}