From 6a3b0cd24a161bfade0c6edd386ec2aa187bf922 Mon Sep 17 00:00:00 2001 From: Natsumi Date: Sat, 23 Aug 2025 12:06:47 +1200 Subject: [PATCH] Update OpenVR --- Dotnet/OpenVR/openvr_api.cs | 15715 +++++++++++---------- Dotnet/Overlay/Cef/SystemMonitorCef.cs | 3 + Dotnet/libs/openvr_api.dll | Bin 839488 -> 836760 bytes src-electron/libs/linux/libopenvr_api.so | Bin 1752088 -> 1752264 bytes 4 files changed, 7861 insertions(+), 7857 deletions(-) diff --git a/Dotnet/OpenVR/openvr_api.cs b/Dotnet/OpenVR/openvr_api.cs index bec3bdc4..bfaec402 100644 --- a/Dotnet/OpenVR/openvr_api.cs +++ b/Dotnet/OpenVR/openvr_api.cs @@ -17,6182 +17,6263 @@ using UnityEngine; namespace Valve.VR { - [StructLayout(LayoutKind.Sequential)] - public struct IVRSystem - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetRecommendedRenderTargetSize(ref uint pnWidth, ref uint pnHeight); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetRecommendedRenderTargetSize GetRecommendedRenderTargetSize; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate HmdMatrix44_t _GetProjectionMatrix(EVREye eEye, float fNearZ, float fFarZ); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetProjectionMatrix GetProjectionMatrix; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetProjectionRaw(EVREye eEye, ref float pfLeft, ref float pfRight, ref float pfTop, ref float pfBottom); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetProjectionRaw GetProjectionRaw; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _ComputeDistortion(EVREye eEye, float fU, float fV, ref DistortionCoordinates_t pDistortionCoordinates); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ComputeDistortion ComputeDistortion; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate HmdMatrix34_t _GetEyeToHeadTransform(EVREye eEye); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetEyeToHeadTransform GetEyeToHeadTransform; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetTimeSinceLastVsync(ref float pfSecondsSinceLastVsync, ref ulong pulFrameCounter); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetTimeSinceLastVsync GetTimeSinceLastVsync; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate int _GetD3D9AdapterIndex(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetD3D9AdapterIndex GetD3D9AdapterIndex; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetDXGIOutputInfo(ref int pnAdapterIndex); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDXGIOutputInfo GetDXGIOutputInfo; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetOutputDevice(ref ulong pnDevice, ETextureType textureType, IntPtr pInstance); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOutputDevice GetOutputDevice; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsDisplayOnDesktop(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsDisplayOnDesktop IsDisplayOnDesktop; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _SetDisplayVisibility([MarshalAs(UnmanagedType.I1)] bool bIsVisibleOnDesktop); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetDisplayVisibility SetDisplayVisibility; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, [In, Out] TrackedDevicePose_t[] pTrackedDevicePoseArray, uint unTrackedDevicePoseArrayCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDeviceToAbsoluteTrackingPose GetDeviceToAbsoluteTrackingPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate HmdMatrix34_t _GetSeatedZeroPoseToStandingAbsoluteTrackingPose(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSeatedZeroPoseToStandingAbsoluteTrackingPose GetSeatedZeroPoseToStandingAbsoluteTrackingPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate HmdMatrix34_t _GetRawZeroPoseToStandingAbsoluteTrackingPose(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetRawZeroPoseToStandingAbsoluteTrackingPose GetRawZeroPoseToStandingAbsoluteTrackingPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetSortedTrackedDeviceIndicesOfClass(ETrackedDeviceClass eTrackedDeviceClass, [In, Out] uint[] punTrackedDeviceIndexArray, uint unTrackedDeviceIndexArrayCount, uint unRelativeToTrackedDeviceIndex); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSortedTrackedDeviceIndicesOfClass GetSortedTrackedDeviceIndicesOfClass; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EDeviceActivityLevel _GetTrackedDeviceActivityLevel(uint unDeviceId); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetTrackedDeviceActivityLevel GetTrackedDeviceActivityLevel; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ApplyTransform(ref TrackedDevicePose_t pOutputPose, ref TrackedDevicePose_t pTrackedDevicePose, ref HmdMatrix34_t pTransform); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ApplyTransform ApplyTransform; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole unDeviceType); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetTrackedDeviceIndexForControllerRole GetTrackedDeviceIndexForControllerRole; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ETrackedControllerRole _GetControllerRoleForTrackedDeviceIndex(uint unDeviceIndex); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetControllerRoleForTrackedDeviceIndex GetControllerRoleForTrackedDeviceIndex; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ETrackedDeviceClass _GetTrackedDeviceClass(uint unDeviceIndex); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetTrackedDeviceClass GetTrackedDeviceClass; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsTrackedDeviceConnected(uint unDeviceIndex); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsTrackedDeviceConnected IsTrackedDeviceConnected; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetBoolTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetBoolTrackedDeviceProperty GetBoolTrackedDeviceProperty; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate float _GetFloatTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetFloatTrackedDeviceProperty GetFloatTrackedDeviceProperty; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate int _GetInt32TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetInt32TrackedDeviceProperty GetInt32TrackedDeviceProperty; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ulong _GetUint64TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetUint64TrackedDeviceProperty GetUint64TrackedDeviceProperty; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate HmdMatrix34_t _GetMatrix34TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetMatrix34TrackedDeviceProperty GetMatrix34TrackedDeviceProperty; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetArrayTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, uint propType, IntPtr pBuffer, uint unBufferSize, ref ETrackedPropertyError pError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetArrayTrackedDeviceProperty GetArrayTrackedDeviceProperty; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetStringTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, System.Text.StringBuilder pchValue, uint unBufferSize, ref ETrackedPropertyError pError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetStringTrackedDeviceProperty GetStringTrackedDeviceProperty; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetPropErrorNameFromEnum(ETrackedPropertyError error); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetPropErrorNameFromEnum GetPropErrorNameFromEnum; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _PollNextEvent(ref VREvent_t pEvent, uint uncbVREvent); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _PollNextEvent PollNextEvent; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _PollNextEventWithPose(ETrackingUniverseOrigin eOrigin, ref VREvent_t pEvent, uint uncbVREvent, ref TrackedDevicePose_t pTrackedDevicePose); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _PollNextEventWithPose PollNextEventWithPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetEventTypeNameFromEnum(EVREventType eType); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetEventTypeNameFromEnum GetEventTypeNameFromEnum; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate HiddenAreaMesh_t _GetHiddenAreaMesh(EVREye eEye, EHiddenAreaMeshType type); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetHiddenAreaMesh GetHiddenAreaMesh; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetControllerState(uint unControllerDeviceIndex, ref VRControllerState_t pControllerState, uint unControllerStateSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetControllerState GetControllerState; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetControllerStateWithPose(ETrackingUniverseOrigin eOrigin, uint unControllerDeviceIndex, ref VRControllerState_t pControllerState, uint unControllerStateSize, ref TrackedDevicePose_t pTrackedDevicePose); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetControllerStateWithPose GetControllerStateWithPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _TriggerHapticPulse(uint unControllerDeviceIndex, uint unAxisId, ushort usDurationMicroSec); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _TriggerHapticPulse TriggerHapticPulse; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetButtonIdNameFromEnum(EVRButtonId eButtonId); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetButtonIdNameFromEnum GetButtonIdNameFromEnum; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetControllerAxisTypeNameFromEnum(EVRControllerAxisType eAxisType); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetControllerAxisTypeNameFromEnum GetControllerAxisTypeNameFromEnum; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsInputAvailable(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsInputAvailable IsInputAvailable; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsSteamVRDrawingControllers(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsSteamVRDrawingControllers IsSteamVRDrawingControllers; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _ShouldApplicationPause(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShouldApplicationPause ShouldApplicationPause; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _ShouldApplicationReduceRenderingWork(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShouldApplicationReduceRenderingWork ShouldApplicationReduceRenderingWork; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRFirmwareError _PerformFirmwareUpdate(uint unDeviceIndex); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _PerformFirmwareUpdate PerformFirmwareUpdate; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _AcknowledgeQuit_Exiting(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _AcknowledgeQuit_Exiting AcknowledgeQuit_Exiting; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetAppContainerFilePaths(System.Text.StringBuilder pchBuffer, uint unBufferSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetAppContainerFilePaths GetAppContainerFilePaths; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetRuntimeVersion(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetRuntimeVersion GetRuntimeVersion; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRExtendedDisplay - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetWindowBounds(ref int pnX, ref int pnY, ref uint pnWidth, ref uint pnHeight); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetWindowBounds GetWindowBounds; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetEyeOutputViewport(EVREye eEye, ref uint pnX, ref uint pnY, ref uint pnWidth, ref uint pnHeight); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetEyeOutputViewport GetEyeOutputViewport; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetDXGIOutputInfo(ref int pnAdapterIndex, ref int pnAdapterOutputIndex); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDXGIOutputInfo GetDXGIOutputInfo; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRTrackedCamera - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetCameraErrorNameFromEnum(EVRTrackedCameraError eCameraError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCameraErrorNameFromEnum GetCameraErrorNameFromEnum; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRTrackedCameraError _HasCamera(uint nDeviceIndex, [MarshalAs(UnmanagedType.I1)] ref bool pHasCamera); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _HasCamera HasCamera; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRTrackedCameraError _GetCameraFrameSize(uint nDeviceIndex, EVRTrackedCameraFrameType eFrameType, ref uint pnWidth, ref uint pnHeight, ref uint pnFrameBufferSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCameraFrameSize GetCameraFrameSize; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRTrackedCameraError _GetCameraIntrinsics(uint nDeviceIndex, uint nCameraIndex, EVRTrackedCameraFrameType eFrameType, ref HmdVector2_t pFocalLength, ref HmdVector2_t pCenter); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCameraIntrinsics GetCameraIntrinsics; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRTrackedCameraError _GetCameraProjection(uint nDeviceIndex, uint nCameraIndex, EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, ref HmdMatrix44_t pProjection); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCameraProjection GetCameraProjection; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRTrackedCameraError _AcquireVideoStreamingService(uint nDeviceIndex, ref ulong pHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _AcquireVideoStreamingService AcquireVideoStreamingService; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRTrackedCameraError _ReleaseVideoStreamingService(ulong hTrackedCamera); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReleaseVideoStreamingService ReleaseVideoStreamingService; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRTrackedCameraError _GetVideoStreamFrameBuffer(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, IntPtr pFrameBuffer, uint nFrameBufferSize, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetVideoStreamFrameBuffer GetVideoStreamFrameBuffer; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRTrackedCameraError _GetVideoStreamTextureSize(uint nDeviceIndex, EVRTrackedCameraFrameType eFrameType, ref VRTextureBounds_t pTextureBounds, ref uint pnWidth, ref uint pnHeight); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetVideoStreamTextureSize GetVideoStreamTextureSize; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRTrackedCameraError _GetVideoStreamTextureD3D11(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, IntPtr pD3D11DeviceOrResource, ref IntPtr ppD3D11ShaderResourceView, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetVideoStreamTextureD3D11 GetVideoStreamTextureD3D11; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRTrackedCameraError _GetVideoStreamTextureGL(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, ref uint pglTextureId, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetVideoStreamTextureGL GetVideoStreamTextureGL; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRTrackedCameraError _ReleaseVideoStreamTextureGL(ulong hTrackedCamera, uint glTextureId); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReleaseVideoStreamTextureGL ReleaseVideoStreamTextureGL; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetCameraTrackingSpace(ETrackingUniverseOrigin eUniverse); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetCameraTrackingSpace SetCameraTrackingSpace; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ETrackingUniverseOrigin _GetCameraTrackingSpace(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCameraTrackingSpace GetCameraTrackingSpace; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRApplications - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _AddApplicationManifest(IntPtr pchApplicationManifestFullPath, [MarshalAs(UnmanagedType.I1)] bool bTemporary); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _AddApplicationManifest AddApplicationManifest; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _RemoveApplicationManifest(IntPtr pchApplicationManifestFullPath); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _RemoveApplicationManifest RemoveApplicationManifest; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsApplicationInstalled(IntPtr pchAppKey); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsApplicationInstalled IsApplicationInstalled; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetApplicationCount(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationCount GetApplicationCount; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _GetApplicationKeyByIndex(uint unApplicationIndex, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationKeyByIndex GetApplicationKeyByIndex; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _GetApplicationKeyByProcessId(uint unProcessId, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationKeyByProcessId GetApplicationKeyByProcessId; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _LaunchApplication(IntPtr pchAppKey); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _LaunchApplication LaunchApplication; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _LaunchTemplateApplication(IntPtr pchTemplateAppKey, IntPtr pchNewAppKey, [In, Out] AppOverrideKeys_t[] pKeys, uint unKeys); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _LaunchTemplateApplication LaunchTemplateApplication; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _LaunchApplicationFromMimeType(IntPtr pchMimeType, IntPtr pchArgs); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _LaunchApplicationFromMimeType LaunchApplicationFromMimeType; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _LaunchDashboardOverlay(IntPtr pchAppKey); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _LaunchDashboardOverlay LaunchDashboardOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _CancelApplicationLaunch(IntPtr pchAppKey); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CancelApplicationLaunch CancelApplicationLaunch; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _IdentifyApplication(uint unProcessId, IntPtr pchAppKey); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IdentifyApplication IdentifyApplication; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetApplicationProcessId(IntPtr pchAppKey); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationProcessId GetApplicationProcessId; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetApplicationsErrorNameFromEnum(EVRApplicationError error); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationsErrorNameFromEnum GetApplicationsErrorNameFromEnum; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetApplicationPropertyString(IntPtr pchAppKey, EVRApplicationProperty eProperty, System.Text.StringBuilder pchPropertyValueBuffer, uint unPropertyValueBufferLen, ref EVRApplicationError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationPropertyString GetApplicationPropertyString; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetApplicationPropertyBool(IntPtr pchAppKey, EVRApplicationProperty eProperty, ref EVRApplicationError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationPropertyBool GetApplicationPropertyBool; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ulong _GetApplicationPropertyUint64(IntPtr pchAppKey, EVRApplicationProperty eProperty, ref EVRApplicationError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationPropertyUint64 GetApplicationPropertyUint64; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _SetApplicationAutoLaunch(IntPtr pchAppKey, [MarshalAs(UnmanagedType.I1)] bool bAutoLaunch); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetApplicationAutoLaunch SetApplicationAutoLaunch; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetApplicationAutoLaunch(IntPtr pchAppKey); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationAutoLaunch GetApplicationAutoLaunch; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _SetDefaultApplicationForMimeType(IntPtr pchAppKey, IntPtr pchMimeType); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetDefaultApplicationForMimeType SetDefaultApplicationForMimeType; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetDefaultApplicationForMimeType(IntPtr pchMimeType, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDefaultApplicationForMimeType GetDefaultApplicationForMimeType; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetApplicationSupportedMimeTypes(IntPtr pchAppKey, System.Text.StringBuilder pchMimeTypesBuffer, uint unMimeTypesBuffer); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationSupportedMimeTypes GetApplicationSupportedMimeTypes; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetApplicationsThatSupportMimeType(IntPtr pchMimeType, System.Text.StringBuilder pchAppKeysThatSupportBuffer, uint unAppKeysThatSupportBuffer); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationsThatSupportMimeType GetApplicationsThatSupportMimeType; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetApplicationLaunchArguments(uint unHandle, System.Text.StringBuilder pchArgs, uint unArgs); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetApplicationLaunchArguments GetApplicationLaunchArguments; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _GetStartingApplication(System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetStartingApplication GetStartingApplication; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRSceneApplicationState _GetSceneApplicationState(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSceneApplicationState GetSceneApplicationState; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _PerformApplicationPrelaunchCheck(IntPtr pchAppKey); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _PerformApplicationPrelaunchCheck PerformApplicationPrelaunchCheck; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetSceneApplicationStateNameFromEnum(EVRSceneApplicationState state); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSceneApplicationStateNameFromEnum GetSceneApplicationStateNameFromEnum; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRApplicationError _LaunchInternalProcess(IntPtr pchBinaryPath, IntPtr pchArguments, IntPtr pchWorkingDirectory); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _LaunchInternalProcess LaunchInternalProcess; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetCurrentSceneProcessId(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCurrentSceneProcessId GetCurrentSceneProcessId; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRChaperone - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ChaperoneCalibrationState _GetCalibrationState(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCalibrationState GetCalibrationState; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetPlayAreaSize(ref float pSizeX, ref float pSizeZ); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetPlayAreaSize GetPlayAreaSize; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetPlayAreaRect(ref HmdQuad_t rect); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetPlayAreaRect GetPlayAreaRect; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ReloadInfo(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReloadInfo ReloadInfo; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetSceneColor(HmdColor_t color); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetSceneColor SetSceneColor; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetBoundsColor(ref HmdColor_t pOutputColorArray, int nNumOutputColors, float flCollisionBoundsFadeDistance, ref HmdColor_t pOutputCameraColor); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetBoundsColor GetBoundsColor; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _AreBoundsVisible(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _AreBoundsVisible AreBoundsVisible; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ForceBoundsVisible([MarshalAs(UnmanagedType.I1)] bool bForce); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ForceBoundsVisible ForceBoundsVisible; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ResetZeroPose(ETrackingUniverseOrigin eTrackingUniverseOrigin); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ResetZeroPose ResetZeroPose; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRChaperoneSetup - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _CommitWorkingCopy(EChaperoneConfigFile configFile); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CommitWorkingCopy CommitWorkingCopy; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _RevertWorkingCopy(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _RevertWorkingCopy RevertWorkingCopy; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetWorkingPlayAreaSize(ref float pSizeX, ref float pSizeZ); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetWorkingPlayAreaSize GetWorkingPlayAreaSize; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetWorkingPlayAreaRect(ref HmdQuad_t rect); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetWorkingPlayAreaRect GetWorkingPlayAreaRect; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetWorkingCollisionBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, ref uint punQuadsCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetWorkingCollisionBoundsInfo GetWorkingCollisionBoundsInfo; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetLiveCollisionBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, ref uint punQuadsCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetLiveCollisionBoundsInfo GetLiveCollisionBoundsInfo; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetWorkingSeatedZeroPoseToRawTrackingPose GetWorkingSeatedZeroPoseToRawTrackingPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatStandingZeroPoseToRawTrackingPose); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetWorkingStandingZeroPoseToRawTrackingPose GetWorkingStandingZeroPoseToRawTrackingPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetWorkingPlayAreaSize(float sizeX, float sizeZ); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetWorkingPlayAreaSize SetWorkingPlayAreaSize; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetWorkingCollisionBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, uint unQuadsCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetWorkingCollisionBoundsInfo SetWorkingCollisionBoundsInfo; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetWorkingPerimeter([In, Out] HmdVector2_t[] pPointBuffer, uint unPointCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetWorkingPerimeter SetWorkingPerimeter; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatSeatedZeroPoseToRawTrackingPose); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetWorkingSeatedZeroPoseToRawTrackingPose SetWorkingSeatedZeroPoseToRawTrackingPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatStandingZeroPoseToRawTrackingPose); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetWorkingStandingZeroPoseToRawTrackingPose SetWorkingStandingZeroPoseToRawTrackingPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ReloadFromDisk(EChaperoneConfigFile configFile); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReloadFromDisk ReloadFromDisk; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetLiveSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetLiveSeatedZeroPoseToRawTrackingPose GetLiveSeatedZeroPoseToRawTrackingPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _ExportLiveToBuffer(System.Text.StringBuilder pBuffer, ref uint pnBufferLength); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ExportLiveToBuffer ExportLiveToBuffer; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _ImportFromBufferToWorking(IntPtr pBuffer, uint nImportFlags); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ImportFromBufferToWorking ImportFromBufferToWorking; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ShowWorkingSetPreview(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShowWorkingSetPreview ShowWorkingSetPreview; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _HideWorkingSetPreview(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _HideWorkingSetPreview HideWorkingSetPreview; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _RoomSetupStarting(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _RoomSetupStarting RoomSetupStarting; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRCompositor - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetTrackingSpace(ETrackingUniverseOrigin eOrigin); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetTrackingSpace SetTrackingSpace; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ETrackingUniverseOrigin _GetTrackingSpace(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetTrackingSpace GetTrackingSpace; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _WaitGetPoses([In, Out] TrackedDevicePose_t[] pRenderPoseArray, uint unRenderPoseArrayCount, [In, Out] TrackedDevicePose_t[] pGamePoseArray, uint unGamePoseArrayCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _WaitGetPoses WaitGetPoses; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _GetLastPoses([In, Out] TrackedDevicePose_t[] pRenderPoseArray, uint unRenderPoseArrayCount, [In, Out] TrackedDevicePose_t[] pGamePoseArray, uint unGamePoseArrayCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetLastPoses GetLastPoses; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _GetLastPoseForTrackedDeviceIndex(uint unDeviceIndex, ref TrackedDevicePose_t pOutputPose, ref TrackedDevicePose_t pOutputGamePose); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetLastPoseForTrackedDeviceIndex GetLastPoseForTrackedDeviceIndex; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _Submit(EVREye eEye, ref Texture_t pTexture, ref VRTextureBounds_t pBounds, EVRSubmitFlags nSubmitFlags); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _Submit Submit; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _SubmitWithArrayIndex(EVREye eEye, ref Texture_t pTexture, uint unTextureArrayIndex, ref VRTextureBounds_t pBounds, EVRSubmitFlags nSubmitFlags); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SubmitWithArrayIndex SubmitWithArrayIndex; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ClearLastSubmittedFrame(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ClearLastSubmittedFrame ClearLastSubmittedFrame; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _PostPresentHandoff(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _PostPresentHandoff PostPresentHandoff; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetFrameTiming(ref Compositor_FrameTiming pTiming, uint unFramesAgo); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetFrameTiming GetFrameTiming; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetFrameTimings([In, Out] Compositor_FrameTiming[] pTiming, uint nFrames); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetFrameTimings GetFrameTimings; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate float _GetFrameTimeRemaining(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetFrameTimeRemaining GetFrameTimeRemaining; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetCumulativeStats(ref Compositor_CumulativeStats pStats, uint nStatsSizeInBytes); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCumulativeStats GetCumulativeStats; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _FadeToColor(float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, [MarshalAs(UnmanagedType.I1)] bool bBackground); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _FadeToColor FadeToColor; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate HmdColor_t _GetCurrentFadeColor([MarshalAs(UnmanagedType.I1)] bool bBackground); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCurrentFadeColor GetCurrentFadeColor; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _FadeGrid(float fSeconds, [MarshalAs(UnmanagedType.I1)] bool bFadeGridIn); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _FadeGrid FadeGrid; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate float _GetCurrentGridAlpha(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCurrentGridAlpha GetCurrentGridAlpha; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _SetSkyboxOverride([In, Out] Texture_t[] pTextures, uint unTextureCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetSkyboxOverride SetSkyboxOverride; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ClearSkyboxOverride(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ClearSkyboxOverride ClearSkyboxOverride; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _CompositorBringToFront(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CompositorBringToFront CompositorBringToFront; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _CompositorGoToBack(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CompositorGoToBack CompositorGoToBack; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _CompositorQuit(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CompositorQuit CompositorQuit; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsFullscreen(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsFullscreen IsFullscreen; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetCurrentSceneFocusProcess(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCurrentSceneFocusProcess GetCurrentSceneFocusProcess; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetLastFrameRenderer(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetLastFrameRenderer GetLastFrameRenderer; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _CanRenderScene(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CanRenderScene CanRenderScene; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ShowMirrorWindow(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShowMirrorWindow ShowMirrorWindow; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _HideMirrorWindow(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _HideMirrorWindow HideMirrorWindow; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsMirrorWindowVisible(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsMirrorWindowVisible IsMirrorWindowVisible; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _CompositorDumpImages(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CompositorDumpImages CompositorDumpImages; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _ShouldAppRenderWithLowResources(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShouldAppRenderWithLowResources ShouldAppRenderWithLowResources; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ForceInterleavedReprojectionOn([MarshalAs(UnmanagedType.I1)] bool bOverride); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ForceInterleavedReprojectionOn ForceInterleavedReprojectionOn; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ForceReconnectProcess(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ForceReconnectProcess ForceReconnectProcess; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SuspendRendering([MarshalAs(UnmanagedType.I1)] bool bSuspend); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SuspendRendering SuspendRendering; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _GetMirrorTextureD3D11(EVREye eEye, IntPtr pD3D11DeviceOrResource, ref IntPtr ppD3D11ShaderResourceView); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetMirrorTextureD3D11 GetMirrorTextureD3D11; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ReleaseMirrorTextureD3D11(IntPtr pD3D11ShaderResourceView); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReleaseMirrorTextureD3D11 ReleaseMirrorTextureD3D11; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _GetMirrorTextureGL(EVREye eEye, ref uint pglTextureId, IntPtr pglSharedTextureHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetMirrorTextureGL GetMirrorTextureGL; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _ReleaseSharedGLTexture(uint glTextureId, IntPtr glSharedTextureHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReleaseSharedGLTexture ReleaseSharedGLTexture; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _LockGLSharedTextureForAccess(IntPtr glSharedTextureHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _LockGLSharedTextureForAccess LockGLSharedTextureForAccess; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _UnlockGLSharedTextureForAccess(IntPtr glSharedTextureHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _UnlockGLSharedTextureForAccess UnlockGLSharedTextureForAccess; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetVulkanInstanceExtensionsRequired(System.Text.StringBuilder pchValue, uint unBufferSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetVulkanInstanceExtensionsRequired GetVulkanInstanceExtensionsRequired; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetVulkanDeviceExtensionsRequired(IntPtr pPhysicalDevice, System.Text.StringBuilder pchValue, uint unBufferSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetVulkanDeviceExtensionsRequired GetVulkanDeviceExtensionsRequired; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetExplicitTimingMode(EVRCompositorTimingMode eTimingMode); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetExplicitTimingMode SetExplicitTimingMode; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _SubmitExplicitTimingData(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SubmitExplicitTimingData SubmitExplicitTimingData; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsMotionSmoothingEnabled(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsMotionSmoothingEnabled IsMotionSmoothingEnabled; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsMotionSmoothingSupported(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsMotionSmoothingSupported IsMotionSmoothingSupported; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsCurrentSceneFocusAppLoading(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsCurrentSceneFocusAppLoading IsCurrentSceneFocusAppLoading; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _SetStageOverride_Async(IntPtr pchRenderModelPath, ref HmdMatrix34_t pTransform, ref Compositor_StageRenderSettings pRenderSettings, uint nSizeOfRenderSettings); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetStageOverride_Async SetStageOverride_Async; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ClearStageOverride(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ClearStageOverride ClearStageOverride; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetCompositorBenchmarkResults(ref Compositor_BenchmarkResults pBenchmarkResults, uint nSizeOfBenchmarkResults); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetCompositorBenchmarkResults GetCompositorBenchmarkResults; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _GetLastPosePredictionIDs(ref uint pRenderPosePredictionID, ref uint pGamePosePredictionID); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetLastPosePredictionIDs GetLastPosePredictionIDs; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRCompositorError _GetPosesForFrame(uint unPosePredictionID, [In, Out] TrackedDevicePose_t[] pPoseArray, uint unPoseArrayCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetPosesForFrame GetPosesForFrame; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVROverlay - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _FindOverlay(IntPtr pchOverlayKey, ref ulong pOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _FindOverlay FindOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _CreateOverlay(IntPtr pchOverlayKey, IntPtr pchOverlayName, ref ulong pOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CreateOverlay CreateOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _CreateSubviewOverlay(ulong parentOverlayHandle, IntPtr pchSubviewOverlayKey, IntPtr pchSubviewOverlayName, ref ulong pSubviewOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CreateSubviewOverlay CreateSubviewOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _DestroyOverlay(ulong ulOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _DestroyOverlay DestroyOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetOverlayKey(ulong ulOverlayHandle, System.Text.StringBuilder pchValue, uint unBufferSize, ref EVROverlayError pError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayKey GetOverlayKey; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetOverlayName(ulong ulOverlayHandle, System.Text.StringBuilder pchValue, uint unBufferSize, ref EVROverlayError pError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayName GetOverlayName; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayName(ulong ulOverlayHandle, IntPtr pchName); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayName SetOverlayName; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayImageData(ulong ulOverlayHandle, IntPtr pvBuffer, uint unBufferSize, ref uint punWidth, ref uint punHeight); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayImageData GetOverlayImageData; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetOverlayErrorNameFromEnum(EVROverlayError error); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayErrorNameFromEnum GetOverlayErrorNameFromEnum; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayRenderingPid(ulong ulOverlayHandle, uint unPID); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayRenderingPid SetOverlayRenderingPid; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetOverlayRenderingPid(ulong ulOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayRenderingPid GetOverlayRenderingPid; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayFlag(ulong ulOverlayHandle, VROverlayFlags eOverlayFlag, [MarshalAs(UnmanagedType.I1)] bool bEnabled); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayFlag SetOverlayFlag; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayFlag(ulong ulOverlayHandle, VROverlayFlags eOverlayFlag, [MarshalAs(UnmanagedType.I1)] ref bool pbEnabled); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayFlag GetOverlayFlag; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayFlags(ulong ulOverlayHandle, ref uint pFlags); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayFlags GetOverlayFlags; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayColor(ulong ulOverlayHandle, float fRed, float fGreen, float fBlue); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayColor SetOverlayColor; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayColor(ulong ulOverlayHandle, ref float pfRed, ref float pfGreen, ref float pfBlue); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayColor GetOverlayColor; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayAlpha(ulong ulOverlayHandle, float fAlpha); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayAlpha SetOverlayAlpha; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayAlpha(ulong ulOverlayHandle, ref float pfAlpha); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayAlpha GetOverlayAlpha; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayTexelAspect(ulong ulOverlayHandle, float fTexelAspect); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayTexelAspect SetOverlayTexelAspect; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayTexelAspect(ulong ulOverlayHandle, ref float pfTexelAspect); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayTexelAspect GetOverlayTexelAspect; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlaySortOrder(ulong ulOverlayHandle, uint unSortOrder); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlaySortOrder SetOverlaySortOrder; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlaySortOrder(ulong ulOverlayHandle, ref uint punSortOrder); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlaySortOrder GetOverlaySortOrder; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayWidthInMeters(ulong ulOverlayHandle, float fWidthInMeters); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayWidthInMeters SetOverlayWidthInMeters; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayWidthInMeters(ulong ulOverlayHandle, ref float pfWidthInMeters); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayWidthInMeters GetOverlayWidthInMeters; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayCurvature(ulong ulOverlayHandle, float fCurvature); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayCurvature SetOverlayCurvature; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayCurvature(ulong ulOverlayHandle, ref float pfCurvature); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayCurvature GetOverlayCurvature; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayPreCurvePitch(ulong ulOverlayHandle, float fRadians); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayPreCurvePitch SetOverlayPreCurvePitch; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayPreCurvePitch(ulong ulOverlayHandle, ref float pfRadians); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayPreCurvePitch GetOverlayPreCurvePitch; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayTextureColorSpace(ulong ulOverlayHandle, EColorSpace eTextureColorSpace); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayTextureColorSpace SetOverlayTextureColorSpace; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayTextureColorSpace(ulong ulOverlayHandle, ref EColorSpace peTextureColorSpace); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayTextureColorSpace GetOverlayTextureColorSpace; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayTextureBounds(ulong ulOverlayHandle, ref VRTextureBounds_t pOverlayTextureBounds); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayTextureBounds SetOverlayTextureBounds; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayTextureBounds(ulong ulOverlayHandle, ref VRTextureBounds_t pOverlayTextureBounds); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayTextureBounds GetOverlayTextureBounds; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayTransformType(ulong ulOverlayHandle, ref VROverlayTransformType peTransformType); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayTransformType GetOverlayTransformType; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayTransformAbsolute(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayTransformAbsolute SetOverlayTransformAbsolute; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayTransformAbsolute(ulong ulOverlayHandle, ref ETrackingUniverseOrigin peTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayTransformAbsolute GetOverlayTransformAbsolute; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle, uint unTrackedDevice, ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayTransformTrackedDeviceRelative SetOverlayTransformTrackedDeviceRelative; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle, ref uint punTrackedDevice, ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayTransformTrackedDeviceRelative GetOverlayTransformTrackedDeviceRelative; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle, uint unDeviceIndex, IntPtr pchComponentName); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayTransformTrackedDeviceComponent SetOverlayTransformTrackedDeviceComponent; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle, ref uint punDeviceIndex, System.Text.StringBuilder pchComponentName, uint unComponentNameSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayTransformTrackedDeviceComponent GetOverlayTransformTrackedDeviceComponent; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayTransformCursor(ulong ulCursorOverlayHandle, ref HmdVector2_t pvHotspot); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayTransformCursor SetOverlayTransformCursor; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayTransformCursor(ulong ulOverlayHandle, ref HmdVector2_t pvHotspot); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayTransformCursor GetOverlayTransformCursor; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayTransformProjection(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform, ref VROverlayProjection_t pProjection, EVREye eEye); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayTransformProjection SetOverlayTransformProjection; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetSubviewPosition(ulong ulOverlayHandle, float fX, float fY); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetSubviewPosition SetSubviewPosition; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _ShowOverlay(ulong ulOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShowOverlay ShowOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _HideOverlay(ulong ulOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _HideOverlay HideOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsOverlayVisible(ulong ulOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsOverlayVisible IsOverlayVisible; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetTransformForOverlayCoordinates(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, HmdVector2_t coordinatesInOverlay, ref HmdMatrix34_t pmatTransform); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetTransformForOverlayCoordinates GetTransformForOverlayCoordinates; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _WaitFrameSync(uint nTimeoutMs); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _WaitFrameSync WaitFrameSync; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _PollNextOverlayEvent(ulong ulOverlayHandle, ref VREvent_t pEvent, uint uncbVREvent); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _PollNextOverlayEvent PollNextOverlayEvent; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayInputMethod(ulong ulOverlayHandle, ref VROverlayInputMethod peInputMethod); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayInputMethod GetOverlayInputMethod; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayInputMethod(ulong ulOverlayHandle, VROverlayInputMethod eInputMethod); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayInputMethod SetOverlayInputMethod; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayMouseScale(ulong ulOverlayHandle, ref HmdVector2_t pvecMouseScale); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayMouseScale GetOverlayMouseScale; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayMouseScale(ulong ulOverlayHandle, ref HmdVector2_t pvecMouseScale); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayMouseScale SetOverlayMouseScale; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _ComputeOverlayIntersection(ulong ulOverlayHandle, ref VROverlayIntersectionParams_t pParams, ref VROverlayIntersectionResults_t pResults); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ComputeOverlayIntersection ComputeOverlayIntersection; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsHoverTargetOverlay(ulong ulOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsHoverTargetOverlay IsHoverTargetOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayIntersectionMask(ulong ulOverlayHandle, ref VROverlayIntersectionMaskPrimitive_t pMaskPrimitives, uint unNumMaskPrimitives, uint unPrimitiveSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayIntersectionMask SetOverlayIntersectionMask; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _TriggerLaserMouseHapticVibration(ulong ulOverlayHandle, float fDurationSeconds, float fFrequency, float fAmplitude); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _TriggerLaserMouseHapticVibration TriggerLaserMouseHapticVibration; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayCursor(ulong ulOverlayHandle, ulong ulCursorHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayCursor SetOverlayCursor; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayCursorPositionOverride(ulong ulOverlayHandle, ref HmdVector2_t pvCursor); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayCursorPositionOverride SetOverlayCursorPositionOverride; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _ClearOverlayCursorPositionOverride(ulong ulOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ClearOverlayCursorPositionOverride ClearOverlayCursorPositionOverride; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayTexture(ulong ulOverlayHandle, ref Texture_t pTexture); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayTexture SetOverlayTexture; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _ClearOverlayTexture(ulong ulOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ClearOverlayTexture ClearOverlayTexture; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayRaw(ulong ulOverlayHandle, IntPtr pvBuffer, uint unWidth, uint unHeight, uint unBytesPerPixel); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayRaw SetOverlayRaw; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetOverlayFromFile(ulong ulOverlayHandle, IntPtr pchFilePath); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetOverlayFromFile SetOverlayFromFile; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayTexture(ulong ulOverlayHandle, ref IntPtr pNativeTextureHandle, IntPtr pNativeTextureRef, ref uint pWidth, ref uint pHeight, ref uint pNativeFormat, ref ETextureType pAPIType, ref EColorSpace pColorSpace, ref VRTextureBounds_t pTextureBounds); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayTexture GetOverlayTexture; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _ReleaseNativeOverlayHandle(ulong ulOverlayHandle, IntPtr pNativeTextureHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReleaseNativeOverlayHandle ReleaseNativeOverlayHandle; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetOverlayTextureSize(ulong ulOverlayHandle, ref uint pWidth, ref uint pHeight); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOverlayTextureSize GetOverlayTextureSize; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _CreateDashboardOverlay(IntPtr pchOverlayKey, IntPtr pchOverlayFriendlyName, ref ulong pMainHandle, ref ulong pThumbnailHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CreateDashboardOverlay CreateDashboardOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsDashboardVisible(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsDashboardVisible IsDashboardVisible; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsActiveDashboardOverlay(ulong ulOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsActiveDashboardOverlay IsActiveDashboardOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _SetDashboardOverlaySceneProcess(ulong ulOverlayHandle, uint unProcessId); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetDashboardOverlaySceneProcess SetDashboardOverlaySceneProcess; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _GetDashboardOverlaySceneProcess(ulong ulOverlayHandle, ref uint punProcessId); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDashboardOverlaySceneProcess GetDashboardOverlaySceneProcess; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _ShowDashboard(IntPtr pchOverlayToShow); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShowDashboard ShowDashboard; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetPrimaryDashboardDevice(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetPrimaryDashboardDevice GetPrimaryDashboardDevice; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _ShowKeyboard(int eInputMode, int eLineInputMode, uint unFlags, IntPtr pchDescription, uint unCharMax, IntPtr pchExistingText, ulong uUserValue); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShowKeyboard ShowKeyboard; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _ShowKeyboardForOverlay(ulong ulOverlayHandle, int eInputMode, int eLineInputMode, uint unFlags, IntPtr pchDescription, uint unCharMax, IntPtr pchExistingText, ulong uUserValue); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShowKeyboardForOverlay ShowKeyboardForOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetKeyboardText(System.Text.StringBuilder pchText, uint cchText); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetKeyboardText GetKeyboardText; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _HideKeyboard(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _HideKeyboard HideKeyboard; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetKeyboardTransformAbsolute(ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToKeyboardTransform); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetKeyboardTransformAbsolute SetKeyboardTransformAbsolute; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetKeyboardPositionForOverlay(ulong ulOverlayHandle, HmdRect2_t avoidRect); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetKeyboardPositionForOverlay SetKeyboardPositionForOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate VRMessageOverlayResponse _ShowMessageOverlay(IntPtr pchText, IntPtr pchCaption, IntPtr pchButton0Text, IntPtr pchButton1Text, IntPtr pchButton2Text, IntPtr pchButton3Text); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShowMessageOverlay ShowMessageOverlay; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _CloseMessageOverlay(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CloseMessageOverlay CloseMessageOverlay; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVROverlayView - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _AcquireOverlayView(ulong ulOverlayHandle, ref VRNativeDevice_t pNativeDevice, ref VROverlayView_t pOverlayView, uint unOverlayViewSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _AcquireOverlayView AcquireOverlayView; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVROverlayError _ReleaseOverlayView(ref VROverlayView_t pOverlayView); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReleaseOverlayView ReleaseOverlayView; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _PostOverlayEvent(ulong ulOverlayHandle, ref VREvent_t pvrEvent); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _PostOverlayEvent PostOverlayEvent; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsViewingPermitted(ulong ulOverlayHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsViewingPermitted IsViewingPermitted; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRHeadsetView - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetHeadsetViewSize(uint nWidth, uint nHeight); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetHeadsetViewSize SetHeadsetViewSize; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetHeadsetViewSize(ref uint pnWidth, ref uint pnHeight); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetHeadsetViewSize GetHeadsetViewSize; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetHeadsetViewMode(uint eHeadsetViewMode); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetHeadsetViewMode SetHeadsetViewMode; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetHeadsetViewMode(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetHeadsetViewMode GetHeadsetViewMode; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetHeadsetViewCropped([MarshalAs(UnmanagedType.I1)] bool bCropped); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetHeadsetViewCropped SetHeadsetViewCropped; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetHeadsetViewCropped(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetHeadsetViewCropped GetHeadsetViewCropped; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate float _GetHeadsetViewAspectRatio(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetHeadsetViewAspectRatio GetHeadsetViewAspectRatio; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetHeadsetViewBlendRange(float flStartPct, float flEndPct); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetHeadsetViewBlendRange SetHeadsetViewBlendRange; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetHeadsetViewBlendRange(ref float pStartPct, ref float pEndPct); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetHeadsetViewBlendRange GetHeadsetViewBlendRange; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRRenderModels - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRRenderModelError _LoadRenderModel_Async(IntPtr pchRenderModelName, ref IntPtr ppRenderModel); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _LoadRenderModel_Async LoadRenderModel_Async; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _FreeRenderModel(IntPtr pRenderModel); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _FreeRenderModel FreeRenderModel; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRRenderModelError _LoadTexture_Async(int textureId, ref IntPtr ppTexture); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _LoadTexture_Async LoadTexture_Async; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _FreeTexture(IntPtr pTexture); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _FreeTexture FreeTexture; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRRenderModelError _LoadTextureD3D11_Async(int textureId, IntPtr pD3D11Device, ref IntPtr ppD3D11Texture2D); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _LoadTextureD3D11_Async LoadTextureD3D11_Async; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRRenderModelError _LoadIntoTextureD3D11_Async(int textureId, IntPtr pDstTexture); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _LoadIntoTextureD3D11_Async LoadIntoTextureD3D11_Async; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _FreeTextureD3D11(IntPtr pD3D11Texture2D); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _FreeTextureD3D11 FreeTextureD3D11; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetRenderModelName(uint unRenderModelIndex, System.Text.StringBuilder pchRenderModelName, uint unRenderModelNameLen); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetRenderModelName GetRenderModelName; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetRenderModelCount(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetRenderModelCount GetRenderModelCount; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetComponentCount(IntPtr pchRenderModelName); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetComponentCount GetComponentCount; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetComponentName(IntPtr pchRenderModelName, uint unComponentIndex, System.Text.StringBuilder pchComponentName, uint unComponentNameLen); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetComponentName GetComponentName; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ulong _GetComponentButtonMask(IntPtr pchRenderModelName, IntPtr pchComponentName); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetComponentButtonMask GetComponentButtonMask; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetComponentRenderModelName(IntPtr pchRenderModelName, IntPtr pchComponentName, System.Text.StringBuilder pchComponentRenderModelName, uint unComponentRenderModelNameLen); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetComponentRenderModelName GetComponentRenderModelName; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetComponentStateForDevicePath(IntPtr pchRenderModelName, IntPtr pchComponentName, ulong devicePath, ref RenderModel_ControllerMode_State_t pState, ref RenderModel_ComponentState_t pComponentState); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetComponentStateForDevicePath GetComponentStateForDevicePath; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetComponentState(IntPtr pchRenderModelName, IntPtr pchComponentName, ref VRControllerState_t pControllerState, ref RenderModel_ControllerMode_State_t pState, ref RenderModel_ComponentState_t pComponentState); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetComponentState GetComponentState; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _RenderModelHasComponent(IntPtr pchRenderModelName, IntPtr pchComponentName); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _RenderModelHasComponent RenderModelHasComponent; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetRenderModelThumbnailURL(IntPtr pchRenderModelName, System.Text.StringBuilder pchThumbnailURL, uint unThumbnailURLLen, ref EVRRenderModelError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetRenderModelThumbnailURL GetRenderModelThumbnailURL; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetRenderModelOriginalPath(IntPtr pchRenderModelName, System.Text.StringBuilder pchOriginalPath, uint unOriginalPathLen, ref EVRRenderModelError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetRenderModelOriginalPath GetRenderModelOriginalPath; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetRenderModelErrorNameFromEnum(EVRRenderModelError error); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetRenderModelErrorNameFromEnum GetRenderModelErrorNameFromEnum; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRNotifications - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRNotificationError _CreateNotification(ulong ulOverlayHandle, ulong ulUserValue, EVRNotificationType type, IntPtr pchText, EVRNotificationStyle style, ref NotificationBitmap_t pImage, ref uint pNotificationId); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CreateNotification CreateNotification; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRNotificationError _RemoveNotification(uint notificationId); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _RemoveNotification RemoveNotification; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRSettings - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetSettingsErrorNameFromEnum(EVRSettingsError eError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSettingsErrorNameFromEnum GetSettingsErrorNameFromEnum; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetBool(IntPtr pchSection, IntPtr pchSettingsKey, [MarshalAs(UnmanagedType.I1)] bool bValue, ref EVRSettingsError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetBool SetBool; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetInt32(IntPtr pchSection, IntPtr pchSettingsKey, int nValue, ref EVRSettingsError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetInt32 SetInt32; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetFloat(IntPtr pchSection, IntPtr pchSettingsKey, float flValue, ref EVRSettingsError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetFloat SetFloat; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _SetString(IntPtr pchSection, IntPtr pchSettingsKey, IntPtr pchValue, ref EVRSettingsError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetString SetString; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetBool(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetBool GetBool; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate int _GetInt32(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetInt32 GetInt32; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate float _GetFloat(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetFloat GetFloat; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _GetString(IntPtr pchSection, IntPtr pchSettingsKey, System.Text.StringBuilder pchValue, uint unValueLen, ref EVRSettingsError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetString GetString; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _RemoveSection(IntPtr pchSection, ref EVRSettingsError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _RemoveSection RemoveSection; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _RemoveKeyInSection(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _RemoveKeyInSection RemoveKeyInSection; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRScreenshots - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRScreenshotError _RequestScreenshot(ref uint pOutScreenshotHandle, EVRScreenshotType type, IntPtr pchPreviewFilename, IntPtr pchVRFilename); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _RequestScreenshot RequestScreenshot; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRScreenshotError _HookScreenshot([In, Out] EVRScreenshotType[] pSupportedTypes, int numTypes); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _HookScreenshot HookScreenshot; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRScreenshotType _GetScreenshotPropertyType(uint screenshotHandle, ref EVRScreenshotError pError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetScreenshotPropertyType GetScreenshotPropertyType; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetScreenshotPropertyFilename(uint screenshotHandle, EVRScreenshotPropertyFilenames filenameType, System.Text.StringBuilder pchFilename, uint cchFilename, ref EVRScreenshotError pError); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetScreenshotPropertyFilename GetScreenshotPropertyFilename; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRScreenshotError _UpdateScreenshotProgress(uint screenshotHandle, float flProgress); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _UpdateScreenshotProgress UpdateScreenshotProgress; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRScreenshotError _TakeStereoScreenshot(ref uint pOutScreenshotHandle, IntPtr pchPreviewFilename, IntPtr pchVRFilename); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _TakeStereoScreenshot TakeStereoScreenshot; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRScreenshotError _SubmitScreenshot(uint screenshotHandle, EVRScreenshotType type, IntPtr pchSourcePreviewFilename, IntPtr pchSourceVRFilename); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SubmitScreenshot SubmitScreenshot; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRResources - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _LoadSharedResource(IntPtr pchResourceName, string pchBuffer, uint unBufferLen); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _LoadSharedResource LoadSharedResource; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetResourceFullPath(IntPtr pchResourceName, IntPtr pchResourceTypeDirectory, System.Text.StringBuilder pchPathBuffer, uint unBufferLen); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetResourceFullPath GetResourceFullPath; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRDriverManager - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetDriverCount(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDriverCount GetDriverCount; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _GetDriverName(uint nDriver, System.Text.StringBuilder pchValue, uint unBufferSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDriverName GetDriverName; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ulong _GetDriverHandle(IntPtr pchDriverName); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDriverHandle GetDriverHandle; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsEnabled(uint nDriver); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsEnabled IsEnabled; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRInput - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _SetActionManifestPath(IntPtr pchActionManifestPath); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetActionManifestPath SetActionManifestPath; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetActionSetHandle(IntPtr pchActionSetName, ref ulong pHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetActionSetHandle GetActionSetHandle; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetActionHandle(IntPtr pchActionName, ref ulong pHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetActionHandle GetActionHandle; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetInputSourceHandle(IntPtr pchInputSourcePath, ref ulong pHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetInputSourceHandle GetInputSourceHandle; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _UpdateActionState([In, Out] VRActiveActionSet_t[] pSets, uint unSizeOfVRSelectedActionSet_t, uint unSetCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _UpdateActionState UpdateActionState; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetDigitalActionData(ulong action, ref InputDigitalActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDigitalActionData GetDigitalActionData; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetAnalogActionData(ulong action, ref InputAnalogActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetAnalogActionData GetAnalogActionData; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetPoseActionDataRelativeToNow(ulong action, ETrackingUniverseOrigin eOrigin, float fPredictedSecondsFromNow, ref InputPoseActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetPoseActionDataRelativeToNow GetPoseActionDataRelativeToNow; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetPoseActionDataForNextFrame(ulong action, ETrackingUniverseOrigin eOrigin, ref InputPoseActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetPoseActionDataForNextFrame GetPoseActionDataForNextFrame; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetSkeletalActionData(ulong action, ref InputSkeletalActionData_t pActionData, uint unActionDataSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSkeletalActionData GetSkeletalActionData; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetDominantHand(ref ETrackedControllerRole peDominantHand); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDominantHand GetDominantHand; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _SetDominantHand(ETrackedControllerRole eDominantHand); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _SetDominantHand SetDominantHand; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetBoneCount(ulong action, ref uint pBoneCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetBoneCount GetBoneCount; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetBoneHierarchy(ulong action, [In, Out] int[] pParentIndices, uint unIndexArayCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetBoneHierarchy GetBoneHierarchy; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetBoneName(ulong action, int nBoneIndex, System.Text.StringBuilder pchBoneName, uint unNameBufferSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetBoneName GetBoneName; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetSkeletalReferenceTransforms(ulong action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalReferencePose eReferencePose, [In, Out] VRBoneTransform_t[] pTransformArray, uint unTransformArrayCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSkeletalReferenceTransforms GetSkeletalReferenceTransforms; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetSkeletalTrackingLevel(ulong action, ref EVRSkeletalTrackingLevel pSkeletalTrackingLevel); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSkeletalTrackingLevel GetSkeletalTrackingLevel; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetSkeletalBoneData(ulong action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalMotionRange eMotionRange, [In, Out] VRBoneTransform_t[] pTransformArray, uint unTransformArrayCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSkeletalBoneData GetSkeletalBoneData; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetSkeletalSummaryData(ulong action, EVRSummaryType eSummaryType, ref VRSkeletalSummaryData_t pSkeletalSummaryData); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSkeletalSummaryData GetSkeletalSummaryData; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetSkeletalBoneDataCompressed(ulong action, EVRSkeletalMotionRange eMotionRange, IntPtr pvCompressedData, uint unCompressedSize, ref uint punRequiredCompressedSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSkeletalBoneDataCompressed GetSkeletalBoneDataCompressed; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _DecompressSkeletalBoneData(IntPtr pvCompressedBuffer, uint unCompressedBufferSize, EVRSkeletalTransformSpace eTransformSpace, [In, Out] VRBoneTransform_t[] pTransformArray, uint unTransformArrayCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _DecompressSkeletalBoneData DecompressSkeletalBoneData; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _TriggerHapticVibrationAction(ulong action, float fStartSecondsFromNow, float fDurationSeconds, float fFrequency, float fAmplitude, ulong ulRestrictToDevice); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _TriggerHapticVibrationAction TriggerHapticVibrationAction; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetActionOrigins(ulong actionSetHandle, ulong digitalActionHandle, [In, Out] ulong[] originsOut, uint originOutCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetActionOrigins GetActionOrigins; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetOriginLocalizedName(ulong origin, System.Text.StringBuilder pchNameArray, uint unNameArraySize, int unStringSectionsToInclude); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOriginLocalizedName GetOriginLocalizedName; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetOriginTrackedDeviceInfo(ulong origin, ref InputOriginInfo_t pOriginInfo, uint unOriginInfoSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetOriginTrackedDeviceInfo GetOriginTrackedDeviceInfo; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetActionBindingInfo(ulong action, [In, Out] InputBindingInfo_t[] pOriginInfo, uint unBindingInfoSize, uint unBindingInfoCount, ref uint punReturnedBindingInfoCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetActionBindingInfo GetActionBindingInfo; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _ShowActionOrigins(ulong actionSetHandle, ulong ulActionHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShowActionOrigins ShowActionOrigins; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _ShowBindingsForActionSet([In, Out] VRActiveActionSet_t[] pSets, uint unSizeOfVRSelectedActionSet_t, uint unSetCount, ulong originToHighlight); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ShowBindingsForActionSet ShowBindingsForActionSet; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetComponentStateForBinding(IntPtr pchRenderModelName, IntPtr pchComponentName, ref InputBindingInfo_t pOriginInfo, uint unBindingInfoSize, uint unBindingInfoCount, ref RenderModel_ComponentState_t pComponentState); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetComponentStateForBinding GetComponentStateForBinding; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _IsUsingLegacyInput(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _IsUsingLegacyInput IsUsingLegacyInput; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _OpenBindingUI(IntPtr pchAppKey, ulong ulActionSetHandle, ulong ulDeviceHandle, [MarshalAs(UnmanagedType.I1)] bool bShowOnDesktop); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _OpenBindingUI OpenBindingUI; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRInputError _GetBindingVariant(ulong ulDevicePath, System.Text.StringBuilder pchVariantArray, uint unVariantArraySize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetBindingVariant GetBindingVariant; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRIOBuffer - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EIOBufferError _Open(IntPtr pchPath, EIOBufferMode mode, uint unElementSize, uint unElements, ref ulong pulBuffer); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _Open Open; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EIOBufferError _Close(ulong ulBuffer); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _Close Close; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EIOBufferError _Read(ulong ulBuffer, IntPtr pDst, uint unBytes, ref uint punRead); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _Read Read; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EIOBufferError _Write(ulong ulBuffer, IntPtr pSrc, uint unBytes); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _Write Write; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ulong _PropertyContainer(ulong ulBuffer); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _PropertyContainer PropertyContainer; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _HasReaders(ulong ulBuffer); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _HasReaders HasReaders; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRSpatialAnchors - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRSpatialAnchorError _CreateSpatialAnchorFromDescriptor(IntPtr pchDescriptor, ref uint pHandleOut); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CreateSpatialAnchorFromDescriptor CreateSpatialAnchorFromDescriptor; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRSpatialAnchorError _CreateSpatialAnchorFromPose(uint unDeviceIndex, ETrackingUniverseOrigin eOrigin, ref SpatialAnchorPose_t pPose, ref uint pHandleOut); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _CreateSpatialAnchorFromPose CreateSpatialAnchorFromPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRSpatialAnchorError _GetSpatialAnchorPose(uint unHandle, ETrackingUniverseOrigin eOrigin, ref SpatialAnchorPose_t pPoseOut); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSpatialAnchorPose GetSpatialAnchorPose; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRSpatialAnchorError _GetSpatialAnchorDescriptor(uint unHandle, System.Text.StringBuilder pchDescriptorOut, ref uint punDescriptorBufferLenInOut); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetSpatialAnchorDescriptor GetSpatialAnchorDescriptor; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRDebug - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRDebugError _EmitVrProfilerEvent(IntPtr pchMessage); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _EmitVrProfilerEvent EmitVrProfilerEvent; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRDebugError _BeginVrProfilerEvent(ref ulong pHandleOut); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _BeginVrProfilerEvent BeginVrProfilerEvent; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EVRDebugError _FinishVrProfilerEvent(ulong hHandle, IntPtr pchMessage); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _FinishVrProfilerEvent FinishVrProfilerEvent; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate uint _DriverDebugRequest(uint unDeviceIndex, IntPtr pchRequest, System.Text.StringBuilder pchResponseBuffer, uint unResponseBufferSize); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _DriverDebugRequest DriverDebugRequest; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRIPCResourceManagerClient - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _NewSharedVulkanImage(uint nImageFormat, uint nWidth, uint nHeight, [MarshalAs(UnmanagedType.I1)] bool bRenderable, [MarshalAs(UnmanagedType.I1)] bool bMappable, [MarshalAs(UnmanagedType.I1)] bool bComputeAccess, uint unMipLevels, uint unArrayLayerCount, ref ulong pSharedHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _NewSharedVulkanImage NewSharedVulkanImage; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _NewSharedVulkanBuffer(uint nSize, uint nUsageFlags, ref ulong pSharedHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _NewSharedVulkanBuffer NewSharedVulkanBuffer; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _NewSharedVulkanSemaphore(ref ulong pSharedHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _NewSharedVulkanSemaphore NewSharedVulkanSemaphore; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _RefResource(ulong hSharedHandle, ref ulong pNewIpcHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _RefResource RefResource; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _UnrefResource(ulong hSharedHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _UnrefResource UnrefResource; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetDmabufFormats(ref uint pOutFormatCount, ref uint pOutFormats); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDmabufFormats GetDmabufFormats; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _GetDmabufModifiers(EVRApplicationType eApplicationType, uint unDRMFormat, ref uint pOutModifierCount, ref ulong pOutModifiers); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetDmabufModifiers GetDmabufModifiers; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _ImportDmabuf(EVRApplicationType eApplicationType, ref DmabufAttributes_t pDmabufAttributes, ref ulong pSharedHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ImportDmabuf ImportDmabuf; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [return: MarshalAs(UnmanagedType.I1)] - internal delegate bool _ReceiveSharedFd(ulong ulIpcHandle, ref int pOutFd); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReceiveSharedFd ReceiveSharedFd; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate void _DestructIVRIPCResourceManagerClient(); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _DestructIVRIPCResourceManagerClient DestructIVRIPCResourceManagerClient; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRProperties - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ETrackedPropertyError _ReadPropertyBatch(ulong ulContainerHandle, ref PropertyRead_t pBatch, uint unBatchEntryCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReadPropertyBatch ReadPropertyBatch; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ETrackedPropertyError _WritePropertyBatch(ulong ulContainerHandle, ref PropertyWrite_t pBatch, uint unBatchEntryCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _WritePropertyBatch WritePropertyBatch; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate IntPtr _GetPropErrorNameFromEnum(ETrackedPropertyError error); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _GetPropErrorNameFromEnum GetPropErrorNameFromEnum; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ulong _TrackedDeviceToPropertyContainer(uint nDevice); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _TrackedDeviceToPropertyContainer TrackedDeviceToPropertyContainer; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRPaths - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ETrackedPropertyError _ReadPathBatch(ulong ulRootHandle, ref PathRead_t pBatch, uint unBatchEntryCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReadPathBatch ReadPathBatch; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ETrackedPropertyError _WritePathBatch(ulong ulRootHandle, ref PathWrite_t pBatch, uint unBatchEntryCount); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _WritePathBatch WritePathBatch; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ETrackedPropertyError _StringToHandle(ref ulong pHandle, IntPtr pchPath); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _StringToHandle StringToHandle; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate ETrackedPropertyError _HandleToString(ulong pHandle, string pchBuffer, uint unBufferSize, ref uint punBufferSizeUsed); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _HandleToString HandleToString; - - } - - [StructLayout(LayoutKind.Sequential)] - public struct IVRBlockQueue - { - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EBlockQueueError _Create(ref ulong pulQueueHandle, IntPtr pchPath, uint unBlockDataSize, uint unBlockHeaderSize, uint unBlockCount, uint unFlags); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _Create Create; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EBlockQueueError _Connect(ref ulong pulQueueHandle, IntPtr pchPath); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _Connect Connect; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EBlockQueueError _Destroy(ulong ulQueueHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _Destroy Destroy; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EBlockQueueError _AcquireWriteOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _AcquireWriteOnlyBlock AcquireWriteOnlyBlock; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EBlockQueueError _ReleaseWriteOnlyBlock(ulong ulQueueHandle, ulong ulBlockHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReleaseWriteOnlyBlock ReleaseWriteOnlyBlock; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EBlockQueueError _WaitAndAcquireReadOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer, EBlockQueueReadType eReadType, uint unTimeoutMs); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _WaitAndAcquireReadOnlyBlock WaitAndAcquireReadOnlyBlock; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EBlockQueueError _AcquireReadOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer, EBlockQueueReadType eReadType); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _AcquireReadOnlyBlock AcquireReadOnlyBlock; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EBlockQueueError _ReleaseReadOnlyBlock(ulong ulQueueHandle, ulong ulBlockHandle); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _ReleaseReadOnlyBlock ReleaseReadOnlyBlock; - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate EBlockQueueError _QueueHasReader(ulong ulQueueHandle, [MarshalAs(UnmanagedType.I1)] ref bool pbHasReaders); - [MarshalAs(UnmanagedType.FunctionPtr)] - internal _QueueHasReader QueueHasReader; - - } - - - public class Utils - { - public static IntPtr ToUtf8(string managedString) - { - if (managedString == null) - { - return IntPtr.Zero; - } - - int size = System.Text.Encoding.UTF8.GetByteCount(managedString) + 1; - if (buffer.Length < size) buffer = new byte[size]; - int written = System.Text.Encoding.UTF8.GetBytes(managedString, 0, managedString.Length, buffer, 0); - buffer[written] = 0x00; // null terminate - IntPtr nativeUtf8 = Marshal.AllocHGlobal(written + 1); - Marshal.Copy(buffer, 0, nativeUtf8, written + 1); - return nativeUtf8; - } - private static byte[] buffer = new byte[1024]; - } - - public class CVRSystem - { - IVRSystem FnTable; - internal CVRSystem(IntPtr pInterface) - { - FnTable = (IVRSystem)Marshal.PtrToStructure(pInterface, typeof(IVRSystem)); - } - public void GetRecommendedRenderTargetSize(ref uint pnWidth, ref uint pnHeight) - { - pnWidth = 0; - pnHeight = 0; - FnTable.GetRecommendedRenderTargetSize(ref pnWidth, ref pnHeight); - } - public HmdMatrix44_t GetProjectionMatrix(EVREye eEye, float fNearZ, float fFarZ) - { - HmdMatrix44_t result = FnTable.GetProjectionMatrix(eEye, fNearZ, fFarZ); - return result; - } - public void GetProjectionRaw(EVREye eEye, ref float pfLeft, ref float pfRight, ref float pfTop, ref float pfBottom) - { - pfLeft = 0; - pfRight = 0; - pfTop = 0; - pfBottom = 0; - FnTable.GetProjectionRaw(eEye, ref pfLeft, ref pfRight, ref pfTop, ref pfBottom); - } - public bool ComputeDistortion(EVREye eEye, float fU, float fV, ref DistortionCoordinates_t pDistortionCoordinates) - { - bool result = FnTable.ComputeDistortion(eEye, fU, fV, ref pDistortionCoordinates); - return result; - } - public HmdMatrix34_t GetEyeToHeadTransform(EVREye eEye) - { - HmdMatrix34_t result = FnTable.GetEyeToHeadTransform(eEye); - return result; - } - public bool GetTimeSinceLastVsync(ref float pfSecondsSinceLastVsync, ref ulong pulFrameCounter) - { - pfSecondsSinceLastVsync = 0; - pulFrameCounter = 0; - bool result = FnTable.GetTimeSinceLastVsync(ref pfSecondsSinceLastVsync, ref pulFrameCounter); - return result; - } - public int GetD3D9AdapterIndex() - { - int result = FnTable.GetD3D9AdapterIndex(); - return result; - } - public void GetDXGIOutputInfo(ref int pnAdapterIndex) - { - pnAdapterIndex = 0; - FnTable.GetDXGIOutputInfo(ref pnAdapterIndex); - } - public void GetOutputDevice(ref ulong pnDevice, ETextureType textureType, IntPtr pInstance) - { - pnDevice = 0; - FnTable.GetOutputDevice(ref pnDevice, textureType, pInstance); - } - public bool IsDisplayOnDesktop() - { - bool result = FnTable.IsDisplayOnDesktop(); - return result; - } - public bool SetDisplayVisibility(bool bIsVisibleOnDesktop) - { - bool result = FnTable.SetDisplayVisibility(bIsVisibleOnDesktop); - return result; - } - public void GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, TrackedDevicePose_t[] pTrackedDevicePoseArray) - { - FnTable.GetDeviceToAbsoluteTrackingPose(eOrigin, fPredictedSecondsToPhotonsFromNow, pTrackedDevicePoseArray, (uint)pTrackedDevicePoseArray.Length); - } - public HmdMatrix34_t GetSeatedZeroPoseToStandingAbsoluteTrackingPose() - { - HmdMatrix34_t result = FnTable.GetSeatedZeroPoseToStandingAbsoluteTrackingPose(); - return result; - } - public HmdMatrix34_t GetRawZeroPoseToStandingAbsoluteTrackingPose() - { - HmdMatrix34_t result = FnTable.GetRawZeroPoseToStandingAbsoluteTrackingPose(); - return result; - } - public uint GetSortedTrackedDeviceIndicesOfClass(ETrackedDeviceClass eTrackedDeviceClass, uint[] punTrackedDeviceIndexArray, uint unRelativeToTrackedDeviceIndex) - { - uint result = FnTable.GetSortedTrackedDeviceIndicesOfClass(eTrackedDeviceClass, punTrackedDeviceIndexArray, (uint)punTrackedDeviceIndexArray.Length, unRelativeToTrackedDeviceIndex); - return result; - } - public EDeviceActivityLevel GetTrackedDeviceActivityLevel(uint unDeviceId) - { - EDeviceActivityLevel result = FnTable.GetTrackedDeviceActivityLevel(unDeviceId); - return result; - } - public void ApplyTransform(ref TrackedDevicePose_t pOutputPose, ref TrackedDevicePose_t pTrackedDevicePose, ref HmdMatrix34_t pTransform) - { - FnTable.ApplyTransform(ref pOutputPose, ref pTrackedDevicePose, ref pTransform); - } - public uint GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole unDeviceType) - { - uint result = FnTable.GetTrackedDeviceIndexForControllerRole(unDeviceType); - return result; - } - public ETrackedControllerRole GetControllerRoleForTrackedDeviceIndex(uint unDeviceIndex) - { - ETrackedControllerRole result = FnTable.GetControllerRoleForTrackedDeviceIndex(unDeviceIndex); - return result; - } - public ETrackedDeviceClass GetTrackedDeviceClass(uint unDeviceIndex) - { - ETrackedDeviceClass result = FnTable.GetTrackedDeviceClass(unDeviceIndex); - return result; - } - public bool IsTrackedDeviceConnected(uint unDeviceIndex) - { - bool result = FnTable.IsTrackedDeviceConnected(unDeviceIndex); - return result; - } - public bool GetBoolTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError) - { - bool result = FnTable.GetBoolTrackedDeviceProperty(unDeviceIndex, prop, ref pError); - return result; - } - public float GetFloatTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError) - { - float result = FnTable.GetFloatTrackedDeviceProperty(unDeviceIndex, prop, ref pError); - return result; - } - public int GetInt32TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError) - { - int result = FnTable.GetInt32TrackedDeviceProperty(unDeviceIndex, prop, ref pError); - return result; - } - public ulong GetUint64TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError) - { - ulong result = FnTable.GetUint64TrackedDeviceProperty(unDeviceIndex, prop, ref pError); - return result; - } - public HmdMatrix34_t GetMatrix34TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError) - { - HmdMatrix34_t result = FnTable.GetMatrix34TrackedDeviceProperty(unDeviceIndex, prop, ref pError); - return result; - } - public uint GetArrayTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, uint propType, IntPtr pBuffer, uint unBufferSize, ref ETrackedPropertyError pError) - { - uint result = FnTable.GetArrayTrackedDeviceProperty(unDeviceIndex, prop, propType, pBuffer, unBufferSize, ref pError); - return result; - } - public uint GetStringTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, System.Text.StringBuilder pchValue, uint unBufferSize, ref ETrackedPropertyError pError) - { - uint result = FnTable.GetStringTrackedDeviceProperty(unDeviceIndex, prop, pchValue, unBufferSize, ref pError); - return result; - } - public string GetPropErrorNameFromEnum(ETrackedPropertyError error) - { - IntPtr result = FnTable.GetPropErrorNameFromEnum(error); - return Marshal.PtrToStringAnsi(result); - } - // This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were - // originally mis-compiled with the wrong packing for Linux and OSX. - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate bool _PollNextEventPacked(ref VREvent_t_Packed pEvent, uint uncbVREvent); - [StructLayout(LayoutKind.Explicit)] - struct PollNextEventUnion - { - [FieldOffset(0)] - public IVRSystem._PollNextEvent pPollNextEvent; - [FieldOffset(0)] - public _PollNextEventPacked pPollNextEventPacked; - } - public bool PollNextEvent(ref VREvent_t pEvent, uint uncbVREvent) - { -#if !UNITY_METRO - if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || - (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) - { - PollNextEventUnion u; - VREvent_t_Packed event_packed = new VREvent_t_Packed(); - u.pPollNextEventPacked = null; - u.pPollNextEvent = FnTable.PollNextEvent; - bool packed_result = u.pPollNextEventPacked(ref event_packed, (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t_Packed))); - - event_packed.Unpack(ref pEvent); - return packed_result; - } -#endif - bool result = FnTable.PollNextEvent(ref pEvent, uncbVREvent); - return result; - } - public bool PollNextEventWithPose(ETrackingUniverseOrigin eOrigin, ref VREvent_t pEvent, uint uncbVREvent, ref TrackedDevicePose_t pTrackedDevicePose) - { - bool result = FnTable.PollNextEventWithPose(eOrigin, ref pEvent, uncbVREvent, ref pTrackedDevicePose); - return result; - } - public string GetEventTypeNameFromEnum(EVREventType eType) - { - IntPtr result = FnTable.GetEventTypeNameFromEnum(eType); - return Marshal.PtrToStringAnsi(result); - } - public HiddenAreaMesh_t GetHiddenAreaMesh(EVREye eEye, EHiddenAreaMeshType type) - { - HiddenAreaMesh_t result = FnTable.GetHiddenAreaMesh(eEye, type); - return result; - } - // This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were - // originally mis-compiled with the wrong packing for Linux and OSX. - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate bool _GetControllerStatePacked(uint unControllerDeviceIndex, ref VRControllerState_t_Packed pControllerState, uint unControllerStateSize); - [StructLayout(LayoutKind.Explicit)] - struct GetControllerStateUnion - { - [FieldOffset(0)] - public IVRSystem._GetControllerState pGetControllerState; - [FieldOffset(0)] - public _GetControllerStatePacked pGetControllerStatePacked; - } - public bool GetControllerState(uint unControllerDeviceIndex, ref VRControllerState_t pControllerState, uint unControllerStateSize) - { -#if !UNITY_METRO - if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || - (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) - { - GetControllerStateUnion u; - VRControllerState_t_Packed state_packed = new VRControllerState_t_Packed(pControllerState); - u.pGetControllerStatePacked = null; - u.pGetControllerState = FnTable.GetControllerState; - bool packed_result = u.pGetControllerStatePacked(unControllerDeviceIndex, ref state_packed, (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VRControllerState_t_Packed))); - - state_packed.Unpack(ref pControllerState); - return packed_result; - } -#endif - bool result = FnTable.GetControllerState(unControllerDeviceIndex, ref pControllerState, unControllerStateSize); - return result; - } - // This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were - // originally mis-compiled with the wrong packing for Linux and OSX. - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate bool _GetControllerStateWithPosePacked(ETrackingUniverseOrigin eOrigin, uint unControllerDeviceIndex, ref VRControllerState_t_Packed pControllerState, uint unControllerStateSize, ref TrackedDevicePose_t pTrackedDevicePose); - [StructLayout(LayoutKind.Explicit)] - struct GetControllerStateWithPoseUnion - { - [FieldOffset(0)] - public IVRSystem._GetControllerStateWithPose pGetControllerStateWithPose; - [FieldOffset(0)] - public _GetControllerStateWithPosePacked pGetControllerStateWithPosePacked; - } - public bool GetControllerStateWithPose(ETrackingUniverseOrigin eOrigin, uint unControllerDeviceIndex, ref VRControllerState_t pControllerState, uint unControllerStateSize, ref TrackedDevicePose_t pTrackedDevicePose) - { -#if !UNITY_METRO - if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || - (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) - { - GetControllerStateWithPoseUnion u; - VRControllerState_t_Packed state_packed = new VRControllerState_t_Packed(pControllerState); - u.pGetControllerStateWithPosePacked = null; - u.pGetControllerStateWithPose = FnTable.GetControllerStateWithPose; - bool packed_result = u.pGetControllerStateWithPosePacked(eOrigin, unControllerDeviceIndex, ref state_packed, (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VRControllerState_t_Packed)), ref pTrackedDevicePose); - - state_packed.Unpack(ref pControllerState); - return packed_result; - } -#endif - bool result = FnTable.GetControllerStateWithPose(eOrigin, unControllerDeviceIndex, ref pControllerState, unControllerStateSize, ref pTrackedDevicePose); - return result; - } - public void TriggerHapticPulse(uint unControllerDeviceIndex, uint unAxisId, ushort usDurationMicroSec) - { - FnTable.TriggerHapticPulse(unControllerDeviceIndex, unAxisId, usDurationMicroSec); - } - public string GetButtonIdNameFromEnum(EVRButtonId eButtonId) - { - IntPtr result = FnTable.GetButtonIdNameFromEnum(eButtonId); - return Marshal.PtrToStringAnsi(result); - } - public string GetControllerAxisTypeNameFromEnum(EVRControllerAxisType eAxisType) - { - IntPtr result = FnTable.GetControllerAxisTypeNameFromEnum(eAxisType); - return Marshal.PtrToStringAnsi(result); - } - public bool IsInputAvailable() - { - bool result = FnTable.IsInputAvailable(); - return result; - } - public bool IsSteamVRDrawingControllers() - { - bool result = FnTable.IsSteamVRDrawingControllers(); - return result; - } - public bool ShouldApplicationPause() - { - bool result = FnTable.ShouldApplicationPause(); - return result; - } - public bool ShouldApplicationReduceRenderingWork() - { - bool result = FnTable.ShouldApplicationReduceRenderingWork(); - return result; - } - public EVRFirmwareError PerformFirmwareUpdate(uint unDeviceIndex) - { - EVRFirmwareError result = FnTable.PerformFirmwareUpdate(unDeviceIndex); - return result; - } - public void AcknowledgeQuit_Exiting() - { - FnTable.AcknowledgeQuit_Exiting(); - } - public uint GetAppContainerFilePaths(System.Text.StringBuilder pchBuffer, uint unBufferSize) - { - uint result = FnTable.GetAppContainerFilePaths(pchBuffer, unBufferSize); - return result; - } - public string GetRuntimeVersion() - { - IntPtr result = FnTable.GetRuntimeVersion(); - return Marshal.PtrToStringAnsi(result); - } - } - - - public class CVRExtendedDisplay - { - IVRExtendedDisplay FnTable; - internal CVRExtendedDisplay(IntPtr pInterface) - { - FnTable = (IVRExtendedDisplay)Marshal.PtrToStructure(pInterface, typeof(IVRExtendedDisplay)); - } - public void GetWindowBounds(ref int pnX, ref int pnY, ref uint pnWidth, ref uint pnHeight) - { - pnX = 0; - pnY = 0; - pnWidth = 0; - pnHeight = 0; - FnTable.GetWindowBounds(ref pnX, ref pnY, ref pnWidth, ref pnHeight); - } - public void GetEyeOutputViewport(EVREye eEye, ref uint pnX, ref uint pnY, ref uint pnWidth, ref uint pnHeight) - { - pnX = 0; - pnY = 0; - pnWidth = 0; - pnHeight = 0; - FnTable.GetEyeOutputViewport(eEye, ref pnX, ref pnY, ref pnWidth, ref pnHeight); - } - public void GetDXGIOutputInfo(ref int pnAdapterIndex, ref int pnAdapterOutputIndex) - { - pnAdapterIndex = 0; - pnAdapterOutputIndex = 0; - FnTable.GetDXGIOutputInfo(ref pnAdapterIndex, ref pnAdapterOutputIndex); - } - } - - - public class CVRTrackedCamera - { - IVRTrackedCamera FnTable; - internal CVRTrackedCamera(IntPtr pInterface) - { - FnTable = (IVRTrackedCamera)Marshal.PtrToStructure(pInterface, typeof(IVRTrackedCamera)); - } - public string GetCameraErrorNameFromEnum(EVRTrackedCameraError eCameraError) - { - IntPtr result = FnTable.GetCameraErrorNameFromEnum(eCameraError); - return Marshal.PtrToStringAnsi(result); - } - public EVRTrackedCameraError HasCamera(uint nDeviceIndex, ref bool pHasCamera) - { - pHasCamera = false; - EVRTrackedCameraError result = FnTable.HasCamera(nDeviceIndex, ref pHasCamera); - return result; - } - public EVRTrackedCameraError GetCameraFrameSize(uint nDeviceIndex, EVRTrackedCameraFrameType eFrameType, ref uint pnWidth, ref uint pnHeight, ref uint pnFrameBufferSize) - { - pnWidth = 0; - pnHeight = 0; - pnFrameBufferSize = 0; - EVRTrackedCameraError result = FnTable.GetCameraFrameSize(nDeviceIndex, eFrameType, ref pnWidth, ref pnHeight, ref pnFrameBufferSize); - return result; - } - public EVRTrackedCameraError GetCameraIntrinsics(uint nDeviceIndex, uint nCameraIndex, EVRTrackedCameraFrameType eFrameType, ref HmdVector2_t pFocalLength, ref HmdVector2_t pCenter) - { - EVRTrackedCameraError result = FnTable.GetCameraIntrinsics(nDeviceIndex, nCameraIndex, eFrameType, ref pFocalLength, ref pCenter); - return result; - } - public EVRTrackedCameraError GetCameraProjection(uint nDeviceIndex, uint nCameraIndex, EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, ref HmdMatrix44_t pProjection) - { - EVRTrackedCameraError result = FnTable.GetCameraProjection(nDeviceIndex, nCameraIndex, eFrameType, flZNear, flZFar, ref pProjection); - return result; - } - public EVRTrackedCameraError AcquireVideoStreamingService(uint nDeviceIndex, ref ulong pHandle) - { - pHandle = 0; - EVRTrackedCameraError result = FnTable.AcquireVideoStreamingService(nDeviceIndex, ref pHandle); - return result; - } - public EVRTrackedCameraError ReleaseVideoStreamingService(ulong hTrackedCamera) - { - EVRTrackedCameraError result = FnTable.ReleaseVideoStreamingService(hTrackedCamera); - return result; - } - public EVRTrackedCameraError GetVideoStreamFrameBuffer(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, IntPtr pFrameBuffer, uint nFrameBufferSize, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize) - { - EVRTrackedCameraError result = FnTable.GetVideoStreamFrameBuffer(hTrackedCamera, eFrameType, pFrameBuffer, nFrameBufferSize, ref pFrameHeader, nFrameHeaderSize); - return result; - } - public EVRTrackedCameraError GetVideoStreamTextureSize(uint nDeviceIndex, EVRTrackedCameraFrameType eFrameType, ref VRTextureBounds_t pTextureBounds, ref uint pnWidth, ref uint pnHeight) - { - pnWidth = 0; - pnHeight = 0; - EVRTrackedCameraError result = FnTable.GetVideoStreamTextureSize(nDeviceIndex, eFrameType, ref pTextureBounds, ref pnWidth, ref pnHeight); - return result; - } - public EVRTrackedCameraError GetVideoStreamTextureD3D11(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, IntPtr pD3D11DeviceOrResource, ref IntPtr ppD3D11ShaderResourceView, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize) - { - EVRTrackedCameraError result = FnTable.GetVideoStreamTextureD3D11(hTrackedCamera, eFrameType, pD3D11DeviceOrResource, ref ppD3D11ShaderResourceView, ref pFrameHeader, nFrameHeaderSize); - return result; - } - public EVRTrackedCameraError GetVideoStreamTextureGL(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, ref uint pglTextureId, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize) - { - pglTextureId = 0; - EVRTrackedCameraError result = FnTable.GetVideoStreamTextureGL(hTrackedCamera, eFrameType, ref pglTextureId, ref pFrameHeader, nFrameHeaderSize); - return result; - } - public EVRTrackedCameraError ReleaseVideoStreamTextureGL(ulong hTrackedCamera, uint glTextureId) - { - EVRTrackedCameraError result = FnTable.ReleaseVideoStreamTextureGL(hTrackedCamera, glTextureId); - return result; - } - public void SetCameraTrackingSpace(ETrackingUniverseOrigin eUniverse) - { - FnTable.SetCameraTrackingSpace(eUniverse); - } - public ETrackingUniverseOrigin GetCameraTrackingSpace() - { - ETrackingUniverseOrigin result = FnTable.GetCameraTrackingSpace(); - return result; - } - } - - - public class CVRApplications - { - IVRApplications FnTable; - internal CVRApplications(IntPtr pInterface) - { - FnTable = (IVRApplications)Marshal.PtrToStructure(pInterface, typeof(IVRApplications)); - } - public EVRApplicationError AddApplicationManifest(string pchApplicationManifestFullPath, bool bTemporary) - { - IntPtr pchApplicationManifestFullPathUtf8 = Utils.ToUtf8(pchApplicationManifestFullPath); - EVRApplicationError result = FnTable.AddApplicationManifest(pchApplicationManifestFullPathUtf8, bTemporary); - Marshal.FreeHGlobal(pchApplicationManifestFullPathUtf8); - return result; - } - public EVRApplicationError RemoveApplicationManifest(string pchApplicationManifestFullPath) - { - IntPtr pchApplicationManifestFullPathUtf8 = Utils.ToUtf8(pchApplicationManifestFullPath); - EVRApplicationError result = FnTable.RemoveApplicationManifest(pchApplicationManifestFullPathUtf8); - Marshal.FreeHGlobal(pchApplicationManifestFullPathUtf8); - return result; - } - public bool IsApplicationInstalled(string pchAppKey) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - bool result = FnTable.IsApplicationInstalled(pchAppKeyUtf8); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public uint GetApplicationCount() - { - uint result = FnTable.GetApplicationCount(); - return result; - } - public EVRApplicationError GetApplicationKeyByIndex(uint unApplicationIndex, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen) - { - EVRApplicationError result = FnTable.GetApplicationKeyByIndex(unApplicationIndex, pchAppKeyBuffer, unAppKeyBufferLen); - return result; - } - public EVRApplicationError GetApplicationKeyByProcessId(uint unProcessId, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen) - { - EVRApplicationError result = FnTable.GetApplicationKeyByProcessId(unProcessId, pchAppKeyBuffer, unAppKeyBufferLen); - return result; - } - public EVRApplicationError LaunchApplication(string pchAppKey) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - EVRApplicationError result = FnTable.LaunchApplication(pchAppKeyUtf8); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public EVRApplicationError LaunchTemplateApplication(string pchTemplateAppKey, string pchNewAppKey, AppOverrideKeys_t[] pKeys) - { - IntPtr pchTemplateAppKeyUtf8 = Utils.ToUtf8(pchTemplateAppKey); - IntPtr pchNewAppKeyUtf8 = Utils.ToUtf8(pchNewAppKey); - EVRApplicationError result = FnTable.LaunchTemplateApplication(pchTemplateAppKeyUtf8, pchNewAppKeyUtf8, pKeys, (uint)pKeys.Length); - Marshal.FreeHGlobal(pchTemplateAppKeyUtf8); - Marshal.FreeHGlobal(pchNewAppKeyUtf8); - return result; - } - public EVRApplicationError LaunchApplicationFromMimeType(string pchMimeType, string pchArgs) - { - IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); - IntPtr pchArgsUtf8 = Utils.ToUtf8(pchArgs); - EVRApplicationError result = FnTable.LaunchApplicationFromMimeType(pchMimeTypeUtf8, pchArgsUtf8); - Marshal.FreeHGlobal(pchMimeTypeUtf8); - Marshal.FreeHGlobal(pchArgsUtf8); - return result; - } - public EVRApplicationError LaunchDashboardOverlay(string pchAppKey) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - EVRApplicationError result = FnTable.LaunchDashboardOverlay(pchAppKeyUtf8); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public bool CancelApplicationLaunch(string pchAppKey) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - bool result = FnTable.CancelApplicationLaunch(pchAppKeyUtf8); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public EVRApplicationError IdentifyApplication(uint unProcessId, string pchAppKey) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - EVRApplicationError result = FnTable.IdentifyApplication(unProcessId, pchAppKeyUtf8); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public uint GetApplicationProcessId(string pchAppKey) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - uint result = FnTable.GetApplicationProcessId(pchAppKeyUtf8); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public string GetApplicationsErrorNameFromEnum(EVRApplicationError error) - { - IntPtr result = FnTable.GetApplicationsErrorNameFromEnum(error); - return Marshal.PtrToStringAnsi(result); - } - public uint GetApplicationPropertyString(string pchAppKey, EVRApplicationProperty eProperty, System.Text.StringBuilder pchPropertyValueBuffer, uint unPropertyValueBufferLen, ref EVRApplicationError peError) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - uint result = FnTable.GetApplicationPropertyString(pchAppKeyUtf8, eProperty, pchPropertyValueBuffer, unPropertyValueBufferLen, ref peError); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public bool GetApplicationPropertyBool(string pchAppKey, EVRApplicationProperty eProperty, ref EVRApplicationError peError) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - bool result = FnTable.GetApplicationPropertyBool(pchAppKeyUtf8, eProperty, ref peError); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public ulong GetApplicationPropertyUint64(string pchAppKey, EVRApplicationProperty eProperty, ref EVRApplicationError peError) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - ulong result = FnTable.GetApplicationPropertyUint64(pchAppKeyUtf8, eProperty, ref peError); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public EVRApplicationError SetApplicationAutoLaunch(string pchAppKey, bool bAutoLaunch) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - EVRApplicationError result = FnTable.SetApplicationAutoLaunch(pchAppKeyUtf8, bAutoLaunch); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public bool GetApplicationAutoLaunch(string pchAppKey) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - bool result = FnTable.GetApplicationAutoLaunch(pchAppKeyUtf8); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public EVRApplicationError SetDefaultApplicationForMimeType(string pchAppKey, string pchMimeType) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); - EVRApplicationError result = FnTable.SetDefaultApplicationForMimeType(pchAppKeyUtf8, pchMimeTypeUtf8); - Marshal.FreeHGlobal(pchAppKeyUtf8); - Marshal.FreeHGlobal(pchMimeTypeUtf8); - return result; - } - public bool GetDefaultApplicationForMimeType(string pchMimeType, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen) - { - IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); - bool result = FnTable.GetDefaultApplicationForMimeType(pchMimeTypeUtf8, pchAppKeyBuffer, unAppKeyBufferLen); - Marshal.FreeHGlobal(pchMimeTypeUtf8); - return result; - } - public bool GetApplicationSupportedMimeTypes(string pchAppKey, System.Text.StringBuilder pchMimeTypesBuffer, uint unMimeTypesBuffer) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - bool result = FnTable.GetApplicationSupportedMimeTypes(pchAppKeyUtf8, pchMimeTypesBuffer, unMimeTypesBuffer); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public uint GetApplicationsThatSupportMimeType(string pchMimeType, System.Text.StringBuilder pchAppKeysThatSupportBuffer, uint unAppKeysThatSupportBuffer) - { - IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); - uint result = FnTable.GetApplicationsThatSupportMimeType(pchMimeTypeUtf8, pchAppKeysThatSupportBuffer, unAppKeysThatSupportBuffer); - Marshal.FreeHGlobal(pchMimeTypeUtf8); - return result; - } - public uint GetApplicationLaunchArguments(uint unHandle, System.Text.StringBuilder pchArgs, uint unArgs) - { - uint result = FnTable.GetApplicationLaunchArguments(unHandle, pchArgs, unArgs); - return result; - } - public EVRApplicationError GetStartingApplication(System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen) - { - EVRApplicationError result = FnTable.GetStartingApplication(pchAppKeyBuffer, unAppKeyBufferLen); - return result; - } - public EVRSceneApplicationState GetSceneApplicationState() - { - EVRSceneApplicationState result = FnTable.GetSceneApplicationState(); - return result; - } - public EVRApplicationError PerformApplicationPrelaunchCheck(string pchAppKey) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - EVRApplicationError result = FnTable.PerformApplicationPrelaunchCheck(pchAppKeyUtf8); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public string GetSceneApplicationStateNameFromEnum(EVRSceneApplicationState state) - { - IntPtr result = FnTable.GetSceneApplicationStateNameFromEnum(state); - return Marshal.PtrToStringAnsi(result); - } - public EVRApplicationError LaunchInternalProcess(string pchBinaryPath, string pchArguments, string pchWorkingDirectory) - { - IntPtr pchBinaryPathUtf8 = Utils.ToUtf8(pchBinaryPath); - IntPtr pchArgumentsUtf8 = Utils.ToUtf8(pchArguments); - IntPtr pchWorkingDirectoryUtf8 = Utils.ToUtf8(pchWorkingDirectory); - EVRApplicationError result = FnTable.LaunchInternalProcess(pchBinaryPathUtf8, pchArgumentsUtf8, pchWorkingDirectoryUtf8); - Marshal.FreeHGlobal(pchBinaryPathUtf8); - Marshal.FreeHGlobal(pchArgumentsUtf8); - Marshal.FreeHGlobal(pchWorkingDirectoryUtf8); - return result; - } - public uint GetCurrentSceneProcessId() - { - uint result = FnTable.GetCurrentSceneProcessId(); - return result; - } - } - - - public class CVRChaperone - { - IVRChaperone FnTable; - internal CVRChaperone(IntPtr pInterface) - { - FnTable = (IVRChaperone)Marshal.PtrToStructure(pInterface, typeof(IVRChaperone)); - } - public ChaperoneCalibrationState GetCalibrationState() - { - ChaperoneCalibrationState result = FnTable.GetCalibrationState(); - return result; - } - public bool GetPlayAreaSize(ref float pSizeX, ref float pSizeZ) - { - pSizeX = 0; - pSizeZ = 0; - bool result = FnTable.GetPlayAreaSize(ref pSizeX, ref pSizeZ); - return result; - } - public bool GetPlayAreaRect(ref HmdQuad_t rect) - { - bool result = FnTable.GetPlayAreaRect(ref rect); - return result; - } - public void ReloadInfo() - { - FnTable.ReloadInfo(); - } - public void SetSceneColor(HmdColor_t color) - { - FnTable.SetSceneColor(color); - } - public void GetBoundsColor(ref HmdColor_t pOutputColorArray, int nNumOutputColors, float flCollisionBoundsFadeDistance, ref HmdColor_t pOutputCameraColor) - { - FnTable.GetBoundsColor(ref pOutputColorArray, nNumOutputColors, flCollisionBoundsFadeDistance, ref pOutputCameraColor); - } - public bool AreBoundsVisible() - { - bool result = FnTable.AreBoundsVisible(); - return result; - } - public void ForceBoundsVisible(bool bForce) - { - FnTable.ForceBoundsVisible(bForce); - } - public void ResetZeroPose(ETrackingUniverseOrigin eTrackingUniverseOrigin) - { - FnTable.ResetZeroPose(eTrackingUniverseOrigin); - } - } - - - public class CVRChaperoneSetup - { - IVRChaperoneSetup FnTable; - internal CVRChaperoneSetup(IntPtr pInterface) - { - FnTable = (IVRChaperoneSetup)Marshal.PtrToStructure(pInterface, typeof(IVRChaperoneSetup)); - } - public bool CommitWorkingCopy(EChaperoneConfigFile configFile) - { - bool result = FnTable.CommitWorkingCopy(configFile); - return result; - } - public void RevertWorkingCopy() - { - FnTable.RevertWorkingCopy(); - } - public bool GetWorkingPlayAreaSize(ref float pSizeX, ref float pSizeZ) - { - pSizeX = 0; - pSizeZ = 0; - bool result = FnTable.GetWorkingPlayAreaSize(ref pSizeX, ref pSizeZ); - return result; - } - public bool GetWorkingPlayAreaRect(ref HmdQuad_t rect) - { - bool result = FnTable.GetWorkingPlayAreaRect(ref rect); - return result; - } - public bool GetWorkingCollisionBoundsInfo(out HmdQuad_t[] pQuadsBuffer) - { - uint punQuadsCount = 0; - bool result = FnTable.GetWorkingCollisionBoundsInfo(null, ref punQuadsCount); - pQuadsBuffer = new HmdQuad_t[punQuadsCount]; - result = FnTable.GetWorkingCollisionBoundsInfo(pQuadsBuffer, ref punQuadsCount); - return result; - } - public bool GetLiveCollisionBoundsInfo(out HmdQuad_t[] pQuadsBuffer) - { - uint punQuadsCount = 0; - bool result = FnTable.GetLiveCollisionBoundsInfo(null, ref punQuadsCount); - pQuadsBuffer = new HmdQuad_t[punQuadsCount]; - result = FnTable.GetLiveCollisionBoundsInfo(pQuadsBuffer, ref punQuadsCount); - return result; - } - public bool GetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose) - { - bool result = FnTable.GetWorkingSeatedZeroPoseToRawTrackingPose(ref pmatSeatedZeroPoseToRawTrackingPose); - return result; - } - public bool GetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatStandingZeroPoseToRawTrackingPose) - { - bool result = FnTable.GetWorkingStandingZeroPoseToRawTrackingPose(ref pmatStandingZeroPoseToRawTrackingPose); - return result; - } - public void SetWorkingPlayAreaSize(float sizeX, float sizeZ) - { - FnTable.SetWorkingPlayAreaSize(sizeX, sizeZ); - } - public void SetWorkingCollisionBoundsInfo(HmdQuad_t[] pQuadsBuffer) - { - FnTable.SetWorkingCollisionBoundsInfo(pQuadsBuffer, (uint)pQuadsBuffer.Length); - } - public void SetWorkingPerimeter(HmdVector2_t[] pPointBuffer) - { - FnTable.SetWorkingPerimeter(pPointBuffer, (uint)pPointBuffer.Length); - } - public void SetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatSeatedZeroPoseToRawTrackingPose) - { - FnTable.SetWorkingSeatedZeroPoseToRawTrackingPose(ref pMatSeatedZeroPoseToRawTrackingPose); - } - public void SetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatStandingZeroPoseToRawTrackingPose) - { - FnTable.SetWorkingStandingZeroPoseToRawTrackingPose(ref pMatStandingZeroPoseToRawTrackingPose); - } - public void ReloadFromDisk(EChaperoneConfigFile configFile) - { - FnTable.ReloadFromDisk(configFile); - } - public bool GetLiveSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose) - { - bool result = FnTable.GetLiveSeatedZeroPoseToRawTrackingPose(ref pmatSeatedZeroPoseToRawTrackingPose); - return result; - } - public bool ExportLiveToBuffer(System.Text.StringBuilder pBuffer, ref uint pnBufferLength) - { - pnBufferLength = 0; - bool result = FnTable.ExportLiveToBuffer(pBuffer, ref pnBufferLength); - return result; - } - public bool ImportFromBufferToWorking(string pBuffer, uint nImportFlags) - { - IntPtr pBufferUtf8 = Utils.ToUtf8(pBuffer); - bool result = FnTable.ImportFromBufferToWorking(pBufferUtf8, nImportFlags); - Marshal.FreeHGlobal(pBufferUtf8); - return result; - } - public void ShowWorkingSetPreview() - { - FnTable.ShowWorkingSetPreview(); - } - public void HideWorkingSetPreview() - { - FnTable.HideWorkingSetPreview(); - } - public void RoomSetupStarting() - { - FnTable.RoomSetupStarting(); - } - } - - - public class CVRCompositor - { - IVRCompositor FnTable; - internal CVRCompositor(IntPtr pInterface) - { - FnTable = (IVRCompositor)Marshal.PtrToStructure(pInterface, typeof(IVRCompositor)); - } - public void SetTrackingSpace(ETrackingUniverseOrigin eOrigin) - { - FnTable.SetTrackingSpace(eOrigin); - } - public ETrackingUniverseOrigin GetTrackingSpace() - { - ETrackingUniverseOrigin result = FnTable.GetTrackingSpace(); - return result; - } - public EVRCompositorError WaitGetPoses(TrackedDevicePose_t[] pRenderPoseArray, TrackedDevicePose_t[] pGamePoseArray) - { - EVRCompositorError result = FnTable.WaitGetPoses(pRenderPoseArray, (uint)pRenderPoseArray.Length, pGamePoseArray, (uint)pGamePoseArray.Length); - return result; - } - public EVRCompositorError GetLastPoses(TrackedDevicePose_t[] pRenderPoseArray, TrackedDevicePose_t[] pGamePoseArray) - { - EVRCompositorError result = FnTable.GetLastPoses(pRenderPoseArray, (uint)pRenderPoseArray.Length, pGamePoseArray, (uint)pGamePoseArray.Length); - return result; - } - public EVRCompositorError GetLastPoseForTrackedDeviceIndex(uint unDeviceIndex, ref TrackedDevicePose_t pOutputPose, ref TrackedDevicePose_t pOutputGamePose) - { - EVRCompositorError result = FnTable.GetLastPoseForTrackedDeviceIndex(unDeviceIndex, ref pOutputPose, ref pOutputGamePose); - return result; - } - public EVRCompositorError Submit(EVREye eEye, ref Texture_t pTexture, ref VRTextureBounds_t pBounds, EVRSubmitFlags nSubmitFlags) - { - EVRCompositorError result = FnTable.Submit(eEye, ref pTexture, ref pBounds, nSubmitFlags); - return result; - } - public EVRCompositorError SubmitWithArrayIndex(EVREye eEye, ref Texture_t pTexture, uint unTextureArrayIndex, ref VRTextureBounds_t pBounds, EVRSubmitFlags nSubmitFlags) - { - EVRCompositorError result = FnTable.SubmitWithArrayIndex(eEye, ref pTexture, unTextureArrayIndex, ref pBounds, nSubmitFlags); - return result; - } - public void ClearLastSubmittedFrame() - { - FnTable.ClearLastSubmittedFrame(); - } - public void PostPresentHandoff() - { - FnTable.PostPresentHandoff(); - } - public bool GetFrameTiming(ref Compositor_FrameTiming pTiming, uint unFramesAgo) - { - bool result = FnTable.GetFrameTiming(ref pTiming, unFramesAgo); - return result; - } - public uint GetFrameTimings(Compositor_FrameTiming[] pTiming) - { - uint result = FnTable.GetFrameTimings(pTiming, (uint)pTiming.Length); - return result; - } - public float GetFrameTimeRemaining() - { - float result = FnTable.GetFrameTimeRemaining(); - return result; - } - public void GetCumulativeStats(ref Compositor_CumulativeStats pStats, uint nStatsSizeInBytes) - { - FnTable.GetCumulativeStats(ref pStats, nStatsSizeInBytes); - } - public void FadeToColor(float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, bool bBackground) - { - FnTable.FadeToColor(fSeconds, fRed, fGreen, fBlue, fAlpha, bBackground); - } - public HmdColor_t GetCurrentFadeColor(bool bBackground) - { - HmdColor_t result = FnTable.GetCurrentFadeColor(bBackground); - return result; - } - public void FadeGrid(float fSeconds, bool bFadeGridIn) - { - FnTable.FadeGrid(fSeconds, bFadeGridIn); - } - public float GetCurrentGridAlpha() - { - float result = FnTable.GetCurrentGridAlpha(); - return result; - } - public EVRCompositorError SetSkyboxOverride(Texture_t[] pTextures) - { - EVRCompositorError result = FnTable.SetSkyboxOverride(pTextures, (uint)pTextures.Length); - return result; - } - public void ClearSkyboxOverride() - { - FnTable.ClearSkyboxOverride(); - } - public void CompositorBringToFront() - { - FnTable.CompositorBringToFront(); - } - public void CompositorGoToBack() - { - FnTable.CompositorGoToBack(); - } - public void CompositorQuit() - { - FnTable.CompositorQuit(); - } - public bool IsFullscreen() - { - bool result = FnTable.IsFullscreen(); - return result; - } - public uint GetCurrentSceneFocusProcess() - { - uint result = FnTable.GetCurrentSceneFocusProcess(); - return result; - } - public uint GetLastFrameRenderer() - { - uint result = FnTable.GetLastFrameRenderer(); - return result; - } - public bool CanRenderScene() - { - bool result = FnTable.CanRenderScene(); - return result; - } - public void ShowMirrorWindow() - { - FnTable.ShowMirrorWindow(); - } - public void HideMirrorWindow() - { - FnTable.HideMirrorWindow(); - } - public bool IsMirrorWindowVisible() - { - bool result = FnTable.IsMirrorWindowVisible(); - return result; - } - public void CompositorDumpImages() - { - FnTable.CompositorDumpImages(); - } - public bool ShouldAppRenderWithLowResources() - { - bool result = FnTable.ShouldAppRenderWithLowResources(); - return result; - } - public void ForceInterleavedReprojectionOn(bool bOverride) - { - FnTable.ForceInterleavedReprojectionOn(bOverride); - } - public void ForceReconnectProcess() - { - FnTable.ForceReconnectProcess(); - } - public void SuspendRendering(bool bSuspend) - { - FnTable.SuspendRendering(bSuspend); - } - public EVRCompositorError GetMirrorTextureD3D11(EVREye eEye, IntPtr pD3D11DeviceOrResource, ref IntPtr ppD3D11ShaderResourceView) - { - EVRCompositorError result = FnTable.GetMirrorTextureD3D11(eEye, pD3D11DeviceOrResource, ref ppD3D11ShaderResourceView); - return result; - } - public void ReleaseMirrorTextureD3D11(IntPtr pD3D11ShaderResourceView) - { - FnTable.ReleaseMirrorTextureD3D11(pD3D11ShaderResourceView); - } - public EVRCompositorError GetMirrorTextureGL(EVREye eEye, ref uint pglTextureId, IntPtr pglSharedTextureHandle) - { - pglTextureId = 0; - EVRCompositorError result = FnTable.GetMirrorTextureGL(eEye, ref pglTextureId, pglSharedTextureHandle); - return result; - } - public bool ReleaseSharedGLTexture(uint glTextureId, IntPtr glSharedTextureHandle) - { - bool result = FnTable.ReleaseSharedGLTexture(glTextureId, glSharedTextureHandle); - return result; - } - public void LockGLSharedTextureForAccess(IntPtr glSharedTextureHandle) - { - FnTable.LockGLSharedTextureForAccess(glSharedTextureHandle); - } - public void UnlockGLSharedTextureForAccess(IntPtr glSharedTextureHandle) - { - FnTable.UnlockGLSharedTextureForAccess(glSharedTextureHandle); - } - public uint GetVulkanInstanceExtensionsRequired(System.Text.StringBuilder pchValue, uint unBufferSize) - { - uint result = FnTable.GetVulkanInstanceExtensionsRequired(pchValue, unBufferSize); - return result; - } - public uint GetVulkanDeviceExtensionsRequired(IntPtr pPhysicalDevice, System.Text.StringBuilder pchValue, uint unBufferSize) - { - uint result = FnTable.GetVulkanDeviceExtensionsRequired(pPhysicalDevice, pchValue, unBufferSize); - return result; - } - public void SetExplicitTimingMode(EVRCompositorTimingMode eTimingMode) - { - FnTable.SetExplicitTimingMode(eTimingMode); - } - public EVRCompositorError SubmitExplicitTimingData() - { - EVRCompositorError result = FnTable.SubmitExplicitTimingData(); - return result; - } - public bool IsMotionSmoothingEnabled() - { - bool result = FnTable.IsMotionSmoothingEnabled(); - return result; - } - public bool IsMotionSmoothingSupported() - { - bool result = FnTable.IsMotionSmoothingSupported(); - return result; - } - public bool IsCurrentSceneFocusAppLoading() - { - bool result = FnTable.IsCurrentSceneFocusAppLoading(); - return result; - } - public EVRCompositorError SetStageOverride_Async(string pchRenderModelPath, ref HmdMatrix34_t pTransform, ref Compositor_StageRenderSettings pRenderSettings, uint nSizeOfRenderSettings) - { - IntPtr pchRenderModelPathUtf8 = Utils.ToUtf8(pchRenderModelPath); - EVRCompositorError result = FnTable.SetStageOverride_Async(pchRenderModelPathUtf8, ref pTransform, ref pRenderSettings, nSizeOfRenderSettings); - Marshal.FreeHGlobal(pchRenderModelPathUtf8); - return result; - } - public void ClearStageOverride() - { - FnTable.ClearStageOverride(); - } - public bool GetCompositorBenchmarkResults(ref Compositor_BenchmarkResults pBenchmarkResults, uint nSizeOfBenchmarkResults) - { - bool result = FnTable.GetCompositorBenchmarkResults(ref pBenchmarkResults, nSizeOfBenchmarkResults); - return result; - } - public EVRCompositorError GetLastPosePredictionIDs(ref uint pRenderPosePredictionID, ref uint pGamePosePredictionID) - { - pRenderPosePredictionID = 0; - pGamePosePredictionID = 0; - EVRCompositorError result = FnTable.GetLastPosePredictionIDs(ref pRenderPosePredictionID, ref pGamePosePredictionID); - return result; - } - public EVRCompositorError GetPosesForFrame(uint unPosePredictionID, TrackedDevicePose_t[] pPoseArray) - { - EVRCompositorError result = FnTable.GetPosesForFrame(unPosePredictionID, pPoseArray, (uint)pPoseArray.Length); - return result; - } - } - - - public class CVROverlay - { - IVROverlay FnTable; - internal CVROverlay(IntPtr pInterface) - { - FnTable = (IVROverlay)Marshal.PtrToStructure(pInterface, typeof(IVROverlay)); - } - public EVROverlayError FindOverlay(string pchOverlayKey, ref ulong pOverlayHandle) - { - IntPtr pchOverlayKeyUtf8 = Utils.ToUtf8(pchOverlayKey); - pOverlayHandle = 0; - EVROverlayError result = FnTable.FindOverlay(pchOverlayKeyUtf8, ref pOverlayHandle); - Marshal.FreeHGlobal(pchOverlayKeyUtf8); - return result; - } - public EVROverlayError CreateOverlay(string pchOverlayKey, string pchOverlayName, ref ulong pOverlayHandle) - { - IntPtr pchOverlayKeyUtf8 = Utils.ToUtf8(pchOverlayKey); - IntPtr pchOverlayNameUtf8 = Utils.ToUtf8(pchOverlayName); - pOverlayHandle = 0; - EVROverlayError result = FnTable.CreateOverlay(pchOverlayKeyUtf8, pchOverlayNameUtf8, ref pOverlayHandle); - Marshal.FreeHGlobal(pchOverlayKeyUtf8); - Marshal.FreeHGlobal(pchOverlayNameUtf8); - return result; - } - public EVROverlayError CreateSubviewOverlay(ulong parentOverlayHandle, string pchSubviewOverlayKey, string pchSubviewOverlayName, ref ulong pSubviewOverlayHandle) - { - IntPtr pchSubviewOverlayKeyUtf8 = Utils.ToUtf8(pchSubviewOverlayKey); - IntPtr pchSubviewOverlayNameUtf8 = Utils.ToUtf8(pchSubviewOverlayName); - pSubviewOverlayHandle = 0; - EVROverlayError result = FnTable.CreateSubviewOverlay(parentOverlayHandle, pchSubviewOverlayKeyUtf8, pchSubviewOverlayNameUtf8, ref pSubviewOverlayHandle); - Marshal.FreeHGlobal(pchSubviewOverlayKeyUtf8); - Marshal.FreeHGlobal(pchSubviewOverlayNameUtf8); - return result; - } - public EVROverlayError DestroyOverlay(ulong ulOverlayHandle) - { - EVROverlayError result = FnTable.DestroyOverlay(ulOverlayHandle); - return result; - } - public uint GetOverlayKey(ulong ulOverlayHandle, System.Text.StringBuilder pchValue, uint unBufferSize, ref EVROverlayError pError) - { - uint result = FnTable.GetOverlayKey(ulOverlayHandle, pchValue, unBufferSize, ref pError); - return result; - } - public uint GetOverlayName(ulong ulOverlayHandle, System.Text.StringBuilder pchValue, uint unBufferSize, ref EVROverlayError pError) - { - uint result = FnTable.GetOverlayName(ulOverlayHandle, pchValue, unBufferSize, ref pError); - return result; - } - public EVROverlayError SetOverlayName(ulong ulOverlayHandle, string pchName) - { - IntPtr pchNameUtf8 = Utils.ToUtf8(pchName); - EVROverlayError result = FnTable.SetOverlayName(ulOverlayHandle, pchNameUtf8); - Marshal.FreeHGlobal(pchNameUtf8); - return result; - } - public EVROverlayError GetOverlayImageData(ulong ulOverlayHandle, IntPtr pvBuffer, uint unBufferSize, ref uint punWidth, ref uint punHeight) - { - punWidth = 0; - punHeight = 0; - EVROverlayError result = FnTable.GetOverlayImageData(ulOverlayHandle, pvBuffer, unBufferSize, ref punWidth, ref punHeight); - return result; - } - public string GetOverlayErrorNameFromEnum(EVROverlayError error) - { - IntPtr result = FnTable.GetOverlayErrorNameFromEnum(error); - return Marshal.PtrToStringAnsi(result); - } - public EVROverlayError SetOverlayRenderingPid(ulong ulOverlayHandle, uint unPID) - { - EVROverlayError result = FnTable.SetOverlayRenderingPid(ulOverlayHandle, unPID); - return result; - } - public uint GetOverlayRenderingPid(ulong ulOverlayHandle) - { - uint result = FnTable.GetOverlayRenderingPid(ulOverlayHandle); - return result; - } - public EVROverlayError SetOverlayFlag(ulong ulOverlayHandle, VROverlayFlags eOverlayFlag, bool bEnabled) - { - EVROverlayError result = FnTable.SetOverlayFlag(ulOverlayHandle, eOverlayFlag, bEnabled); - return result; - } - public EVROverlayError GetOverlayFlag(ulong ulOverlayHandle, VROverlayFlags eOverlayFlag, ref bool pbEnabled) - { - pbEnabled = false; - EVROverlayError result = FnTable.GetOverlayFlag(ulOverlayHandle, eOverlayFlag, ref pbEnabled); - return result; - } - public EVROverlayError GetOverlayFlags(ulong ulOverlayHandle, ref uint pFlags) - { - pFlags = 0; - EVROverlayError result = FnTable.GetOverlayFlags(ulOverlayHandle, ref pFlags); - return result; - } - public EVROverlayError SetOverlayColor(ulong ulOverlayHandle, float fRed, float fGreen, float fBlue) - { - EVROverlayError result = FnTable.SetOverlayColor(ulOverlayHandle, fRed, fGreen, fBlue); - return result; - } - public EVROverlayError GetOverlayColor(ulong ulOverlayHandle, ref float pfRed, ref float pfGreen, ref float pfBlue) - { - pfRed = 0; - pfGreen = 0; - pfBlue = 0; - EVROverlayError result = FnTable.GetOverlayColor(ulOverlayHandle, ref pfRed, ref pfGreen, ref pfBlue); - return result; - } - public EVROverlayError SetOverlayAlpha(ulong ulOverlayHandle, float fAlpha) - { - EVROverlayError result = FnTable.SetOverlayAlpha(ulOverlayHandle, fAlpha); - return result; - } - public EVROverlayError GetOverlayAlpha(ulong ulOverlayHandle, ref float pfAlpha) - { - pfAlpha = 0; - EVROverlayError result = FnTable.GetOverlayAlpha(ulOverlayHandle, ref pfAlpha); - return result; - } - public EVROverlayError SetOverlayTexelAspect(ulong ulOverlayHandle, float fTexelAspect) - { - EVROverlayError result = FnTable.SetOverlayTexelAspect(ulOverlayHandle, fTexelAspect); - return result; - } - public EVROverlayError GetOverlayTexelAspect(ulong ulOverlayHandle, ref float pfTexelAspect) - { - pfTexelAspect = 0; - EVROverlayError result = FnTable.GetOverlayTexelAspect(ulOverlayHandle, ref pfTexelAspect); - return result; - } - public EVROverlayError SetOverlaySortOrder(ulong ulOverlayHandle, uint unSortOrder) - { - EVROverlayError result = FnTable.SetOverlaySortOrder(ulOverlayHandle, unSortOrder); - return result; - } - public EVROverlayError GetOverlaySortOrder(ulong ulOverlayHandle, ref uint punSortOrder) - { - punSortOrder = 0; - EVROverlayError result = FnTable.GetOverlaySortOrder(ulOverlayHandle, ref punSortOrder); - return result; - } - public EVROverlayError SetOverlayWidthInMeters(ulong ulOverlayHandle, float fWidthInMeters) - { - EVROverlayError result = FnTable.SetOverlayWidthInMeters(ulOverlayHandle, fWidthInMeters); - return result; - } - public EVROverlayError GetOverlayWidthInMeters(ulong ulOverlayHandle, ref float pfWidthInMeters) - { - pfWidthInMeters = 0; - EVROverlayError result = FnTable.GetOverlayWidthInMeters(ulOverlayHandle, ref pfWidthInMeters); - return result; - } - public EVROverlayError SetOverlayCurvature(ulong ulOverlayHandle, float fCurvature) - { - EVROverlayError result = FnTable.SetOverlayCurvature(ulOverlayHandle, fCurvature); - return result; - } - public EVROverlayError GetOverlayCurvature(ulong ulOverlayHandle, ref float pfCurvature) - { - pfCurvature = 0; - EVROverlayError result = FnTable.GetOverlayCurvature(ulOverlayHandle, ref pfCurvature); - return result; - } - public EVROverlayError SetOverlayPreCurvePitch(ulong ulOverlayHandle, float fRadians) - { - EVROverlayError result = FnTable.SetOverlayPreCurvePitch(ulOverlayHandle, fRadians); - return result; - } - public EVROverlayError GetOverlayPreCurvePitch(ulong ulOverlayHandle, ref float pfRadians) - { - pfRadians = 0; - EVROverlayError result = FnTable.GetOverlayPreCurvePitch(ulOverlayHandle, ref pfRadians); - return result; - } - public EVROverlayError SetOverlayTextureColorSpace(ulong ulOverlayHandle, EColorSpace eTextureColorSpace) - { - EVROverlayError result = FnTable.SetOverlayTextureColorSpace(ulOverlayHandle, eTextureColorSpace); - return result; - } - public EVROverlayError GetOverlayTextureColorSpace(ulong ulOverlayHandle, ref EColorSpace peTextureColorSpace) - { - EVROverlayError result = FnTable.GetOverlayTextureColorSpace(ulOverlayHandle, ref peTextureColorSpace); - return result; - } - public EVROverlayError SetOverlayTextureBounds(ulong ulOverlayHandle, ref VRTextureBounds_t pOverlayTextureBounds) - { - EVROverlayError result = FnTable.SetOverlayTextureBounds(ulOverlayHandle, ref pOverlayTextureBounds); - return result; - } - public EVROverlayError GetOverlayTextureBounds(ulong ulOverlayHandle, ref VRTextureBounds_t pOverlayTextureBounds) - { - EVROverlayError result = FnTable.GetOverlayTextureBounds(ulOverlayHandle, ref pOverlayTextureBounds); - return result; - } - public EVROverlayError GetOverlayTransformType(ulong ulOverlayHandle, ref VROverlayTransformType peTransformType) - { - EVROverlayError result = FnTable.GetOverlayTransformType(ulOverlayHandle, ref peTransformType); - return result; - } - public EVROverlayError SetOverlayTransformAbsolute(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform) - { - EVROverlayError result = FnTable.SetOverlayTransformAbsolute(ulOverlayHandle, eTrackingOrigin, ref pmatTrackingOriginToOverlayTransform); - return result; - } - public EVROverlayError GetOverlayTransformAbsolute(ulong ulOverlayHandle, ref ETrackingUniverseOrigin peTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform) - { - EVROverlayError result = FnTable.GetOverlayTransformAbsolute(ulOverlayHandle, ref peTrackingOrigin, ref pmatTrackingOriginToOverlayTransform); - return result; - } - public EVROverlayError SetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle, uint unTrackedDevice, ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform) - { - EVROverlayError result = FnTable.SetOverlayTransformTrackedDeviceRelative(ulOverlayHandle, unTrackedDevice, ref pmatTrackedDeviceToOverlayTransform); - return result; - } - public EVROverlayError GetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle, ref uint punTrackedDevice, ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform) - { - punTrackedDevice = 0; - EVROverlayError result = FnTable.GetOverlayTransformTrackedDeviceRelative(ulOverlayHandle, ref punTrackedDevice, ref pmatTrackedDeviceToOverlayTransform); - return result; - } - public EVROverlayError SetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle, uint unDeviceIndex, string pchComponentName) - { - IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); - EVROverlayError result = FnTable.SetOverlayTransformTrackedDeviceComponent(ulOverlayHandle, unDeviceIndex, pchComponentNameUtf8); - Marshal.FreeHGlobal(pchComponentNameUtf8); - return result; - } - public EVROverlayError GetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle, ref uint punDeviceIndex, System.Text.StringBuilder pchComponentName, uint unComponentNameSize) - { - punDeviceIndex = 0; - EVROverlayError result = FnTable.GetOverlayTransformTrackedDeviceComponent(ulOverlayHandle, ref punDeviceIndex, pchComponentName, unComponentNameSize); - return result; - } - public EVROverlayError SetOverlayTransformCursor(ulong ulCursorOverlayHandle, ref HmdVector2_t pvHotspot) - { - EVROverlayError result = FnTable.SetOverlayTransformCursor(ulCursorOverlayHandle, ref pvHotspot); - return result; - } - public EVROverlayError GetOverlayTransformCursor(ulong ulOverlayHandle, ref HmdVector2_t pvHotspot) - { - EVROverlayError result = FnTable.GetOverlayTransformCursor(ulOverlayHandle, ref pvHotspot); - return result; - } - public EVROverlayError SetOverlayTransformProjection(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform, ref VROverlayProjection_t pProjection, EVREye eEye) - { - EVROverlayError result = FnTable.SetOverlayTransformProjection(ulOverlayHandle, eTrackingOrigin, ref pmatTrackingOriginToOverlayTransform, ref pProjection, eEye); - return result; - } - public EVROverlayError SetSubviewPosition(ulong ulOverlayHandle, float fX, float fY) - { - EVROverlayError result = FnTable.SetSubviewPosition(ulOverlayHandle, fX, fY); - return result; - } - public EVROverlayError ShowOverlay(ulong ulOverlayHandle) - { - EVROverlayError result = FnTable.ShowOverlay(ulOverlayHandle); - return result; - } - public EVROverlayError HideOverlay(ulong ulOverlayHandle) - { - EVROverlayError result = FnTable.HideOverlay(ulOverlayHandle); - return result; - } - public bool IsOverlayVisible(ulong ulOverlayHandle) - { - bool result = FnTable.IsOverlayVisible(ulOverlayHandle); - return result; - } - public EVROverlayError GetTransformForOverlayCoordinates(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, HmdVector2_t coordinatesInOverlay, ref HmdMatrix34_t pmatTransform) - { - EVROverlayError result = FnTable.GetTransformForOverlayCoordinates(ulOverlayHandle, eTrackingOrigin, coordinatesInOverlay, ref pmatTransform); - return result; - } - public EVROverlayError WaitFrameSync(uint nTimeoutMs) - { - EVROverlayError result = FnTable.WaitFrameSync(nTimeoutMs); - return result; - } - // This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were - // originally mis-compiled with the wrong packing for Linux and OSX. - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate bool _PollNextOverlayEventPacked(ulong ulOverlayHandle, ref VREvent_t_Packed pEvent, uint uncbVREvent); - [StructLayout(LayoutKind.Explicit)] - struct PollNextOverlayEventUnion - { - [FieldOffset(0)] - public IVROverlay._PollNextOverlayEvent pPollNextOverlayEvent; - [FieldOffset(0)] - public _PollNextOverlayEventPacked pPollNextOverlayEventPacked; - } - public bool PollNextOverlayEvent(ulong ulOverlayHandle, ref VREvent_t pEvent, uint uncbVREvent) - { -#if !UNITY_METRO - if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || - (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) - { - PollNextOverlayEventUnion u; - VREvent_t_Packed event_packed = new VREvent_t_Packed(); - u.pPollNextOverlayEventPacked = null; - u.pPollNextOverlayEvent = FnTable.PollNextOverlayEvent; - bool packed_result = u.pPollNextOverlayEventPacked(ulOverlayHandle, ref event_packed, (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t_Packed))); - - event_packed.Unpack(ref pEvent); - return packed_result; - } -#endif - bool result = FnTable.PollNextOverlayEvent(ulOverlayHandle, ref pEvent, uncbVREvent); - return result; - } - public EVROverlayError GetOverlayInputMethod(ulong ulOverlayHandle, ref VROverlayInputMethod peInputMethod) - { - EVROverlayError result = FnTable.GetOverlayInputMethod(ulOverlayHandle, ref peInputMethod); - return result; - } - public EVROverlayError SetOverlayInputMethod(ulong ulOverlayHandle, VROverlayInputMethod eInputMethod) - { - EVROverlayError result = FnTable.SetOverlayInputMethod(ulOverlayHandle, eInputMethod); - return result; - } - public EVROverlayError GetOverlayMouseScale(ulong ulOverlayHandle, ref HmdVector2_t pvecMouseScale) - { - EVROverlayError result = FnTable.GetOverlayMouseScale(ulOverlayHandle, ref pvecMouseScale); - return result; - } - public EVROverlayError SetOverlayMouseScale(ulong ulOverlayHandle, ref HmdVector2_t pvecMouseScale) - { - EVROverlayError result = FnTable.SetOverlayMouseScale(ulOverlayHandle, ref pvecMouseScale); - return result; - } - public bool ComputeOverlayIntersection(ulong ulOverlayHandle, ref VROverlayIntersectionParams_t pParams, ref VROverlayIntersectionResults_t pResults) - { - bool result = FnTable.ComputeOverlayIntersection(ulOverlayHandle, ref pParams, ref pResults); - return result; - } - public bool IsHoverTargetOverlay(ulong ulOverlayHandle) - { - bool result = FnTable.IsHoverTargetOverlay(ulOverlayHandle); - return result; - } - public EVROverlayError SetOverlayIntersectionMask(ulong ulOverlayHandle, ref VROverlayIntersectionMaskPrimitive_t pMaskPrimitives, uint unNumMaskPrimitives, uint unPrimitiveSize) - { - EVROverlayError result = FnTable.SetOverlayIntersectionMask(ulOverlayHandle, ref pMaskPrimitives, unNumMaskPrimitives, unPrimitiveSize); - return result; - } - public EVROverlayError TriggerLaserMouseHapticVibration(ulong ulOverlayHandle, float fDurationSeconds, float fFrequency, float fAmplitude) - { - EVROverlayError result = FnTable.TriggerLaserMouseHapticVibration(ulOverlayHandle, fDurationSeconds, fFrequency, fAmplitude); - return result; - } - public EVROverlayError SetOverlayCursor(ulong ulOverlayHandle, ulong ulCursorHandle) - { - EVROverlayError result = FnTable.SetOverlayCursor(ulOverlayHandle, ulCursorHandle); - return result; - } - public EVROverlayError SetOverlayCursorPositionOverride(ulong ulOverlayHandle, ref HmdVector2_t pvCursor) - { - EVROverlayError result = FnTable.SetOverlayCursorPositionOverride(ulOverlayHandle, ref pvCursor); - return result; - } - public EVROverlayError ClearOverlayCursorPositionOverride(ulong ulOverlayHandle) - { - EVROverlayError result = FnTable.ClearOverlayCursorPositionOverride(ulOverlayHandle); - return result; - } - public EVROverlayError SetOverlayTexture(ulong ulOverlayHandle, ref Texture_t pTexture) - { - EVROverlayError result = FnTable.SetOverlayTexture(ulOverlayHandle, ref pTexture); - return result; - } - public EVROverlayError ClearOverlayTexture(ulong ulOverlayHandle) - { - EVROverlayError result = FnTable.ClearOverlayTexture(ulOverlayHandle); - return result; - } - public EVROverlayError SetOverlayRaw(ulong ulOverlayHandle, IntPtr pvBuffer, uint unWidth, uint unHeight, uint unBytesPerPixel) - { - EVROverlayError result = FnTable.SetOverlayRaw(ulOverlayHandle, pvBuffer, unWidth, unHeight, unBytesPerPixel); - return result; - } - public EVROverlayError SetOverlayFromFile(ulong ulOverlayHandle, string pchFilePath) - { - IntPtr pchFilePathUtf8 = Utils.ToUtf8(pchFilePath); - EVROverlayError result = FnTable.SetOverlayFromFile(ulOverlayHandle, pchFilePathUtf8); - Marshal.FreeHGlobal(pchFilePathUtf8); - return result; - } - public EVROverlayError GetOverlayTexture(ulong ulOverlayHandle, ref IntPtr pNativeTextureHandle, IntPtr pNativeTextureRef, ref uint pWidth, ref uint pHeight, ref uint pNativeFormat, ref ETextureType pAPIType, ref EColorSpace pColorSpace, ref VRTextureBounds_t pTextureBounds) - { - pWidth = 0; - pHeight = 0; - pNativeFormat = 0; - EVROverlayError result = FnTable.GetOverlayTexture(ulOverlayHandle, ref pNativeTextureHandle, pNativeTextureRef, ref pWidth, ref pHeight, ref pNativeFormat, ref pAPIType, ref pColorSpace, ref pTextureBounds); - return result; - } - public EVROverlayError ReleaseNativeOverlayHandle(ulong ulOverlayHandle, IntPtr pNativeTextureHandle) - { - EVROverlayError result = FnTable.ReleaseNativeOverlayHandle(ulOverlayHandle, pNativeTextureHandle); - return result; - } - public EVROverlayError GetOverlayTextureSize(ulong ulOverlayHandle, ref uint pWidth, ref uint pHeight) - { - pWidth = 0; - pHeight = 0; - EVROverlayError result = FnTable.GetOverlayTextureSize(ulOverlayHandle, ref pWidth, ref pHeight); - return result; - } - public EVROverlayError CreateDashboardOverlay(string pchOverlayKey, string pchOverlayFriendlyName, ref ulong pMainHandle, ref ulong pThumbnailHandle) - { - IntPtr pchOverlayKeyUtf8 = Utils.ToUtf8(pchOverlayKey); - IntPtr pchOverlayFriendlyNameUtf8 = Utils.ToUtf8(pchOverlayFriendlyName); - pMainHandle = 0; - pThumbnailHandle = 0; - EVROverlayError result = FnTable.CreateDashboardOverlay(pchOverlayKeyUtf8, pchOverlayFriendlyNameUtf8, ref pMainHandle, ref pThumbnailHandle); - Marshal.FreeHGlobal(pchOverlayKeyUtf8); - Marshal.FreeHGlobal(pchOverlayFriendlyNameUtf8); - return result; - } - public bool IsDashboardVisible() - { - bool result = FnTable.IsDashboardVisible(); - return result; - } - public bool IsActiveDashboardOverlay(ulong ulOverlayHandle) - { - bool result = FnTable.IsActiveDashboardOverlay(ulOverlayHandle); - return result; - } - public EVROverlayError SetDashboardOverlaySceneProcess(ulong ulOverlayHandle, uint unProcessId) - { - EVROverlayError result = FnTable.SetDashboardOverlaySceneProcess(ulOverlayHandle, unProcessId); - return result; - } - public EVROverlayError GetDashboardOverlaySceneProcess(ulong ulOverlayHandle, ref uint punProcessId) - { - punProcessId = 0; - EVROverlayError result = FnTable.GetDashboardOverlaySceneProcess(ulOverlayHandle, ref punProcessId); - return result; - } - public void ShowDashboard(string pchOverlayToShow) - { - IntPtr pchOverlayToShowUtf8 = Utils.ToUtf8(pchOverlayToShow); - FnTable.ShowDashboard(pchOverlayToShowUtf8); - Marshal.FreeHGlobal(pchOverlayToShowUtf8); - } - public uint GetPrimaryDashboardDevice() - { - uint result = FnTable.GetPrimaryDashboardDevice(); - return result; - } - public EVROverlayError ShowKeyboard(int eInputMode, int eLineInputMode, uint unFlags, string pchDescription, uint unCharMax, string pchExistingText, ulong uUserValue) - { - IntPtr pchDescriptionUtf8 = Utils.ToUtf8(pchDescription); - IntPtr pchExistingTextUtf8 = Utils.ToUtf8(pchExistingText); - EVROverlayError result = FnTable.ShowKeyboard(eInputMode, eLineInputMode, unFlags, pchDescriptionUtf8, unCharMax, pchExistingTextUtf8, uUserValue); - Marshal.FreeHGlobal(pchDescriptionUtf8); - Marshal.FreeHGlobal(pchExistingTextUtf8); - return result; - } - public EVROverlayError ShowKeyboardForOverlay(ulong ulOverlayHandle, int eInputMode, int eLineInputMode, uint unFlags, string pchDescription, uint unCharMax, string pchExistingText, ulong uUserValue) - { - IntPtr pchDescriptionUtf8 = Utils.ToUtf8(pchDescription); - IntPtr pchExistingTextUtf8 = Utils.ToUtf8(pchExistingText); - EVROverlayError result = FnTable.ShowKeyboardForOverlay(ulOverlayHandle, eInputMode, eLineInputMode, unFlags, pchDescriptionUtf8, unCharMax, pchExistingTextUtf8, uUserValue); - Marshal.FreeHGlobal(pchDescriptionUtf8); - Marshal.FreeHGlobal(pchExistingTextUtf8); - return result; - } - public uint GetKeyboardText(System.Text.StringBuilder pchText, uint cchText) - { - uint result = FnTable.GetKeyboardText(pchText, cchText); - return result; - } - public void HideKeyboard() - { - FnTable.HideKeyboard(); - } - public void SetKeyboardTransformAbsolute(ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToKeyboardTransform) - { - FnTable.SetKeyboardTransformAbsolute(eTrackingOrigin, ref pmatTrackingOriginToKeyboardTransform); - } - public void SetKeyboardPositionForOverlay(ulong ulOverlayHandle, HmdRect2_t avoidRect) - { - FnTable.SetKeyboardPositionForOverlay(ulOverlayHandle, avoidRect); - } - public VRMessageOverlayResponse ShowMessageOverlay(string pchText, string pchCaption, string pchButton0Text, string pchButton1Text, string pchButton2Text, string pchButton3Text) - { - IntPtr pchTextUtf8 = Utils.ToUtf8(pchText); - IntPtr pchCaptionUtf8 = Utils.ToUtf8(pchCaption); - IntPtr pchButton0TextUtf8 = Utils.ToUtf8(pchButton0Text); - IntPtr pchButton1TextUtf8 = Utils.ToUtf8(pchButton1Text); - IntPtr pchButton2TextUtf8 = Utils.ToUtf8(pchButton2Text); - IntPtr pchButton3TextUtf8 = Utils.ToUtf8(pchButton3Text); - VRMessageOverlayResponse result = FnTable.ShowMessageOverlay(pchTextUtf8, pchCaptionUtf8, pchButton0TextUtf8, pchButton1TextUtf8, pchButton2TextUtf8, pchButton3TextUtf8); - Marshal.FreeHGlobal(pchTextUtf8); - Marshal.FreeHGlobal(pchCaptionUtf8); - Marshal.FreeHGlobal(pchButton0TextUtf8); - Marshal.FreeHGlobal(pchButton1TextUtf8); - Marshal.FreeHGlobal(pchButton2TextUtf8); - Marshal.FreeHGlobal(pchButton3TextUtf8); - return result; - } - public void CloseMessageOverlay() - { - FnTable.CloseMessageOverlay(); - } - } - - - public class CVROverlayView - { - IVROverlayView FnTable; - internal CVROverlayView(IntPtr pInterface) - { - FnTable = (IVROverlayView)Marshal.PtrToStructure(pInterface, typeof(IVROverlayView)); - } - public EVROverlayError AcquireOverlayView(ulong ulOverlayHandle, ref VRNativeDevice_t pNativeDevice, ref VROverlayView_t pOverlayView, uint unOverlayViewSize) - { - EVROverlayError result = FnTable.AcquireOverlayView(ulOverlayHandle, ref pNativeDevice, ref pOverlayView, unOverlayViewSize); - return result; - } - public EVROverlayError ReleaseOverlayView(ref VROverlayView_t pOverlayView) - { - EVROverlayError result = FnTable.ReleaseOverlayView(ref pOverlayView); - return result; - } - public void PostOverlayEvent(ulong ulOverlayHandle, ref VREvent_t pvrEvent) - { - FnTable.PostOverlayEvent(ulOverlayHandle, ref pvrEvent); - } - public bool IsViewingPermitted(ulong ulOverlayHandle) - { - bool result = FnTable.IsViewingPermitted(ulOverlayHandle); - return result; - } - } - - - public class CVRHeadsetView - { - IVRHeadsetView FnTable; - internal CVRHeadsetView(IntPtr pInterface) - { - FnTable = (IVRHeadsetView)Marshal.PtrToStructure(pInterface, typeof(IVRHeadsetView)); - } - public void SetHeadsetViewSize(uint nWidth, uint nHeight) - { - FnTable.SetHeadsetViewSize(nWidth, nHeight); - } - public void GetHeadsetViewSize(ref uint pnWidth, ref uint pnHeight) - { - pnWidth = 0; - pnHeight = 0; - FnTable.GetHeadsetViewSize(ref pnWidth, ref pnHeight); - } - public void SetHeadsetViewMode(uint eHeadsetViewMode) - { - FnTable.SetHeadsetViewMode(eHeadsetViewMode); - } - public uint GetHeadsetViewMode() - { - uint result = FnTable.GetHeadsetViewMode(); - return result; - } - public void SetHeadsetViewCropped(bool bCropped) - { - FnTable.SetHeadsetViewCropped(bCropped); - } - public bool GetHeadsetViewCropped() - { - bool result = FnTable.GetHeadsetViewCropped(); - return result; - } - public float GetHeadsetViewAspectRatio() - { - float result = FnTable.GetHeadsetViewAspectRatio(); - return result; - } - public void SetHeadsetViewBlendRange(float flStartPct, float flEndPct) - { - FnTable.SetHeadsetViewBlendRange(flStartPct, flEndPct); - } - public void GetHeadsetViewBlendRange(ref float pStartPct, ref float pEndPct) - { - pStartPct = 0; - pEndPct = 0; - FnTable.GetHeadsetViewBlendRange(ref pStartPct, ref pEndPct); - } - } - - - public class CVRRenderModels - { - IVRRenderModels FnTable; - internal CVRRenderModels(IntPtr pInterface) - { - FnTable = (IVRRenderModels)Marshal.PtrToStructure(pInterface, typeof(IVRRenderModels)); - } - public EVRRenderModelError LoadRenderModel_Async(string pchRenderModelName, ref IntPtr ppRenderModel) - { - IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); - EVRRenderModelError result = FnTable.LoadRenderModel_Async(pchRenderModelNameUtf8, ref ppRenderModel); - Marshal.FreeHGlobal(pchRenderModelNameUtf8); - return result; - } - public void FreeRenderModel(IntPtr pRenderModel) - { - FnTable.FreeRenderModel(pRenderModel); - } - public EVRRenderModelError LoadTexture_Async(int textureId, ref IntPtr ppTexture) - { - EVRRenderModelError result = FnTable.LoadTexture_Async(textureId, ref ppTexture); - return result; - } - public void FreeTexture(IntPtr pTexture) - { - FnTable.FreeTexture(pTexture); - } - public EVRRenderModelError LoadTextureD3D11_Async(int textureId, IntPtr pD3D11Device, ref IntPtr ppD3D11Texture2D) - { - EVRRenderModelError result = FnTable.LoadTextureD3D11_Async(textureId, pD3D11Device, ref ppD3D11Texture2D); - return result; - } - public EVRRenderModelError LoadIntoTextureD3D11_Async(int textureId, IntPtr pDstTexture) - { - EVRRenderModelError result = FnTable.LoadIntoTextureD3D11_Async(textureId, pDstTexture); - return result; - } - public void FreeTextureD3D11(IntPtr pD3D11Texture2D) - { - FnTable.FreeTextureD3D11(pD3D11Texture2D); - } - public uint GetRenderModelName(uint unRenderModelIndex, System.Text.StringBuilder pchRenderModelName, uint unRenderModelNameLen) - { - uint result = FnTable.GetRenderModelName(unRenderModelIndex, pchRenderModelName, unRenderModelNameLen); - return result; - } - public uint GetRenderModelCount() - { - uint result = FnTable.GetRenderModelCount(); - return result; - } - public uint GetComponentCount(string pchRenderModelName) - { - IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); - uint result = FnTable.GetComponentCount(pchRenderModelNameUtf8); - Marshal.FreeHGlobal(pchRenderModelNameUtf8); - return result; - } - public uint GetComponentName(string pchRenderModelName, uint unComponentIndex, System.Text.StringBuilder pchComponentName, uint unComponentNameLen) - { - IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); - uint result = FnTable.GetComponentName(pchRenderModelNameUtf8, unComponentIndex, pchComponentName, unComponentNameLen); - Marshal.FreeHGlobal(pchRenderModelNameUtf8); - return result; - } - public ulong GetComponentButtonMask(string pchRenderModelName, string pchComponentName) - { - IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); - IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); - ulong result = FnTable.GetComponentButtonMask(pchRenderModelNameUtf8, pchComponentNameUtf8); - Marshal.FreeHGlobal(pchRenderModelNameUtf8); - Marshal.FreeHGlobal(pchComponentNameUtf8); - return result; - } - public uint GetComponentRenderModelName(string pchRenderModelName, string pchComponentName, System.Text.StringBuilder pchComponentRenderModelName, uint unComponentRenderModelNameLen) - { - IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); - IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); - uint result = FnTable.GetComponentRenderModelName(pchRenderModelNameUtf8, pchComponentNameUtf8, pchComponentRenderModelName, unComponentRenderModelNameLen); - Marshal.FreeHGlobal(pchRenderModelNameUtf8); - Marshal.FreeHGlobal(pchComponentNameUtf8); - return result; - } - public bool GetComponentStateForDevicePath(string pchRenderModelName, string pchComponentName, ulong devicePath, ref RenderModel_ControllerMode_State_t pState, ref RenderModel_ComponentState_t pComponentState) - { - IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); - IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); - bool result = FnTable.GetComponentStateForDevicePath(pchRenderModelNameUtf8, pchComponentNameUtf8, devicePath, ref pState, ref pComponentState); - Marshal.FreeHGlobal(pchRenderModelNameUtf8); - Marshal.FreeHGlobal(pchComponentNameUtf8); - return result; - } - // This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were - // originally mis-compiled with the wrong packing for Linux and OSX. - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - internal delegate bool _GetComponentStatePacked(IntPtr pchRenderModelName, IntPtr pchComponentName, ref VRControllerState_t_Packed pControllerState, ref RenderModel_ControllerMode_State_t pState, ref RenderModel_ComponentState_t pComponentState); - [StructLayout(LayoutKind.Explicit)] - struct GetComponentStateUnion - { - [FieldOffset(0)] - public IVRRenderModels._GetComponentState pGetComponentState; - [FieldOffset(0)] - public _GetComponentStatePacked pGetComponentStatePacked; - } - public bool GetComponentState(string pchRenderModelName, string pchComponentName, ref VRControllerState_t pControllerState, ref RenderModel_ControllerMode_State_t pState, ref RenderModel_ComponentState_t pComponentState) - { - IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); - IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); -#if !UNITY_METRO - if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || - (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) - { - GetComponentStateUnion u; - VRControllerState_t_Packed state_packed = new VRControllerState_t_Packed(pControllerState); - u.pGetComponentStatePacked = null; - u.pGetComponentState = FnTable.GetComponentState; - bool packed_result = u.pGetComponentStatePacked(pchRenderModelNameUtf8, pchComponentNameUtf8, ref state_packed, ref pState, ref pComponentState); - - state_packed.Unpack(ref pControllerState); - return packed_result; - } -#endif - bool result = FnTable.GetComponentState(pchRenderModelNameUtf8, pchComponentNameUtf8, ref pControllerState, ref pState, ref pComponentState); - Marshal.FreeHGlobal(pchRenderModelNameUtf8); - Marshal.FreeHGlobal(pchComponentNameUtf8); - return result; - } - public bool RenderModelHasComponent(string pchRenderModelName, string pchComponentName) - { - IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); - IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); - bool result = FnTable.RenderModelHasComponent(pchRenderModelNameUtf8, pchComponentNameUtf8); - Marshal.FreeHGlobal(pchRenderModelNameUtf8); - Marshal.FreeHGlobal(pchComponentNameUtf8); - return result; - } - public uint GetRenderModelThumbnailURL(string pchRenderModelName, System.Text.StringBuilder pchThumbnailURL, uint unThumbnailURLLen, ref EVRRenderModelError peError) - { - IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); - uint result = FnTable.GetRenderModelThumbnailURL(pchRenderModelNameUtf8, pchThumbnailURL, unThumbnailURLLen, ref peError); - Marshal.FreeHGlobal(pchRenderModelNameUtf8); - return result; - } - public uint GetRenderModelOriginalPath(string pchRenderModelName, System.Text.StringBuilder pchOriginalPath, uint unOriginalPathLen, ref EVRRenderModelError peError) - { - IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); - uint result = FnTable.GetRenderModelOriginalPath(pchRenderModelNameUtf8, pchOriginalPath, unOriginalPathLen, ref peError); - Marshal.FreeHGlobal(pchRenderModelNameUtf8); - return result; - } - public string GetRenderModelErrorNameFromEnum(EVRRenderModelError error) - { - IntPtr result = FnTable.GetRenderModelErrorNameFromEnum(error); - return Marshal.PtrToStringAnsi(result); - } - } - - - public class CVRNotifications - { - IVRNotifications FnTable; - internal CVRNotifications(IntPtr pInterface) - { - FnTable = (IVRNotifications)Marshal.PtrToStructure(pInterface, typeof(IVRNotifications)); - } - public EVRNotificationError CreateNotification(ulong ulOverlayHandle, ulong ulUserValue, EVRNotificationType type, string pchText, EVRNotificationStyle style, ref NotificationBitmap_t pImage, ref uint pNotificationId) - { - IntPtr pchTextUtf8 = Utils.ToUtf8(pchText); - pNotificationId = 0; - EVRNotificationError result = FnTable.CreateNotification(ulOverlayHandle, ulUserValue, type, pchTextUtf8, style, ref pImage, ref pNotificationId); - Marshal.FreeHGlobal(pchTextUtf8); - return result; - } - public EVRNotificationError RemoveNotification(uint notificationId) - { - EVRNotificationError result = FnTable.RemoveNotification(notificationId); - return result; - } - } - - - public class CVRSettings - { - IVRSettings FnTable; - internal CVRSettings(IntPtr pInterface) - { - FnTable = (IVRSettings)Marshal.PtrToStructure(pInterface, typeof(IVRSettings)); - } - public string GetSettingsErrorNameFromEnum(EVRSettingsError eError) - { - IntPtr result = FnTable.GetSettingsErrorNameFromEnum(eError); - return Marshal.PtrToStringAnsi(result); - } - public void SetBool(string pchSection, string pchSettingsKey, bool bValue, ref EVRSettingsError peError) - { - IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); - IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); - FnTable.SetBool(pchSectionUtf8, pchSettingsKeyUtf8, bValue, ref peError); - Marshal.FreeHGlobal(pchSectionUtf8); - Marshal.FreeHGlobal(pchSettingsKeyUtf8); - } - public void SetInt32(string pchSection, string pchSettingsKey, int nValue, ref EVRSettingsError peError) - { - IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); - IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); - FnTable.SetInt32(pchSectionUtf8, pchSettingsKeyUtf8, nValue, ref peError); - Marshal.FreeHGlobal(pchSectionUtf8); - Marshal.FreeHGlobal(pchSettingsKeyUtf8); - } - public void SetFloat(string pchSection, string pchSettingsKey, float flValue, ref EVRSettingsError peError) - { - IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); - IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); - FnTable.SetFloat(pchSectionUtf8, pchSettingsKeyUtf8, flValue, ref peError); - Marshal.FreeHGlobal(pchSectionUtf8); - Marshal.FreeHGlobal(pchSettingsKeyUtf8); - } - public void SetString(string pchSection, string pchSettingsKey, string pchValue, ref EVRSettingsError peError) - { - IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); - IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); - IntPtr pchValueUtf8 = Utils.ToUtf8(pchValue); - FnTable.SetString(pchSectionUtf8, pchSettingsKeyUtf8, pchValueUtf8, ref peError); - Marshal.FreeHGlobal(pchSectionUtf8); - Marshal.FreeHGlobal(pchSettingsKeyUtf8); - Marshal.FreeHGlobal(pchValueUtf8); - } - public bool GetBool(string pchSection, string pchSettingsKey, ref EVRSettingsError peError) - { - IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); - IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); - bool result = FnTable.GetBool(pchSectionUtf8, pchSettingsKeyUtf8, ref peError); - Marshal.FreeHGlobal(pchSectionUtf8); - Marshal.FreeHGlobal(pchSettingsKeyUtf8); - return result; - } - public int GetInt32(string pchSection, string pchSettingsKey, ref EVRSettingsError peError) - { - IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); - IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); - int result = FnTable.GetInt32(pchSectionUtf8, pchSettingsKeyUtf8, ref peError); - Marshal.FreeHGlobal(pchSectionUtf8); - Marshal.FreeHGlobal(pchSettingsKeyUtf8); - return result; - } - public float GetFloat(string pchSection, string pchSettingsKey, ref EVRSettingsError peError) - { - IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); - IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); - float result = FnTable.GetFloat(pchSectionUtf8, pchSettingsKeyUtf8, ref peError); - Marshal.FreeHGlobal(pchSectionUtf8); - Marshal.FreeHGlobal(pchSettingsKeyUtf8); - return result; - } - public void GetString(string pchSection, string pchSettingsKey, System.Text.StringBuilder pchValue, uint unValueLen, ref EVRSettingsError peError) - { - IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); - IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); - FnTable.GetString(pchSectionUtf8, pchSettingsKeyUtf8, pchValue, unValueLen, ref peError); - Marshal.FreeHGlobal(pchSectionUtf8); - Marshal.FreeHGlobal(pchSettingsKeyUtf8); - } - public void RemoveSection(string pchSection, ref EVRSettingsError peError) - { - IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); - FnTable.RemoveSection(pchSectionUtf8, ref peError); - Marshal.FreeHGlobal(pchSectionUtf8); - } - public void RemoveKeyInSection(string pchSection, string pchSettingsKey, ref EVRSettingsError peError) - { - IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); - IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); - FnTable.RemoveKeyInSection(pchSectionUtf8, pchSettingsKeyUtf8, ref peError); - Marshal.FreeHGlobal(pchSectionUtf8); - Marshal.FreeHGlobal(pchSettingsKeyUtf8); - } - } - - - public class CVRScreenshots - { - IVRScreenshots FnTable; - internal CVRScreenshots(IntPtr pInterface) - { - FnTable = (IVRScreenshots)Marshal.PtrToStructure(pInterface, typeof(IVRScreenshots)); - } - public EVRScreenshotError RequestScreenshot(ref uint pOutScreenshotHandle, EVRScreenshotType type, string pchPreviewFilename, string pchVRFilename) - { - pOutScreenshotHandle = 0; - IntPtr pchPreviewFilenameUtf8 = Utils.ToUtf8(pchPreviewFilename); - IntPtr pchVRFilenameUtf8 = Utils.ToUtf8(pchVRFilename); - EVRScreenshotError result = FnTable.RequestScreenshot(ref pOutScreenshotHandle, type, pchPreviewFilenameUtf8, pchVRFilenameUtf8); - Marshal.FreeHGlobal(pchPreviewFilenameUtf8); - Marshal.FreeHGlobal(pchVRFilenameUtf8); - return result; - } - public EVRScreenshotError HookScreenshot(EVRScreenshotType[] pSupportedTypes) - { - EVRScreenshotError result = FnTable.HookScreenshot(pSupportedTypes, (int)pSupportedTypes.Length); - return result; - } - public EVRScreenshotType GetScreenshotPropertyType(uint screenshotHandle, ref EVRScreenshotError pError) - { - EVRScreenshotType result = FnTable.GetScreenshotPropertyType(screenshotHandle, ref pError); - return result; - } - public uint GetScreenshotPropertyFilename(uint screenshotHandle, EVRScreenshotPropertyFilenames filenameType, System.Text.StringBuilder pchFilename, uint cchFilename, ref EVRScreenshotError pError) - { - uint result = FnTable.GetScreenshotPropertyFilename(screenshotHandle, filenameType, pchFilename, cchFilename, ref pError); - return result; - } - public EVRScreenshotError UpdateScreenshotProgress(uint screenshotHandle, float flProgress) - { - EVRScreenshotError result = FnTable.UpdateScreenshotProgress(screenshotHandle, flProgress); - return result; - } - public EVRScreenshotError TakeStereoScreenshot(ref uint pOutScreenshotHandle, string pchPreviewFilename, string pchVRFilename) - { - pOutScreenshotHandle = 0; - IntPtr pchPreviewFilenameUtf8 = Utils.ToUtf8(pchPreviewFilename); - IntPtr pchVRFilenameUtf8 = Utils.ToUtf8(pchVRFilename); - EVRScreenshotError result = FnTable.TakeStereoScreenshot(ref pOutScreenshotHandle, pchPreviewFilenameUtf8, pchVRFilenameUtf8); - Marshal.FreeHGlobal(pchPreviewFilenameUtf8); - Marshal.FreeHGlobal(pchVRFilenameUtf8); - return result; - } - public EVRScreenshotError SubmitScreenshot(uint screenshotHandle, EVRScreenshotType type, string pchSourcePreviewFilename, string pchSourceVRFilename) - { - IntPtr pchSourcePreviewFilenameUtf8 = Utils.ToUtf8(pchSourcePreviewFilename); - IntPtr pchSourceVRFilenameUtf8 = Utils.ToUtf8(pchSourceVRFilename); - EVRScreenshotError result = FnTable.SubmitScreenshot(screenshotHandle, type, pchSourcePreviewFilenameUtf8, pchSourceVRFilenameUtf8); - Marshal.FreeHGlobal(pchSourcePreviewFilenameUtf8); - Marshal.FreeHGlobal(pchSourceVRFilenameUtf8); - return result; - } - } - - - public class CVRResources - { - IVRResources FnTable; - internal CVRResources(IntPtr pInterface) - { - FnTable = (IVRResources)Marshal.PtrToStructure(pInterface, typeof(IVRResources)); - } - public uint LoadSharedResource(string pchResourceName, string pchBuffer, uint unBufferLen) - { - IntPtr pchResourceNameUtf8 = Utils.ToUtf8(pchResourceName); - uint result = FnTable.LoadSharedResource(pchResourceNameUtf8, pchBuffer, unBufferLen); - Marshal.FreeHGlobal(pchResourceNameUtf8); - return result; - } - public uint GetResourceFullPath(string pchResourceName, string pchResourceTypeDirectory, System.Text.StringBuilder pchPathBuffer, uint unBufferLen) - { - IntPtr pchResourceNameUtf8 = Utils.ToUtf8(pchResourceName); - IntPtr pchResourceTypeDirectoryUtf8 = Utils.ToUtf8(pchResourceTypeDirectory); - uint result = FnTable.GetResourceFullPath(pchResourceNameUtf8, pchResourceTypeDirectoryUtf8, pchPathBuffer, unBufferLen); - Marshal.FreeHGlobal(pchResourceNameUtf8); - Marshal.FreeHGlobal(pchResourceTypeDirectoryUtf8); - return result; - } - } - - - public class CVRDriverManager - { - IVRDriverManager FnTable; - internal CVRDriverManager(IntPtr pInterface) - { - FnTable = (IVRDriverManager)Marshal.PtrToStructure(pInterface, typeof(IVRDriverManager)); - } - public uint GetDriverCount() - { - uint result = FnTable.GetDriverCount(); - return result; - } - public uint GetDriverName(uint nDriver, System.Text.StringBuilder pchValue, uint unBufferSize) - { - uint result = FnTable.GetDriverName(nDriver, pchValue, unBufferSize); - return result; - } - public ulong GetDriverHandle(string pchDriverName) - { - IntPtr pchDriverNameUtf8 = Utils.ToUtf8(pchDriverName); - ulong result = FnTable.GetDriverHandle(pchDriverNameUtf8); - Marshal.FreeHGlobal(pchDriverNameUtf8); - return result; - } - public bool IsEnabled(uint nDriver) - { - bool result = FnTable.IsEnabled(nDriver); - return result; - } - } - - - public class CVRInput - { - IVRInput FnTable; - internal CVRInput(IntPtr pInterface) - { - FnTable = (IVRInput)Marshal.PtrToStructure(pInterface, typeof(IVRInput)); - } - public EVRInputError SetActionManifestPath(string pchActionManifestPath) - { - IntPtr pchActionManifestPathUtf8 = Utils.ToUtf8(pchActionManifestPath); - EVRInputError result = FnTable.SetActionManifestPath(pchActionManifestPathUtf8); - Marshal.FreeHGlobal(pchActionManifestPathUtf8); - return result; - } - public EVRInputError GetActionSetHandle(string pchActionSetName, ref ulong pHandle) - { - IntPtr pchActionSetNameUtf8 = Utils.ToUtf8(pchActionSetName); - pHandle = 0; - EVRInputError result = FnTable.GetActionSetHandle(pchActionSetNameUtf8, ref pHandle); - Marshal.FreeHGlobal(pchActionSetNameUtf8); - return result; - } - public EVRInputError GetActionHandle(string pchActionName, ref ulong pHandle) - { - IntPtr pchActionNameUtf8 = Utils.ToUtf8(pchActionName); - pHandle = 0; - EVRInputError result = FnTable.GetActionHandle(pchActionNameUtf8, ref pHandle); - Marshal.FreeHGlobal(pchActionNameUtf8); - return result; - } - public EVRInputError GetInputSourceHandle(string pchInputSourcePath, ref ulong pHandle) - { - IntPtr pchInputSourcePathUtf8 = Utils.ToUtf8(pchInputSourcePath); - pHandle = 0; - EVRInputError result = FnTable.GetInputSourceHandle(pchInputSourcePathUtf8, ref pHandle); - Marshal.FreeHGlobal(pchInputSourcePathUtf8); - return result; - } - public EVRInputError UpdateActionState(VRActiveActionSet_t[] pSets, uint unSizeOfVRSelectedActionSet_t) - { - EVRInputError result = FnTable.UpdateActionState(pSets, unSizeOfVRSelectedActionSet_t, (uint)pSets.Length); - return result; - } - public EVRInputError GetDigitalActionData(ulong action, ref InputDigitalActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice) - { - EVRInputError result = FnTable.GetDigitalActionData(action, ref pActionData, unActionDataSize, ulRestrictToDevice); - return result; - } - public EVRInputError GetAnalogActionData(ulong action, ref InputAnalogActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice) - { - EVRInputError result = FnTable.GetAnalogActionData(action, ref pActionData, unActionDataSize, ulRestrictToDevice); - return result; - } - public EVRInputError GetPoseActionDataRelativeToNow(ulong action, ETrackingUniverseOrigin eOrigin, float fPredictedSecondsFromNow, ref InputPoseActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice) - { - EVRInputError result = FnTable.GetPoseActionDataRelativeToNow(action, eOrigin, fPredictedSecondsFromNow, ref pActionData, unActionDataSize, ulRestrictToDevice); - return result; - } - public EVRInputError GetPoseActionDataForNextFrame(ulong action, ETrackingUniverseOrigin eOrigin, ref InputPoseActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice) - { - EVRInputError result = FnTable.GetPoseActionDataForNextFrame(action, eOrigin, ref pActionData, unActionDataSize, ulRestrictToDevice); - return result; - } - public EVRInputError GetSkeletalActionData(ulong action, ref InputSkeletalActionData_t pActionData, uint unActionDataSize) - { - EVRInputError result = FnTable.GetSkeletalActionData(action, ref pActionData, unActionDataSize); - return result; - } - public EVRInputError GetDominantHand(ref ETrackedControllerRole peDominantHand) - { - EVRInputError result = FnTable.GetDominantHand(ref peDominantHand); - return result; - } - public EVRInputError SetDominantHand(ETrackedControllerRole eDominantHand) - { - EVRInputError result = FnTable.SetDominantHand(eDominantHand); - return result; - } - public EVRInputError GetBoneCount(ulong action, ref uint pBoneCount) - { - pBoneCount = 0; - EVRInputError result = FnTable.GetBoneCount(action, ref pBoneCount); - return result; - } - public EVRInputError GetBoneHierarchy(ulong action, int[] pParentIndices) - { - EVRInputError result = FnTable.GetBoneHierarchy(action, pParentIndices, (uint)pParentIndices.Length); - return result; - } - public EVRInputError GetBoneName(ulong action, int nBoneIndex, System.Text.StringBuilder pchBoneName, uint unNameBufferSize) - { - EVRInputError result = FnTable.GetBoneName(action, nBoneIndex, pchBoneName, unNameBufferSize); - return result; - } - public EVRInputError GetSkeletalReferenceTransforms(ulong action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalReferencePose eReferencePose, VRBoneTransform_t[] pTransformArray) - { - EVRInputError result = FnTable.GetSkeletalReferenceTransforms(action, eTransformSpace, eReferencePose, pTransformArray, (uint)pTransformArray.Length); - return result; - } - public EVRInputError GetSkeletalTrackingLevel(ulong action, ref EVRSkeletalTrackingLevel pSkeletalTrackingLevel) - { - EVRInputError result = FnTable.GetSkeletalTrackingLevel(action, ref pSkeletalTrackingLevel); - return result; - } - public EVRInputError GetSkeletalBoneData(ulong action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalMotionRange eMotionRange, VRBoneTransform_t[] pTransformArray) - { - EVRInputError result = FnTable.GetSkeletalBoneData(action, eTransformSpace, eMotionRange, pTransformArray, (uint)pTransformArray.Length); - return result; - } - public EVRInputError GetSkeletalSummaryData(ulong action, EVRSummaryType eSummaryType, ref VRSkeletalSummaryData_t pSkeletalSummaryData) - { - EVRInputError result = FnTable.GetSkeletalSummaryData(action, eSummaryType, ref pSkeletalSummaryData); - return result; - } - public EVRInputError GetSkeletalBoneDataCompressed(ulong action, EVRSkeletalMotionRange eMotionRange, IntPtr pvCompressedData, uint unCompressedSize, ref uint punRequiredCompressedSize) - { - punRequiredCompressedSize = 0; - EVRInputError result = FnTable.GetSkeletalBoneDataCompressed(action, eMotionRange, pvCompressedData, unCompressedSize, ref punRequiredCompressedSize); - return result; - } - public EVRInputError DecompressSkeletalBoneData(IntPtr pvCompressedBuffer, uint unCompressedBufferSize, EVRSkeletalTransformSpace eTransformSpace, VRBoneTransform_t[] pTransformArray) - { - EVRInputError result = FnTable.DecompressSkeletalBoneData(pvCompressedBuffer, unCompressedBufferSize, eTransformSpace, pTransformArray, (uint)pTransformArray.Length); - return result; - } - public EVRInputError TriggerHapticVibrationAction(ulong action, float fStartSecondsFromNow, float fDurationSeconds, float fFrequency, float fAmplitude, ulong ulRestrictToDevice) - { - EVRInputError result = FnTable.TriggerHapticVibrationAction(action, fStartSecondsFromNow, fDurationSeconds, fFrequency, fAmplitude, ulRestrictToDevice); - return result; - } - public EVRInputError GetActionOrigins(ulong actionSetHandle, ulong digitalActionHandle, ulong[] originsOut) - { - EVRInputError result = FnTable.GetActionOrigins(actionSetHandle, digitalActionHandle, originsOut, (uint)originsOut.Length); - return result; - } - public EVRInputError GetOriginLocalizedName(ulong origin, System.Text.StringBuilder pchNameArray, uint unNameArraySize, int unStringSectionsToInclude) - { - EVRInputError result = FnTable.GetOriginLocalizedName(origin, pchNameArray, unNameArraySize, unStringSectionsToInclude); - return result; - } - public EVRInputError GetOriginTrackedDeviceInfo(ulong origin, ref InputOriginInfo_t pOriginInfo, uint unOriginInfoSize) - { - EVRInputError result = FnTable.GetOriginTrackedDeviceInfo(origin, ref pOriginInfo, unOriginInfoSize); - return result; - } - public EVRInputError GetActionBindingInfo(ulong action, InputBindingInfo_t[] pOriginInfo, uint unBindingInfoSize, ref uint punReturnedBindingInfoCount) - { - punReturnedBindingInfoCount = 0; - EVRInputError result = FnTable.GetActionBindingInfo(action, pOriginInfo, unBindingInfoSize, (uint)pOriginInfo.Length, ref punReturnedBindingInfoCount); - return result; - } - public EVRInputError ShowActionOrigins(ulong actionSetHandle, ulong ulActionHandle) - { - EVRInputError result = FnTable.ShowActionOrigins(actionSetHandle, ulActionHandle); - return result; - } - public EVRInputError ShowBindingsForActionSet(VRActiveActionSet_t[] pSets, uint unSizeOfVRSelectedActionSet_t, ulong originToHighlight) - { - EVRInputError result = FnTable.ShowBindingsForActionSet(pSets, unSizeOfVRSelectedActionSet_t, (uint)pSets.Length, originToHighlight); - return result; - } - public EVRInputError GetComponentStateForBinding(string pchRenderModelName, string pchComponentName, ref InputBindingInfo_t pOriginInfo, uint unBindingInfoSize, uint unBindingInfoCount, ref RenderModel_ComponentState_t pComponentState) - { - IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); - IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); - EVRInputError result = FnTable.GetComponentStateForBinding(pchRenderModelNameUtf8, pchComponentNameUtf8, ref pOriginInfo, unBindingInfoSize, unBindingInfoCount, ref pComponentState); - Marshal.FreeHGlobal(pchRenderModelNameUtf8); - Marshal.FreeHGlobal(pchComponentNameUtf8); - return result; - } - public bool IsUsingLegacyInput() - { - bool result = FnTable.IsUsingLegacyInput(); - return result; - } - public EVRInputError OpenBindingUI(string pchAppKey, ulong ulActionSetHandle, ulong ulDeviceHandle, bool bShowOnDesktop) - { - IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); - EVRInputError result = FnTable.OpenBindingUI(pchAppKeyUtf8, ulActionSetHandle, ulDeviceHandle, bShowOnDesktop); - Marshal.FreeHGlobal(pchAppKeyUtf8); - return result; - } - public EVRInputError GetBindingVariant(ulong ulDevicePath, System.Text.StringBuilder pchVariantArray, uint unVariantArraySize) - { - EVRInputError result = FnTable.GetBindingVariant(ulDevicePath, pchVariantArray, unVariantArraySize); - return result; - } - } - - - public class CVRIOBuffer - { - IVRIOBuffer FnTable; - internal CVRIOBuffer(IntPtr pInterface) - { - FnTable = (IVRIOBuffer)Marshal.PtrToStructure(pInterface, typeof(IVRIOBuffer)); - } - public EIOBufferError Open(string pchPath, EIOBufferMode mode, uint unElementSize, uint unElements, ref ulong pulBuffer) - { - IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); - pulBuffer = 0; - EIOBufferError result = FnTable.Open(pchPathUtf8, mode, unElementSize, unElements, ref pulBuffer); - Marshal.FreeHGlobal(pchPathUtf8); - return result; - } - public EIOBufferError Close(ulong ulBuffer) - { - EIOBufferError result = FnTable.Close(ulBuffer); - return result; - } - public EIOBufferError Read(ulong ulBuffer, IntPtr pDst, uint unBytes, ref uint punRead) - { - punRead = 0; - EIOBufferError result = FnTable.Read(ulBuffer, pDst, unBytes, ref punRead); - return result; - } - public EIOBufferError Write(ulong ulBuffer, IntPtr pSrc, uint unBytes) - { - EIOBufferError result = FnTable.Write(ulBuffer, pSrc, unBytes); - return result; - } - public ulong PropertyContainer(ulong ulBuffer) - { - ulong result = FnTable.PropertyContainer(ulBuffer); - return result; - } - public bool HasReaders(ulong ulBuffer) - { - bool result = FnTable.HasReaders(ulBuffer); - return result; - } - } - - - public class CVRSpatialAnchors - { - IVRSpatialAnchors FnTable; - internal CVRSpatialAnchors(IntPtr pInterface) - { - FnTable = (IVRSpatialAnchors)Marshal.PtrToStructure(pInterface, typeof(IVRSpatialAnchors)); - } - public EVRSpatialAnchorError CreateSpatialAnchorFromDescriptor(string pchDescriptor, ref uint pHandleOut) - { - IntPtr pchDescriptorUtf8 = Utils.ToUtf8(pchDescriptor); - pHandleOut = 0; - EVRSpatialAnchorError result = FnTable.CreateSpatialAnchorFromDescriptor(pchDescriptorUtf8, ref pHandleOut); - Marshal.FreeHGlobal(pchDescriptorUtf8); - return result; - } - public EVRSpatialAnchorError CreateSpatialAnchorFromPose(uint unDeviceIndex, ETrackingUniverseOrigin eOrigin, ref SpatialAnchorPose_t pPose, ref uint pHandleOut) - { - pHandleOut = 0; - EVRSpatialAnchorError result = FnTable.CreateSpatialAnchorFromPose(unDeviceIndex, eOrigin, ref pPose, ref pHandleOut); - return result; - } - public EVRSpatialAnchorError GetSpatialAnchorPose(uint unHandle, ETrackingUniverseOrigin eOrigin, ref SpatialAnchorPose_t pPoseOut) - { - EVRSpatialAnchorError result = FnTable.GetSpatialAnchorPose(unHandle, eOrigin, ref pPoseOut); - return result; - } - public EVRSpatialAnchorError GetSpatialAnchorDescriptor(uint unHandle, System.Text.StringBuilder pchDescriptorOut, ref uint punDescriptorBufferLenInOut) - { - punDescriptorBufferLenInOut = 0; - EVRSpatialAnchorError result = FnTable.GetSpatialAnchorDescriptor(unHandle, pchDescriptorOut, ref punDescriptorBufferLenInOut); - return result; - } - } - - - public class CVRDebug - { - IVRDebug FnTable; - internal CVRDebug(IntPtr pInterface) - { - FnTable = (IVRDebug)Marshal.PtrToStructure(pInterface, typeof(IVRDebug)); - } - public EVRDebugError EmitVrProfilerEvent(string pchMessage) - { - IntPtr pchMessageUtf8 = Utils.ToUtf8(pchMessage); - EVRDebugError result = FnTable.EmitVrProfilerEvent(pchMessageUtf8); - Marshal.FreeHGlobal(pchMessageUtf8); - return result; - } - public EVRDebugError BeginVrProfilerEvent(ref ulong pHandleOut) - { - pHandleOut = 0; - EVRDebugError result = FnTable.BeginVrProfilerEvent(ref pHandleOut); - return result; - } - public EVRDebugError FinishVrProfilerEvent(ulong hHandle, string pchMessage) - { - IntPtr pchMessageUtf8 = Utils.ToUtf8(pchMessage); - EVRDebugError result = FnTable.FinishVrProfilerEvent(hHandle, pchMessageUtf8); - Marshal.FreeHGlobal(pchMessageUtf8); - return result; - } - public uint DriverDebugRequest(uint unDeviceIndex, string pchRequest, System.Text.StringBuilder pchResponseBuffer, uint unResponseBufferSize) - { - IntPtr pchRequestUtf8 = Utils.ToUtf8(pchRequest); - uint result = FnTable.DriverDebugRequest(unDeviceIndex, pchRequestUtf8, pchResponseBuffer, unResponseBufferSize); - Marshal.FreeHGlobal(pchRequestUtf8); - return result; - } - } +[StructLayout(LayoutKind.Sequential)] +public struct IVRSystem +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetRecommendedRenderTargetSize(ref uint pnWidth, ref uint pnHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRecommendedRenderTargetSize GetRecommendedRenderTargetSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdMatrix44_t _GetProjectionMatrix(EVREye eEye, float fNearZ, float fFarZ); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetProjectionMatrix GetProjectionMatrix; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetProjectionRaw(EVREye eEye, ref float pfLeft, ref float pfRight, ref float pfTop, ref float pfBottom); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetProjectionRaw GetProjectionRaw; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _ComputeDistortion(EVREye eEye, float fU, float fV, ref DistortionCoordinates_t pDistortionCoordinates); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ComputeDistortion ComputeDistortion; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdMatrix34_t _GetEyeToHeadTransform(EVREye eEye); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetEyeToHeadTransform GetEyeToHeadTransform; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetTimeSinceLastVsync(ref float pfSecondsSinceLastVsync, ref ulong pulFrameCounter); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTimeSinceLastVsync GetTimeSinceLastVsync; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate int _GetD3D9AdapterIndex(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetD3D9AdapterIndex GetD3D9AdapterIndex; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetDXGIOutputInfo(ref int pnAdapterIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDXGIOutputInfo GetDXGIOutputInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetOutputDevice(ref ulong pnDevice, ETextureType textureType, IntPtr pInstance); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOutputDevice GetOutputDevice; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsDisplayOnDesktop(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsDisplayOnDesktop IsDisplayOnDesktop; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _SetDisplayVisibility([MarshalAs(UnmanagedType.I1)] bool bIsVisibleOnDesktop); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetDisplayVisibility SetDisplayVisibility; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, [In, Out] TrackedDevicePose_t[] pTrackedDevicePoseArray, uint unTrackedDevicePoseArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDeviceToAbsoluteTrackingPose GetDeviceToAbsoluteTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdMatrix34_t _GetSeatedZeroPoseToStandingAbsoluteTrackingPose(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSeatedZeroPoseToStandingAbsoluteTrackingPose GetSeatedZeroPoseToStandingAbsoluteTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdMatrix34_t _GetRawZeroPoseToStandingAbsoluteTrackingPose(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRawZeroPoseToStandingAbsoluteTrackingPose GetRawZeroPoseToStandingAbsoluteTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetSortedTrackedDeviceIndicesOfClass(ETrackedDeviceClass eTrackedDeviceClass, [In, Out] uint[] punTrackedDeviceIndexArray, uint unTrackedDeviceIndexArrayCount, uint unRelativeToTrackedDeviceIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSortedTrackedDeviceIndicesOfClass GetSortedTrackedDeviceIndicesOfClass; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EDeviceActivityLevel _GetTrackedDeviceActivityLevel(uint unDeviceId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTrackedDeviceActivityLevel GetTrackedDeviceActivityLevel; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ApplyTransform(ref TrackedDevicePose_t pOutputPose, ref TrackedDevicePose_t pTrackedDevicePose, ref HmdMatrix34_t pTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ApplyTransform ApplyTransform; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole unDeviceType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTrackedDeviceIndexForControllerRole GetTrackedDeviceIndexForControllerRole; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedControllerRole _GetControllerRoleForTrackedDeviceIndex(uint unDeviceIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetControllerRoleForTrackedDeviceIndex GetControllerRoleForTrackedDeviceIndex; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedDeviceClass _GetTrackedDeviceClass(uint unDeviceIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTrackedDeviceClass GetTrackedDeviceClass; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsTrackedDeviceConnected(uint unDeviceIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsTrackedDeviceConnected IsTrackedDeviceConnected; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetBoolTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBoolTrackedDeviceProperty GetBoolTrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate float _GetFloatTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetFloatTrackedDeviceProperty GetFloatTrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate int _GetInt32TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetInt32TrackedDeviceProperty GetInt32TrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _GetUint64TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetUint64TrackedDeviceProperty GetUint64TrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdMatrix34_t _GetMatrix34TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetMatrix34TrackedDeviceProperty GetMatrix34TrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetArrayTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, uint propType, IntPtr pBuffer, uint unBufferSize, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetArrayTrackedDeviceProperty GetArrayTrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetStringTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, System.Text.StringBuilder pchValue, uint unBufferSize, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetStringTrackedDeviceProperty GetStringTrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetPropErrorNameFromEnum(ETrackedPropertyError error); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPropErrorNameFromEnum GetPropErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _PollNextEvent(ref VREvent_t pEvent, uint uncbVREvent); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PollNextEvent PollNextEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _PollNextEventWithPose(ETrackingUniverseOrigin eOrigin, ref VREvent_t pEvent, uint uncbVREvent, ref TrackedDevicePose_t pTrackedDevicePose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PollNextEventWithPose PollNextEventWithPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _PollNextEventWithPoseAndOverlays(ETrackingUniverseOrigin eOrigin, ref VREvent_t pEvent, uint uncbVREvent, ref TrackedDevicePose_t pTrackedDevicePose, ref ulong pulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PollNextEventWithPoseAndOverlays PollNextEventWithPoseAndOverlays; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetEventTypeNameFromEnum(EVREventType eType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetEventTypeNameFromEnum GetEventTypeNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HiddenAreaMesh_t _GetHiddenAreaMesh(EVREye eEye, EHiddenAreaMeshType type); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHiddenAreaMesh GetHiddenAreaMesh; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetControllerState(uint unControllerDeviceIndex, ref VRControllerState_t pControllerState, uint unControllerStateSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetControllerState GetControllerState; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetControllerStateWithPose(ETrackingUniverseOrigin eOrigin, uint unControllerDeviceIndex, ref VRControllerState_t pControllerState, uint unControllerStateSize, ref TrackedDevicePose_t pTrackedDevicePose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetControllerStateWithPose GetControllerStateWithPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _TriggerHapticPulse(uint unControllerDeviceIndex, uint unAxisId, ushort usDurationMicroSec); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _TriggerHapticPulse TriggerHapticPulse; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetButtonIdNameFromEnum(EVRButtonId eButtonId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetButtonIdNameFromEnum GetButtonIdNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetControllerAxisTypeNameFromEnum(EVRControllerAxisType eAxisType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetControllerAxisTypeNameFromEnum GetControllerAxisTypeNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsInputAvailable(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsInputAvailable IsInputAvailable; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsSteamVRDrawingControllers(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsSteamVRDrawingControllers IsSteamVRDrawingControllers; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _ShouldApplicationPause(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShouldApplicationPause ShouldApplicationPause; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _ShouldApplicationReduceRenderingWork(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShouldApplicationReduceRenderingWork ShouldApplicationReduceRenderingWork; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRFirmwareError _PerformFirmwareUpdate(uint unDeviceIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PerformFirmwareUpdate PerformFirmwareUpdate; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _AcknowledgeQuit_Exiting(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AcknowledgeQuit_Exiting AcknowledgeQuit_Exiting; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetAppContainerFilePaths(System.Text.StringBuilder pchBuffer, uint unBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetAppContainerFilePaths GetAppContainerFilePaths; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetRuntimeVersion(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRuntimeVersion GetRuntimeVersion; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRExtendedDisplay +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetWindowBounds(ref int pnX, ref int pnY, ref uint pnWidth, ref uint pnHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWindowBounds GetWindowBounds; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetEyeOutputViewport(EVREye eEye, ref uint pnX, ref uint pnY, ref uint pnWidth, ref uint pnHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetEyeOutputViewport GetEyeOutputViewport; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetDXGIOutputInfo(ref int pnAdapterIndex, ref int pnAdapterOutputIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDXGIOutputInfo GetDXGIOutputInfo; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRTrackedCamera +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetCameraErrorNameFromEnum(EVRTrackedCameraError eCameraError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCameraErrorNameFromEnum GetCameraErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _HasCamera(uint nDeviceIndex, [MarshalAs(UnmanagedType.I1)] ref bool pHasCamera); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HasCamera HasCamera; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetCameraFrameSize(uint nDeviceIndex, EVRTrackedCameraFrameType eFrameType, ref uint pnWidth, ref uint pnHeight, ref uint pnFrameBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCameraFrameSize GetCameraFrameSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetCameraIntrinsics(uint nDeviceIndex, uint nCameraIndex, EVRTrackedCameraFrameType eFrameType, ref HmdVector2_t pFocalLength, ref HmdVector2_t pCenter); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCameraIntrinsics GetCameraIntrinsics; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetCameraProjection(uint nDeviceIndex, uint nCameraIndex, EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, ref HmdMatrix44_t pProjection); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCameraProjection GetCameraProjection; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _AcquireVideoStreamingService(uint nDeviceIndex, ref ulong pHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AcquireVideoStreamingService AcquireVideoStreamingService; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _ReleaseVideoStreamingService(ulong hTrackedCamera); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseVideoStreamingService ReleaseVideoStreamingService; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetVideoStreamFrameBuffer(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, IntPtr pFrameBuffer, uint nFrameBufferSize, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVideoStreamFrameBuffer GetVideoStreamFrameBuffer; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetVideoStreamTextureSize(uint nDeviceIndex, EVRTrackedCameraFrameType eFrameType, ref VRTextureBounds_t pTextureBounds, ref uint pnWidth, ref uint pnHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVideoStreamTextureSize GetVideoStreamTextureSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetVideoStreamTextureD3D11(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, IntPtr pD3D11DeviceOrResource, ref IntPtr ppD3D11ShaderResourceView, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVideoStreamTextureD3D11 GetVideoStreamTextureD3D11; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetVideoStreamTextureGL(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, ref uint pglTextureId, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVideoStreamTextureGL GetVideoStreamTextureGL; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _ReleaseVideoStreamTextureGL(ulong hTrackedCamera, uint glTextureId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseVideoStreamTextureGL ReleaseVideoStreamTextureGL; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetCameraTrackingSpace(ETrackingUniverseOrigin eUniverse); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetCameraTrackingSpace SetCameraTrackingSpace; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackingUniverseOrigin _GetCameraTrackingSpace(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCameraTrackingSpace GetCameraTrackingSpace; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRApplications +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _AddApplicationManifest(IntPtr pchApplicationManifestFullPath, [MarshalAs(UnmanagedType.I1)] bool bTemporary); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AddApplicationManifest AddApplicationManifest; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _RemoveApplicationManifest(IntPtr pchApplicationManifestFullPath); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RemoveApplicationManifest RemoveApplicationManifest; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsApplicationInstalled(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsApplicationInstalled IsApplicationInstalled; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetApplicationCount(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationCount GetApplicationCount; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _GetApplicationKeyByIndex(uint unApplicationIndex, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationKeyByIndex GetApplicationKeyByIndex; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _GetApplicationKeyByProcessId(uint unProcessId, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationKeyByProcessId GetApplicationKeyByProcessId; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _LaunchApplication(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LaunchApplication LaunchApplication; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _LaunchTemplateApplication(IntPtr pchTemplateAppKey, IntPtr pchNewAppKey, [In, Out] AppOverrideKeys_t[] pKeys, uint unKeys); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LaunchTemplateApplication LaunchTemplateApplication; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _LaunchApplicationFromMimeType(IntPtr pchMimeType, IntPtr pchArgs); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LaunchApplicationFromMimeType LaunchApplicationFromMimeType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _LaunchDashboardOverlay(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LaunchDashboardOverlay LaunchDashboardOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _CancelApplicationLaunch(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CancelApplicationLaunch CancelApplicationLaunch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _IdentifyApplication(uint unProcessId, IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IdentifyApplication IdentifyApplication; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetApplicationProcessId(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationProcessId GetApplicationProcessId; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetApplicationsErrorNameFromEnum(EVRApplicationError error); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationsErrorNameFromEnum GetApplicationsErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetApplicationPropertyString(IntPtr pchAppKey, EVRApplicationProperty eProperty, System.Text.StringBuilder pchPropertyValueBuffer, uint unPropertyValueBufferLen, ref EVRApplicationError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationPropertyString GetApplicationPropertyString; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetApplicationPropertyBool(IntPtr pchAppKey, EVRApplicationProperty eProperty, ref EVRApplicationError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationPropertyBool GetApplicationPropertyBool; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _GetApplicationPropertyUint64(IntPtr pchAppKey, EVRApplicationProperty eProperty, ref EVRApplicationError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationPropertyUint64 GetApplicationPropertyUint64; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _SetApplicationAutoLaunch(IntPtr pchAppKey, [MarshalAs(UnmanagedType.I1)] bool bAutoLaunch); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetApplicationAutoLaunch SetApplicationAutoLaunch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetApplicationAutoLaunch(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationAutoLaunch GetApplicationAutoLaunch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _SetDefaultApplicationForMimeType(IntPtr pchAppKey, IntPtr pchMimeType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetDefaultApplicationForMimeType SetDefaultApplicationForMimeType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetDefaultApplicationForMimeType(IntPtr pchMimeType, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDefaultApplicationForMimeType GetDefaultApplicationForMimeType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetApplicationSupportedMimeTypes(IntPtr pchAppKey, System.Text.StringBuilder pchMimeTypesBuffer, uint unMimeTypesBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationSupportedMimeTypes GetApplicationSupportedMimeTypes; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetApplicationsThatSupportMimeType(IntPtr pchMimeType, System.Text.StringBuilder pchAppKeysThatSupportBuffer, uint unAppKeysThatSupportBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationsThatSupportMimeType GetApplicationsThatSupportMimeType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetApplicationLaunchArguments(uint unHandle, System.Text.StringBuilder pchArgs, uint unArgs); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationLaunchArguments GetApplicationLaunchArguments; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _GetStartingApplication(System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetStartingApplication GetStartingApplication; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRSceneApplicationState _GetSceneApplicationState(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSceneApplicationState GetSceneApplicationState; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _PerformApplicationPrelaunchCheck(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PerformApplicationPrelaunchCheck PerformApplicationPrelaunchCheck; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetSceneApplicationStateNameFromEnum(EVRSceneApplicationState state); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSceneApplicationStateNameFromEnum GetSceneApplicationStateNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _LaunchInternalProcess(IntPtr pchBinaryPath, IntPtr pchArguments, IntPtr pchWorkingDirectory); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LaunchInternalProcess LaunchInternalProcess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetCurrentSceneProcessId(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCurrentSceneProcessId GetCurrentSceneProcessId; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRChaperone +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ChaperoneCalibrationState _GetCalibrationState(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCalibrationState GetCalibrationState; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetPlayAreaSize(ref float pSizeX, ref float pSizeZ); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPlayAreaSize GetPlayAreaSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetPlayAreaRect(ref HmdQuad_t rect); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPlayAreaRect GetPlayAreaRect; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ReloadInfo(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReloadInfo ReloadInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetSceneColor(HmdColor_t color); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetSceneColor SetSceneColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetBoundsColor(ref HmdColor_t pOutputColorArray, int nNumOutputColors, float flCollisionBoundsFadeDistance, ref HmdColor_t pOutputCameraColor); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBoundsColor GetBoundsColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _AreBoundsVisible(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AreBoundsVisible AreBoundsVisible; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ForceBoundsVisible([MarshalAs(UnmanagedType.I1)] bool bForce); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ForceBoundsVisible ForceBoundsVisible; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ResetZeroPose(ETrackingUniverseOrigin eTrackingUniverseOrigin); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ResetZeroPose ResetZeroPose; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRChaperoneSetup +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _CommitWorkingCopy(EChaperoneConfigFile configFile); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CommitWorkingCopy CommitWorkingCopy; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _RevertWorkingCopy(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RevertWorkingCopy RevertWorkingCopy; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetWorkingPlayAreaSize(ref float pSizeX, ref float pSizeZ); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWorkingPlayAreaSize GetWorkingPlayAreaSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetWorkingPlayAreaRect(ref HmdQuad_t rect); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWorkingPlayAreaRect GetWorkingPlayAreaRect; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetWorkingCollisionBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, ref uint punQuadsCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWorkingCollisionBoundsInfo GetWorkingCollisionBoundsInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetLiveCollisionBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, ref uint punQuadsCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLiveCollisionBoundsInfo GetLiveCollisionBoundsInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWorkingSeatedZeroPoseToRawTrackingPose GetWorkingSeatedZeroPoseToRawTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatStandingZeroPoseToRawTrackingPose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWorkingStandingZeroPoseToRawTrackingPose GetWorkingStandingZeroPoseToRawTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetWorkingPlayAreaSize(float sizeX, float sizeZ); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetWorkingPlayAreaSize SetWorkingPlayAreaSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetWorkingCollisionBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, uint unQuadsCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetWorkingCollisionBoundsInfo SetWorkingCollisionBoundsInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetWorkingPerimeter([In, Out] HmdVector2_t[] pPointBuffer, uint unPointCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetWorkingPerimeter SetWorkingPerimeter; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatSeatedZeroPoseToRawTrackingPose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetWorkingSeatedZeroPoseToRawTrackingPose SetWorkingSeatedZeroPoseToRawTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatStandingZeroPoseToRawTrackingPose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetWorkingStandingZeroPoseToRawTrackingPose SetWorkingStandingZeroPoseToRawTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ReloadFromDisk(EChaperoneConfigFile configFile); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReloadFromDisk ReloadFromDisk; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetLiveSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLiveSeatedZeroPoseToRawTrackingPose GetLiveSeatedZeroPoseToRawTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _ExportLiveToBuffer(System.Text.StringBuilder pBuffer, ref uint pnBufferLength); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ExportLiveToBuffer ExportLiveToBuffer; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _ImportFromBufferToWorking(IntPtr pBuffer, uint nImportFlags); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ImportFromBufferToWorking ImportFromBufferToWorking; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ShowWorkingSetPreview(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowWorkingSetPreview ShowWorkingSetPreview; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _HideWorkingSetPreview(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HideWorkingSetPreview HideWorkingSetPreview; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _RoomSetupStarting(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RoomSetupStarting RoomSetupStarting; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRCompositor +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetTrackingSpace(ETrackingUniverseOrigin eOrigin); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetTrackingSpace SetTrackingSpace; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackingUniverseOrigin _GetTrackingSpace(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTrackingSpace GetTrackingSpace; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _WaitGetPoses([In, Out] TrackedDevicePose_t[] pRenderPoseArray, uint unRenderPoseArrayCount, [In, Out] TrackedDevicePose_t[] pGamePoseArray, uint unGamePoseArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _WaitGetPoses WaitGetPoses; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetLastPoses([In, Out] TrackedDevicePose_t[] pRenderPoseArray, uint unRenderPoseArrayCount, [In, Out] TrackedDevicePose_t[] pGamePoseArray, uint unGamePoseArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLastPoses GetLastPoses; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetLastPoseForTrackedDeviceIndex(uint unDeviceIndex, ref TrackedDevicePose_t pOutputPose, ref TrackedDevicePose_t pOutputGamePose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLastPoseForTrackedDeviceIndex GetLastPoseForTrackedDeviceIndex; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetSubmitTexture(ref Texture_t pOutTexture, [MarshalAs(UnmanagedType.I1)] ref bool pNeedsFlush, EVRCompositorTextureUsage eUsage, ref Texture_t pTexture, ref VRTextureBounds_t pBounds, EVRSubmitFlags nSubmitFlags); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSubmitTexture GetSubmitTexture; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _Submit(EVREye eEye, ref Texture_t pTexture, ref VRTextureBounds_t pBounds, EVRSubmitFlags nSubmitFlags); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Submit Submit; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _SubmitWithArrayIndex(EVREye eEye, ref Texture_t pTexture, uint unTextureArrayIndex, ref VRTextureBounds_t pBounds, EVRSubmitFlags nSubmitFlags); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SubmitWithArrayIndex SubmitWithArrayIndex; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ClearLastSubmittedFrame(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ClearLastSubmittedFrame ClearLastSubmittedFrame; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _PostPresentHandoff(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PostPresentHandoff PostPresentHandoff; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetFrameTiming(ref Compositor_FrameTiming pTiming, uint unFramesAgo); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetFrameTiming GetFrameTiming; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetFrameTimings([In, Out] Compositor_FrameTiming[] pTiming, uint nFrames); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetFrameTimings GetFrameTimings; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate float _GetFrameTimeRemaining(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetFrameTimeRemaining GetFrameTimeRemaining; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetCumulativeStats(ref Compositor_CumulativeStats pStats, uint nStatsSizeInBytes); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCumulativeStats GetCumulativeStats; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _FadeToColor(float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, [MarshalAs(UnmanagedType.I1)] bool bBackground); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FadeToColor FadeToColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdColor_t _GetCurrentFadeColor([MarshalAs(UnmanagedType.I1)] bool bBackground); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCurrentFadeColor GetCurrentFadeColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _FadeGrid(float fSeconds, [MarshalAs(UnmanagedType.I1)] bool bFadeGridIn); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FadeGrid FadeGrid; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate float _GetCurrentGridAlpha(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCurrentGridAlpha GetCurrentGridAlpha; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _SetSkyboxOverride([In, Out] Texture_t[] pTextures, uint unTextureCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetSkyboxOverride SetSkyboxOverride; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ClearSkyboxOverride(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ClearSkyboxOverride ClearSkyboxOverride; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _CompositorBringToFront(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CompositorBringToFront CompositorBringToFront; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _CompositorGoToBack(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CompositorGoToBack CompositorGoToBack; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _CompositorQuit(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CompositorQuit CompositorQuit; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsFullscreen(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsFullscreen IsFullscreen; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetCurrentSceneFocusProcess(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCurrentSceneFocusProcess GetCurrentSceneFocusProcess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetLastFrameRenderer(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLastFrameRenderer GetLastFrameRenderer; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _CanRenderScene(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CanRenderScene CanRenderScene; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ShowMirrorWindow(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowMirrorWindow ShowMirrorWindow; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _HideMirrorWindow(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HideMirrorWindow HideMirrorWindow; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsMirrorWindowVisible(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsMirrorWindowVisible IsMirrorWindowVisible; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _CompositorDumpImages(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CompositorDumpImages CompositorDumpImages; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _ShouldAppRenderWithLowResources(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShouldAppRenderWithLowResources ShouldAppRenderWithLowResources; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ForceInterleavedReprojectionOn([MarshalAs(UnmanagedType.I1)] bool bOverride); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ForceInterleavedReprojectionOn ForceInterleavedReprojectionOn; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ForceReconnectProcess(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ForceReconnectProcess ForceReconnectProcess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SuspendRendering([MarshalAs(UnmanagedType.I1)] bool bSuspend); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SuspendRendering SuspendRendering; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetMirrorTextureD3D11(EVREye eEye, IntPtr pD3D11DeviceOrResource, ref IntPtr ppD3D11ShaderResourceView); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetMirrorTextureD3D11 GetMirrorTextureD3D11; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ReleaseMirrorTextureD3D11(IntPtr pD3D11ShaderResourceView); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseMirrorTextureD3D11 ReleaseMirrorTextureD3D11; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetMirrorTextureGL(EVREye eEye, ref uint pglTextureId, IntPtr pglSharedTextureHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetMirrorTextureGL GetMirrorTextureGL; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _ReleaseSharedGLTexture(uint glTextureId, IntPtr glSharedTextureHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseSharedGLTexture ReleaseSharedGLTexture; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _LockGLSharedTextureForAccess(IntPtr glSharedTextureHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LockGLSharedTextureForAccess LockGLSharedTextureForAccess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _UnlockGLSharedTextureForAccess(IntPtr glSharedTextureHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _UnlockGLSharedTextureForAccess UnlockGLSharedTextureForAccess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetVulkanInstanceExtensionsRequired(System.Text.StringBuilder pchValue, uint unBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVulkanInstanceExtensionsRequired GetVulkanInstanceExtensionsRequired; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetVulkanDeviceExtensionsRequired(IntPtr pPhysicalDevice, System.Text.StringBuilder pchValue, uint unBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVulkanDeviceExtensionsRequired GetVulkanDeviceExtensionsRequired; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetExplicitTimingMode(EVRCompositorTimingMode eTimingMode); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetExplicitTimingMode SetExplicitTimingMode; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _SubmitExplicitTimingData(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SubmitExplicitTimingData SubmitExplicitTimingData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsMotionSmoothingEnabled(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsMotionSmoothingEnabled IsMotionSmoothingEnabled; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsMotionSmoothingSupported(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsMotionSmoothingSupported IsMotionSmoothingSupported; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsCurrentSceneFocusAppLoading(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsCurrentSceneFocusAppLoading IsCurrentSceneFocusAppLoading; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _SetStageOverride_Async(IntPtr pchRenderModelPath, ref HmdMatrix34_t pTransform, ref Compositor_StageRenderSettings pRenderSettings, uint nSizeOfRenderSettings); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetStageOverride_Async SetStageOverride_Async; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ClearStageOverride(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ClearStageOverride ClearStageOverride; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetCompositorBenchmarkResults(ref Compositor_BenchmarkResults pBenchmarkResults, uint nSizeOfBenchmarkResults); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCompositorBenchmarkResults GetCompositorBenchmarkResults; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetLastPosePredictionIDs(ref uint pRenderPosePredictionID, ref uint pGamePosePredictionID); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLastPosePredictionIDs GetLastPosePredictionIDs; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetPosesForFrame(uint unPosePredictionID, [In, Out] TrackedDevicePose_t[] pPoseArray, uint unPoseArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPosesForFrame GetPosesForFrame; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVROverlay +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _FindOverlay(IntPtr pchOverlayKey, ref ulong pOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FindOverlay FindOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _CreateOverlay(IntPtr pchOverlayKey, IntPtr pchOverlayName, ref ulong pOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CreateOverlay CreateOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _CreateSubviewOverlay(ulong parentOverlayHandle, IntPtr pchSubviewOverlayKey, IntPtr pchSubviewOverlayName, ref ulong pSubviewOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CreateSubviewOverlay CreateSubviewOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _DestroyOverlay(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _DestroyOverlay DestroyOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetOverlayKey(ulong ulOverlayHandle, System.Text.StringBuilder pchValue, uint unBufferSize, ref EVROverlayError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayKey GetOverlayKey; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetOverlayName(ulong ulOverlayHandle, System.Text.StringBuilder pchValue, uint unBufferSize, ref EVROverlayError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayName GetOverlayName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayName(ulong ulOverlayHandle, IntPtr pchName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayName SetOverlayName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayImageData(ulong ulOverlayHandle, IntPtr pvBuffer, uint unBufferSize, ref uint punWidth, ref uint punHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayImageData GetOverlayImageData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetOverlayErrorNameFromEnum(EVROverlayError error); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayErrorNameFromEnum GetOverlayErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayRenderingPid(ulong ulOverlayHandle, uint unPID); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayRenderingPid SetOverlayRenderingPid; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetOverlayRenderingPid(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayRenderingPid GetOverlayRenderingPid; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayFlag(ulong ulOverlayHandle, VROverlayFlags eOverlayFlag, [MarshalAs(UnmanagedType.I1)] bool bEnabled); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayFlag SetOverlayFlag; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayFlag(ulong ulOverlayHandle, VROverlayFlags eOverlayFlag, [MarshalAs(UnmanagedType.I1)] ref bool pbEnabled); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayFlag GetOverlayFlag; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayFlags(ulong ulOverlayHandle, ref uint pFlags); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayFlags GetOverlayFlags; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayColor(ulong ulOverlayHandle, float fRed, float fGreen, float fBlue); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayColor SetOverlayColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayColor(ulong ulOverlayHandle, ref float pfRed, ref float pfGreen, ref float pfBlue); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayColor GetOverlayColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayAlpha(ulong ulOverlayHandle, float fAlpha); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayAlpha SetOverlayAlpha; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayAlpha(ulong ulOverlayHandle, ref float pfAlpha); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayAlpha GetOverlayAlpha; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTexelAspect(ulong ulOverlayHandle, float fTexelAspect); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTexelAspect SetOverlayTexelAspect; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTexelAspect(ulong ulOverlayHandle, ref float pfTexelAspect); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTexelAspect GetOverlayTexelAspect; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlaySortOrder(ulong ulOverlayHandle, uint unSortOrder); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlaySortOrder SetOverlaySortOrder; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlaySortOrder(ulong ulOverlayHandle, ref uint punSortOrder); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlaySortOrder GetOverlaySortOrder; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayWidthInMeters(ulong ulOverlayHandle, float fWidthInMeters); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayWidthInMeters SetOverlayWidthInMeters; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayWidthInMeters(ulong ulOverlayHandle, ref float pfWidthInMeters); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayWidthInMeters GetOverlayWidthInMeters; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayCurvature(ulong ulOverlayHandle, float fCurvature); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayCurvature SetOverlayCurvature; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayCurvature(ulong ulOverlayHandle, ref float pfCurvature); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayCurvature GetOverlayCurvature; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayPreCurvePitch(ulong ulOverlayHandle, float fRadians); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayPreCurvePitch SetOverlayPreCurvePitch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayPreCurvePitch(ulong ulOverlayHandle, ref float pfRadians); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayPreCurvePitch GetOverlayPreCurvePitch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTextureColorSpace(ulong ulOverlayHandle, EColorSpace eTextureColorSpace); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTextureColorSpace SetOverlayTextureColorSpace; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTextureColorSpace(ulong ulOverlayHandle, ref EColorSpace peTextureColorSpace); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTextureColorSpace GetOverlayTextureColorSpace; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTextureBounds(ulong ulOverlayHandle, ref VRTextureBounds_t pOverlayTextureBounds); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTextureBounds SetOverlayTextureBounds; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTextureBounds(ulong ulOverlayHandle, ref VRTextureBounds_t pOverlayTextureBounds); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTextureBounds GetOverlayTextureBounds; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTransformType(ulong ulOverlayHandle, ref VROverlayTransformType peTransformType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTransformType GetOverlayTransformType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTransformAbsolute(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTransformAbsolute SetOverlayTransformAbsolute; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTransformAbsolute(ulong ulOverlayHandle, ref ETrackingUniverseOrigin peTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTransformAbsolute GetOverlayTransformAbsolute; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle, uint unTrackedDevice, ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTransformTrackedDeviceRelative SetOverlayTransformTrackedDeviceRelative; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle, ref uint punTrackedDevice, ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTransformTrackedDeviceRelative GetOverlayTransformTrackedDeviceRelative; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle, uint unDeviceIndex, IntPtr pchComponentName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTransformTrackedDeviceComponent SetOverlayTransformTrackedDeviceComponent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle, ref uint punDeviceIndex, System.Text.StringBuilder pchComponentName, uint unComponentNameSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTransformTrackedDeviceComponent GetOverlayTransformTrackedDeviceComponent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTransformCursor(ulong ulCursorOverlayHandle, ref HmdVector2_t pvHotspot); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTransformCursor SetOverlayTransformCursor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTransformCursor(ulong ulOverlayHandle, ref HmdVector2_t pvHotspot); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTransformCursor GetOverlayTransformCursor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTransformProjection(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform, ref VROverlayProjection_t pProjection, EVREye eEye); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTransformProjection SetOverlayTransformProjection; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetSubviewPosition(ulong ulOverlayHandle, float fX, float fY); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetSubviewPosition SetSubviewPosition; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ShowOverlay(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowOverlay ShowOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _HideOverlay(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HideOverlay HideOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsOverlayVisible(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsOverlayVisible IsOverlayVisible; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetTransformForOverlayCoordinates(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, HmdVector2_t coordinatesInOverlay, ref HmdMatrix34_t pmatTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTransformForOverlayCoordinates GetTransformForOverlayCoordinates; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _WaitFrameSync(uint nTimeoutMs); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _WaitFrameSync WaitFrameSync; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _PollNextOverlayEvent(ulong ulOverlayHandle, ref VREvent_t pEvent, uint uncbVREvent); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PollNextOverlayEvent PollNextOverlayEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayInputMethod(ulong ulOverlayHandle, ref VROverlayInputMethod peInputMethod); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayInputMethod GetOverlayInputMethod; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayInputMethod(ulong ulOverlayHandle, VROverlayInputMethod eInputMethod); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayInputMethod SetOverlayInputMethod; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayMouseScale(ulong ulOverlayHandle, ref HmdVector2_t pvecMouseScale); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayMouseScale GetOverlayMouseScale; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayMouseScale(ulong ulOverlayHandle, ref HmdVector2_t pvecMouseScale); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayMouseScale SetOverlayMouseScale; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _ComputeOverlayIntersection(ulong ulOverlayHandle, ref VROverlayIntersectionParams_t pParams, ref VROverlayIntersectionResults_t pResults); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ComputeOverlayIntersection ComputeOverlayIntersection; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsHoverTargetOverlay(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsHoverTargetOverlay IsHoverTargetOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayIntersectionMask(ulong ulOverlayHandle, ref VROverlayIntersectionMaskPrimitive_t pMaskPrimitives, uint unNumMaskPrimitives, uint unPrimitiveSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayIntersectionMask SetOverlayIntersectionMask; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _TriggerLaserMouseHapticVibration(ulong ulOverlayHandle, float fDurationSeconds, float fFrequency, float fAmplitude); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _TriggerLaserMouseHapticVibration TriggerLaserMouseHapticVibration; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayCursor(ulong ulOverlayHandle, ulong ulCursorHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayCursor SetOverlayCursor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayCursorPositionOverride(ulong ulOverlayHandle, ref HmdVector2_t pvCursor); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayCursorPositionOverride SetOverlayCursorPositionOverride; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ClearOverlayCursorPositionOverride(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ClearOverlayCursorPositionOverride ClearOverlayCursorPositionOverride; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTexture(ulong ulOverlayHandle, ref Texture_t pTexture); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTexture SetOverlayTexture; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ClearOverlayTexture(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ClearOverlayTexture ClearOverlayTexture; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayRaw(ulong ulOverlayHandle, IntPtr pvBuffer, uint unWidth, uint unHeight, uint unBytesPerPixel); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayRaw SetOverlayRaw; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayFromFile(ulong ulOverlayHandle, IntPtr pchFilePath); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayFromFile SetOverlayFromFile; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTexture(ulong ulOverlayHandle, ref IntPtr pNativeTextureHandle, IntPtr pNativeTextureRef, ref uint pWidth, ref uint pHeight, ref uint pNativeFormat, ref ETextureType pAPIType, ref EColorSpace pColorSpace, ref VRTextureBounds_t pTextureBounds); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTexture GetOverlayTexture; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ReleaseNativeOverlayHandle(ulong ulOverlayHandle, IntPtr pNativeTextureHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseNativeOverlayHandle ReleaseNativeOverlayHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTextureSize(ulong ulOverlayHandle, ref uint pWidth, ref uint pHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTextureSize GetOverlayTextureSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _CreateDashboardOverlay(IntPtr pchOverlayKey, IntPtr pchOverlayFriendlyName, ref ulong pMainHandle, ref ulong pThumbnailHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CreateDashboardOverlay CreateDashboardOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsDashboardVisible(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsDashboardVisible IsDashboardVisible; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsActiveDashboardOverlay(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsActiveDashboardOverlay IsActiveDashboardOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetDashboardOverlaySceneProcess(ulong ulOverlayHandle, uint unProcessId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetDashboardOverlaySceneProcess SetDashboardOverlaySceneProcess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetDashboardOverlaySceneProcess(ulong ulOverlayHandle, ref uint punProcessId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDashboardOverlaySceneProcess GetDashboardOverlaySceneProcess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ShowDashboard(IntPtr pchOverlayToShow); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowDashboard ShowDashboard; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetPrimaryDashboardDevice(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPrimaryDashboardDevice GetPrimaryDashboardDevice; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ShowKeyboard(int eInputMode, int eLineInputMode, uint unFlags, IntPtr pchDescription, uint unCharMax, IntPtr pchExistingText, ulong uUserValue); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowKeyboard ShowKeyboard; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ShowKeyboardForOverlay(ulong ulOverlayHandle, int eInputMode, int eLineInputMode, uint unFlags, IntPtr pchDescription, uint unCharMax, IntPtr pchExistingText, ulong uUserValue); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowKeyboardForOverlay ShowKeyboardForOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetKeyboardText(System.Text.StringBuilder pchText, uint cchText); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetKeyboardText GetKeyboardText; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _HideKeyboard(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HideKeyboard HideKeyboard; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetKeyboardTransformAbsolute(ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToKeyboardTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetKeyboardTransformAbsolute SetKeyboardTransformAbsolute; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetKeyboardPositionForOverlay(ulong ulOverlayHandle, HmdRect2_t avoidRect); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetKeyboardPositionForOverlay SetKeyboardPositionForOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate VRMessageOverlayResponse _ShowMessageOverlay(IntPtr pchText, IntPtr pchCaption, IntPtr pchButton0Text, IntPtr pchButton1Text, IntPtr pchButton2Text, IntPtr pchButton3Text); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowMessageOverlay ShowMessageOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _CloseMessageOverlay(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CloseMessageOverlay CloseMessageOverlay; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVROverlayView +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _AcquireOverlayView(ulong ulOverlayHandle, ref VRNativeDevice_t pNativeDevice, ref VROverlayView_t pOverlayView, uint unOverlayViewSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AcquireOverlayView AcquireOverlayView; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ReleaseOverlayView(ref VROverlayView_t pOverlayView); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseOverlayView ReleaseOverlayView; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _PostOverlayEvent(ulong ulOverlayHandle, ref VREvent_t pvrEvent); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PostOverlayEvent PostOverlayEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsViewingPermitted(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsViewingPermitted IsViewingPermitted; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRHeadsetView +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetHeadsetViewSize(uint nWidth, uint nHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetHeadsetViewSize SetHeadsetViewSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetHeadsetViewSize(ref uint pnWidth, ref uint pnHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHeadsetViewSize GetHeadsetViewSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetHeadsetViewMode(uint eHeadsetViewMode); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetHeadsetViewMode SetHeadsetViewMode; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetHeadsetViewMode(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHeadsetViewMode GetHeadsetViewMode; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetHeadsetViewCropped([MarshalAs(UnmanagedType.I1)] bool bCropped); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetHeadsetViewCropped SetHeadsetViewCropped; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetHeadsetViewCropped(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHeadsetViewCropped GetHeadsetViewCropped; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate float _GetHeadsetViewAspectRatio(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHeadsetViewAspectRatio GetHeadsetViewAspectRatio; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetHeadsetViewBlendRange(float flStartPct, float flEndPct); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetHeadsetViewBlendRange SetHeadsetViewBlendRange; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetHeadsetViewBlendRange(ref float pStartPct, ref float pEndPct); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHeadsetViewBlendRange GetHeadsetViewBlendRange; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRRenderModels +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRRenderModelError _LoadRenderModel_Async(IntPtr pchRenderModelName, ref IntPtr ppRenderModel); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LoadRenderModel_Async LoadRenderModel_Async; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _FreeRenderModel(IntPtr pRenderModel); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FreeRenderModel FreeRenderModel; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRRenderModelError _LoadTexture_Async(int textureId, ref IntPtr ppTexture); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LoadTexture_Async LoadTexture_Async; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _FreeTexture(IntPtr pTexture); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FreeTexture FreeTexture; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRRenderModelError _LoadTextureD3D11_Async(int textureId, IntPtr pD3D11Device, ref IntPtr ppD3D11Texture2D); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LoadTextureD3D11_Async LoadTextureD3D11_Async; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRRenderModelError _LoadIntoTextureD3D11_Async(int textureId, IntPtr pDstTexture); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LoadIntoTextureD3D11_Async LoadIntoTextureD3D11_Async; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _FreeTextureD3D11(IntPtr pD3D11Texture2D); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FreeTextureD3D11 FreeTextureD3D11; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetRenderModelName(uint unRenderModelIndex, System.Text.StringBuilder pchRenderModelName, uint unRenderModelNameLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRenderModelName GetRenderModelName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetRenderModelCount(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRenderModelCount GetRenderModelCount; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetComponentCount(IntPtr pchRenderModelName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentCount GetComponentCount; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetComponentName(IntPtr pchRenderModelName, uint unComponentIndex, System.Text.StringBuilder pchComponentName, uint unComponentNameLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentName GetComponentName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _GetComponentButtonMask(IntPtr pchRenderModelName, IntPtr pchComponentName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentButtonMask GetComponentButtonMask; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetComponentRenderModelName(IntPtr pchRenderModelName, IntPtr pchComponentName, System.Text.StringBuilder pchComponentRenderModelName, uint unComponentRenderModelNameLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentRenderModelName GetComponentRenderModelName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetComponentStateForDevicePath(IntPtr pchRenderModelName, IntPtr pchComponentName, ulong devicePath, ref RenderModel_ControllerMode_State_t pState, ref RenderModel_ComponentState_t pComponentState); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentStateForDevicePath GetComponentStateForDevicePath; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetComponentState(IntPtr pchRenderModelName, IntPtr pchComponentName, ref VRControllerState_t pControllerState, ref RenderModel_ControllerMode_State_t pState, ref RenderModel_ComponentState_t pComponentState); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentState GetComponentState; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _RenderModelHasComponent(IntPtr pchRenderModelName, IntPtr pchComponentName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RenderModelHasComponent RenderModelHasComponent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetRenderModelThumbnailURL(IntPtr pchRenderModelName, System.Text.StringBuilder pchThumbnailURL, uint unThumbnailURLLen, ref EVRRenderModelError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRenderModelThumbnailURL GetRenderModelThumbnailURL; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetRenderModelOriginalPath(IntPtr pchRenderModelName, System.Text.StringBuilder pchOriginalPath, uint unOriginalPathLen, ref EVRRenderModelError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRenderModelOriginalPath GetRenderModelOriginalPath; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetRenderModelErrorNameFromEnum(EVRRenderModelError error); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRenderModelErrorNameFromEnum GetRenderModelErrorNameFromEnum; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRNotifications +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRNotificationError _CreateNotification(ulong ulOverlayHandle, ulong ulUserValue, EVRNotificationType type, IntPtr pchText, EVRNotificationStyle style, ref NotificationBitmap_t pImage, ref uint pNotificationId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CreateNotification CreateNotification; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRNotificationError _RemoveNotification(uint notificationId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RemoveNotification RemoveNotification; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRSettings +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetSettingsErrorNameFromEnum(EVRSettingsError eError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSettingsErrorNameFromEnum GetSettingsErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetBool(IntPtr pchSection, IntPtr pchSettingsKey, [MarshalAs(UnmanagedType.I1)] bool bValue, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetBool SetBool; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetInt32(IntPtr pchSection, IntPtr pchSettingsKey, int nValue, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetInt32 SetInt32; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetFloat(IntPtr pchSection, IntPtr pchSettingsKey, float flValue, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetFloat SetFloat; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetString(IntPtr pchSection, IntPtr pchSettingsKey, IntPtr pchValue, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetString SetString; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetBool(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBool GetBool; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate int _GetInt32(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetInt32 GetInt32; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate float _GetFloat(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetFloat GetFloat; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetString(IntPtr pchSection, IntPtr pchSettingsKey, System.Text.StringBuilder pchValue, uint unValueLen, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetString GetString; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _RemoveSection(IntPtr pchSection, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RemoveSection RemoveSection; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _RemoveKeyInSection(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RemoveKeyInSection RemoveKeyInSection; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRScreenshots +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotError _RequestScreenshot(ref uint pOutScreenshotHandle, EVRScreenshotType type, IntPtr pchPreviewFilename, IntPtr pchVRFilename); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RequestScreenshot RequestScreenshot; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotError _HookScreenshot([In, Out] EVRScreenshotType[] pSupportedTypes, int numTypes); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HookScreenshot HookScreenshot; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotType _GetScreenshotPropertyType(uint screenshotHandle, ref EVRScreenshotError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetScreenshotPropertyType GetScreenshotPropertyType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetScreenshotPropertyFilename(uint screenshotHandle, EVRScreenshotPropertyFilenames filenameType, System.Text.StringBuilder pchFilename, uint cchFilename, ref EVRScreenshotError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetScreenshotPropertyFilename GetScreenshotPropertyFilename; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotError _UpdateScreenshotProgress(uint screenshotHandle, float flProgress); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _UpdateScreenshotProgress UpdateScreenshotProgress; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotError _TakeStereoScreenshot(ref uint pOutScreenshotHandle, IntPtr pchPreviewFilename, IntPtr pchVRFilename); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _TakeStereoScreenshot TakeStereoScreenshot; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotError _SubmitScreenshot(uint screenshotHandle, EVRScreenshotType type, IntPtr pchSourcePreviewFilename, IntPtr pchSourceVRFilename); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SubmitScreenshot SubmitScreenshot; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRResources +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _LoadSharedResource(IntPtr pchResourceName, string pchBuffer, uint unBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LoadSharedResource LoadSharedResource; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetResourceFullPath(IntPtr pchResourceName, IntPtr pchResourceTypeDirectory, System.Text.StringBuilder pchPathBuffer, uint unBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetResourceFullPath GetResourceFullPath; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRDriverManager +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetDriverCount(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDriverCount GetDriverCount; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetDriverName(uint nDriver, System.Text.StringBuilder pchValue, uint unBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDriverName GetDriverName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _GetDriverHandle(IntPtr pchDriverName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDriverHandle GetDriverHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsEnabled(uint nDriver); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsEnabled IsEnabled; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRInput +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _SetActionManifestPath(IntPtr pchActionManifestPath); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetActionManifestPath SetActionManifestPath; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetActionSetHandle(IntPtr pchActionSetName, ref ulong pHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetActionSetHandle GetActionSetHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetActionHandle(IntPtr pchActionName, ref ulong pHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetActionHandle GetActionHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetInputSourceHandle(IntPtr pchInputSourcePath, ref ulong pHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetInputSourceHandle GetInputSourceHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _UpdateActionState([In, Out] VRActiveActionSet_t[] pSets, uint unSizeOfVRSelectedActionSet_t, uint unSetCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _UpdateActionState UpdateActionState; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetDigitalActionData(ulong action, ref InputDigitalActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDigitalActionData GetDigitalActionData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetAnalogActionData(ulong action, ref InputAnalogActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetAnalogActionData GetAnalogActionData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetPoseActionDataRelativeToNow(ulong action, ETrackingUniverseOrigin eOrigin, float fPredictedSecondsFromNow, ref InputPoseActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPoseActionDataRelativeToNow GetPoseActionDataRelativeToNow; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetPoseActionDataForNextFrame(ulong action, ETrackingUniverseOrigin eOrigin, ref InputPoseActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPoseActionDataForNextFrame GetPoseActionDataForNextFrame; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalActionData(ulong action, ref InputSkeletalActionData_t pActionData, uint unActionDataSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalActionData GetSkeletalActionData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetDominantHand(ref ETrackedControllerRole peDominantHand); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDominantHand GetDominantHand; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _SetDominantHand(ETrackedControllerRole eDominantHand); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetDominantHand SetDominantHand; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetBoneCount(ulong action, ref uint pBoneCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBoneCount GetBoneCount; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetBoneHierarchy(ulong action, [In, Out] int[] pParentIndices, uint unIndexArayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBoneHierarchy GetBoneHierarchy; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetBoneName(ulong action, int nBoneIndex, System.Text.StringBuilder pchBoneName, uint unNameBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBoneName GetBoneName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalReferenceTransforms(ulong action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalReferencePose eReferencePose, [In, Out] VRBoneTransform_t[] pTransformArray, uint unTransformArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalReferenceTransforms GetSkeletalReferenceTransforms; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalTrackingLevel(ulong action, ref EVRSkeletalTrackingLevel pSkeletalTrackingLevel); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalTrackingLevel GetSkeletalTrackingLevel; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalBoneData(ulong action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalMotionRange eMotionRange, [In, Out] VRBoneTransform_t[] pTransformArray, uint unTransformArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalBoneData GetSkeletalBoneData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalSummaryData(ulong action, EVRSummaryType eSummaryType, ref VRSkeletalSummaryData_t pSkeletalSummaryData); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalSummaryData GetSkeletalSummaryData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalBoneDataCompressed(ulong action, EVRSkeletalMotionRange eMotionRange, IntPtr pvCompressedData, uint unCompressedSize, ref uint punRequiredCompressedSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalBoneDataCompressed GetSkeletalBoneDataCompressed; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _DecompressSkeletalBoneData(IntPtr pvCompressedBuffer, uint unCompressedBufferSize, EVRSkeletalTransformSpace eTransformSpace, [In, Out] VRBoneTransform_t[] pTransformArray, uint unTransformArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _DecompressSkeletalBoneData DecompressSkeletalBoneData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _TriggerHapticVibrationAction(ulong action, float fStartSecondsFromNow, float fDurationSeconds, float fFrequency, float fAmplitude, ulong ulRestrictToDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _TriggerHapticVibrationAction TriggerHapticVibrationAction; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetActionOrigins(ulong actionSetHandle, ulong digitalActionHandle, [In, Out] ulong[] originsOut, uint originOutCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetActionOrigins GetActionOrigins; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetOriginLocalizedName(ulong origin, System.Text.StringBuilder pchNameArray, uint unNameArraySize, int unStringSectionsToInclude); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOriginLocalizedName GetOriginLocalizedName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetOriginTrackedDeviceInfo(ulong origin, ref InputOriginInfo_t pOriginInfo, uint unOriginInfoSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOriginTrackedDeviceInfo GetOriginTrackedDeviceInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetActionBindingInfo(ulong action, [In, Out] InputBindingInfo_t[] pOriginInfo, uint unBindingInfoSize, uint unBindingInfoCount, ref uint punReturnedBindingInfoCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetActionBindingInfo GetActionBindingInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _ShowActionOrigins(ulong actionSetHandle, ulong ulActionHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowActionOrigins ShowActionOrigins; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _ShowBindingsForActionSet([In, Out] VRActiveActionSet_t[] pSets, uint unSizeOfVRSelectedActionSet_t, uint unSetCount, ulong originToHighlight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowBindingsForActionSet ShowBindingsForActionSet; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetComponentStateForBinding(IntPtr pchRenderModelName, IntPtr pchComponentName, ref InputBindingInfo_t pOriginInfo, uint unBindingInfoSize, uint unBindingInfoCount, ref RenderModel_ComponentState_t pComponentState); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentStateForBinding GetComponentStateForBinding; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _IsUsingLegacyInput(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsUsingLegacyInput IsUsingLegacyInput; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _OpenBindingUI(IntPtr pchAppKey, ulong ulActionSetHandle, ulong ulDeviceHandle, [MarshalAs(UnmanagedType.I1)] bool bShowOnDesktop); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _OpenBindingUI OpenBindingUI; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetBindingVariant(ulong ulDevicePath, System.Text.StringBuilder pchVariantArray, uint unVariantArraySize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBindingVariant GetBindingVariant; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRIOBuffer +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EIOBufferError _Open(IntPtr pchPath, EIOBufferMode mode, uint unElementSize, uint unElements, ref ulong pulBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Open Open; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EIOBufferError _Close(ulong ulBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Close Close; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EIOBufferError _Read(ulong ulBuffer, IntPtr pDst, uint unBytes, ref uint punRead); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Read Read; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EIOBufferError _Write(ulong ulBuffer, IntPtr pSrc, uint unBytes); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Write Write; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _PropertyContainer(ulong ulBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PropertyContainer PropertyContainer; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _HasReaders(ulong ulBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HasReaders HasReaders; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRSpatialAnchors +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRSpatialAnchorError _CreateSpatialAnchorFromDescriptor(IntPtr pchDescriptor, ref uint pHandleOut); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CreateSpatialAnchorFromDescriptor CreateSpatialAnchorFromDescriptor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRSpatialAnchorError _CreateSpatialAnchorFromPose(uint unDeviceIndex, ETrackingUniverseOrigin eOrigin, ref SpatialAnchorPose_t pPose, ref uint pHandleOut); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CreateSpatialAnchorFromPose CreateSpatialAnchorFromPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRSpatialAnchorError _GetSpatialAnchorPose(uint unHandle, ETrackingUniverseOrigin eOrigin, ref SpatialAnchorPose_t pPoseOut); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSpatialAnchorPose GetSpatialAnchorPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRSpatialAnchorError _GetSpatialAnchorDescriptor(uint unHandle, System.Text.StringBuilder pchDescriptorOut, ref uint punDescriptorBufferLenInOut); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSpatialAnchorDescriptor GetSpatialAnchorDescriptor; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRDebug +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRDebugError _EmitVrProfilerEvent(IntPtr pchMessage); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _EmitVrProfilerEvent EmitVrProfilerEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRDebugError _BeginVrProfilerEvent(ref ulong pHandleOut); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _BeginVrProfilerEvent BeginVrProfilerEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRDebugError _FinishVrProfilerEvent(ulong hHandle, IntPtr pchMessage); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FinishVrProfilerEvent FinishVrProfilerEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _DriverDebugRequest(uint unDeviceIndex, IntPtr pchRequest, System.Text.StringBuilder pchResponseBuffer, uint unResponseBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _DriverDebugRequest DriverDebugRequest; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRIPCResourceManagerClient +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _NewSharedVulkanImage(uint nImageFormat, uint nWidth, uint nHeight, [MarshalAs(UnmanagedType.I1)] bool bRenderable, [MarshalAs(UnmanagedType.I1)] bool bMappable, [MarshalAs(UnmanagedType.I1)] bool bComputeAccess, uint unMipLevels, uint unArrayLayerCount, ref ulong pSharedHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _NewSharedVulkanImage NewSharedVulkanImage; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _NewSharedVulkanBuffer(uint nSize, uint nUsageFlags, ref ulong pSharedHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _NewSharedVulkanBuffer NewSharedVulkanBuffer; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _NewSharedVulkanSemaphore([MarshalAs(UnmanagedType.I1)] bool bCounting, ref ulong pSharedHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _NewSharedVulkanSemaphore NewSharedVulkanSemaphore; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _RefResource(ulong hSharedHandle, ref ulong pNewIpcHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RefResource RefResource; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _UnrefResource(ulong hSharedHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _UnrefResource UnrefResource; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetDmabufFormats(ref uint pOutFormatCount, ref uint pOutFormats); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDmabufFormats GetDmabufFormats; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _GetDmabufModifiers(EVRApplicationType eApplicationType, uint unDRMFormat, ref uint pOutModifierCount, ref ulong pOutModifiers); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDmabufModifiers GetDmabufModifiers; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _ImportDmabuf(EVRApplicationType eApplicationType, ref DmabufAttributes_t pDmabufAttributes, ref ulong pSharedHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ImportDmabuf ImportDmabuf; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + internal delegate bool _ReceiveSharedFd(ulong ulIpcHandle, ref int pOutFd); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReceiveSharedFd ReceiveSharedFd; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _DestructIVRIPCResourceManagerClient(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _DestructIVRIPCResourceManagerClient DestructIVRIPCResourceManagerClient; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRProperties +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _ReadPropertyBatch(ulong ulContainerHandle, ref PropertyRead_t pBatch, uint unBatchEntryCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReadPropertyBatch ReadPropertyBatch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _WritePropertyBatch(ulong ulContainerHandle, ref PropertyWrite_t pBatch, uint unBatchEntryCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _WritePropertyBatch WritePropertyBatch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetPropErrorNameFromEnum(ETrackedPropertyError error); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPropErrorNameFromEnum GetPropErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _TrackedDeviceToPropertyContainer(uint nDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _TrackedDeviceToPropertyContainer TrackedDeviceToPropertyContainer; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRPaths +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _ReadPathBatch(ulong ulRootHandle, ref PathRead_t pBatch, uint unBatchEntryCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReadPathBatch ReadPathBatch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _WritePathBatch(ulong ulRootHandle, ref PathWrite_t pBatch, uint unBatchEntryCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _WritePathBatch WritePathBatch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _StringToHandle(ref ulong pHandle, IntPtr pchPath); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _StringToHandle StringToHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _HandleToString(ulong pHandle, string pchBuffer, uint unBufferSize, ref uint punBufferSizeUsed); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HandleToString HandleToString; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRBlockQueue +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _Create(ref ulong pulQueueHandle, IntPtr pchPath, uint unBlockDataSize, uint unBlockHeaderSize, uint unBlockCount, uint unFlags); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Create Create; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _Connect(ref ulong pulQueueHandle, IntPtr pchPath); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Connect Connect; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _Destroy(ulong ulQueueHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Destroy Destroy; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _AcquireWriteOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AcquireWriteOnlyBlock AcquireWriteOnlyBlock; + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _ReleaseWriteOnlyBlock(ulong ulQueueHandle, ulong ulBlockHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseWriteOnlyBlock ReleaseWriteOnlyBlock; - public class CVRIPCResourceManagerClient - { - IVRIPCResourceManagerClient FnTable; - internal CVRIPCResourceManagerClient(IntPtr pInterface) - { - FnTable = (IVRIPCResourceManagerClient)Marshal.PtrToStructure(pInterface, typeof(IVRIPCResourceManagerClient)); - } - public bool NewSharedVulkanImage(uint nImageFormat, uint nWidth, uint nHeight, bool bRenderable, bool bMappable, bool bComputeAccess, uint unMipLevels, uint unArrayLayerCount, ref ulong pSharedHandle) - { - pSharedHandle = 0; - bool result = FnTable.NewSharedVulkanImage(nImageFormat, nWidth, nHeight, bRenderable, bMappable, bComputeAccess, unMipLevels, unArrayLayerCount, ref pSharedHandle); - return result; - } - public bool NewSharedVulkanBuffer(uint nSize, uint nUsageFlags, ref ulong pSharedHandle) - { - pSharedHandle = 0; - bool result = FnTable.NewSharedVulkanBuffer(nSize, nUsageFlags, ref pSharedHandle); - return result; - } - public bool NewSharedVulkanSemaphore(ref ulong pSharedHandle) - { - pSharedHandle = 0; - bool result = FnTable.NewSharedVulkanSemaphore(ref pSharedHandle); - return result; - } - public bool RefResource(ulong hSharedHandle, ref ulong pNewIpcHandle) - { - pNewIpcHandle = 0; - bool result = FnTable.RefResource(hSharedHandle, ref pNewIpcHandle); - return result; - } - public bool UnrefResource(ulong hSharedHandle) - { - bool result = FnTable.UnrefResource(hSharedHandle); - return result; - } - public bool GetDmabufFormats(ref uint pOutFormatCount, ref uint pOutFormats) - { - pOutFormatCount = 0; - pOutFormats = 0; - bool result = FnTable.GetDmabufFormats(ref pOutFormatCount, ref pOutFormats); - return result; - } - public bool GetDmabufModifiers(EVRApplicationType eApplicationType, uint unDRMFormat, ref uint pOutModifierCount, ref ulong pOutModifiers) - { - pOutModifierCount = 0; - pOutModifiers = 0; - bool result = FnTable.GetDmabufModifiers(eApplicationType, unDRMFormat, ref pOutModifierCount, ref pOutModifiers); - return result; - } - public bool ImportDmabuf(EVRApplicationType eApplicationType, ref DmabufAttributes_t pDmabufAttributes, ref ulong pSharedHandle) - { - pSharedHandle = 0; - bool result = FnTable.ImportDmabuf(eApplicationType, ref pDmabufAttributes, ref pSharedHandle); - return result; - } - public bool ReceiveSharedFd(ulong ulIpcHandle, ref int pOutFd) - { - pOutFd = 0; - bool result = FnTable.ReceiveSharedFd(ulIpcHandle, ref pOutFd); - return result; - } - public void DestructIVRIPCResourceManagerClient() - { - FnTable.DestructIVRIPCResourceManagerClient(); - } - } + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _WaitAndAcquireReadOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer, EBlockQueueReadType eReadType, uint unTimeoutMs); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _WaitAndAcquireReadOnlyBlock WaitAndAcquireReadOnlyBlock; + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _AcquireReadOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer, EBlockQueueReadType eReadType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AcquireReadOnlyBlock AcquireReadOnlyBlock; - public class CVRProperties - { - IVRProperties FnTable; - internal CVRProperties(IntPtr pInterface) - { - FnTable = (IVRProperties)Marshal.PtrToStructure(pInterface, typeof(IVRProperties)); - } - public ETrackedPropertyError ReadPropertyBatch(ulong ulContainerHandle, ref PropertyRead_t pBatch, uint unBatchEntryCount) - { - ETrackedPropertyError result = FnTable.ReadPropertyBatch(ulContainerHandle, ref pBatch, unBatchEntryCount); - return result; - } - public ETrackedPropertyError WritePropertyBatch(ulong ulContainerHandle, ref PropertyWrite_t pBatch, uint unBatchEntryCount) - { - ETrackedPropertyError result = FnTable.WritePropertyBatch(ulContainerHandle, ref pBatch, unBatchEntryCount); - return result; - } - public string GetPropErrorNameFromEnum(ETrackedPropertyError error) - { - IntPtr result = FnTable.GetPropErrorNameFromEnum(error); - return Marshal.PtrToStringAnsi(result); - } - public ulong TrackedDeviceToPropertyContainer(uint nDevice) - { - ulong result = FnTable.TrackedDeviceToPropertyContainer(nDevice); - return result; - } - } + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _ReleaseReadOnlyBlock(ulong ulQueueHandle, ulong ulBlockHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseReadOnlyBlock ReleaseReadOnlyBlock; + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _QueueHasReader(ulong ulQueueHandle, [MarshalAs(UnmanagedType.I1)] ref bool pbHasReaders); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _QueueHasReader QueueHasReader; - public class CVRPaths - { - IVRPaths FnTable; - internal CVRPaths(IntPtr pInterface) - { - FnTable = (IVRPaths)Marshal.PtrToStructure(pInterface, typeof(IVRPaths)); - } - public ETrackedPropertyError ReadPathBatch(ulong ulRootHandle, ref PathRead_t pBatch, uint unBatchEntryCount) - { - ETrackedPropertyError result = FnTable.ReadPathBatch(ulRootHandle, ref pBatch, unBatchEntryCount); - return result; - } - public ETrackedPropertyError WritePathBatch(ulong ulRootHandle, ref PathWrite_t pBatch, uint unBatchEntryCount) - { - ETrackedPropertyError result = FnTable.WritePathBatch(ulRootHandle, ref pBatch, unBatchEntryCount); - return result; - } - public ETrackedPropertyError StringToHandle(ref ulong pHandle, string pchPath) - { - pHandle = 0; - IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); - ETrackedPropertyError result = FnTable.StringToHandle(ref pHandle, pchPathUtf8); - Marshal.FreeHGlobal(pchPathUtf8); - return result; - } - public ETrackedPropertyError HandleToString(ulong pHandle, string pchBuffer, uint unBufferSize, ref uint punBufferSizeUsed) - { - punBufferSizeUsed = 0; - ETrackedPropertyError result = FnTable.HandleToString(pHandle, pchBuffer, unBufferSize, ref punBufferSizeUsed); - return result; - } - } +} - public class CVRBlockQueue +public class Utils +{ + public static IntPtr ToUtf8(string managedString) { - IVRBlockQueue FnTable; - internal CVRBlockQueue(IntPtr pInterface) - { - FnTable = (IVRBlockQueue)Marshal.PtrToStructure(pInterface, typeof(IVRBlockQueue)); - } - public EBlockQueueError Create(ref ulong pulQueueHandle, string pchPath, uint unBlockDataSize, uint unBlockHeaderSize, uint unBlockCount, uint unFlags) - { - pulQueueHandle = 0; - IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); - EBlockQueueError result = FnTable.Create(ref pulQueueHandle, pchPathUtf8, unBlockDataSize, unBlockHeaderSize, unBlockCount, unFlags); - Marshal.FreeHGlobal(pchPathUtf8); - return result; - } - public EBlockQueueError Connect(ref ulong pulQueueHandle, string pchPath) - { - pulQueueHandle = 0; - IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); - EBlockQueueError result = FnTable.Connect(ref pulQueueHandle, pchPathUtf8); - Marshal.FreeHGlobal(pchPathUtf8); - return result; - } - public EBlockQueueError Destroy(ulong ulQueueHandle) - { - EBlockQueueError result = FnTable.Destroy(ulQueueHandle); - return result; - } - public EBlockQueueError AcquireWriteOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer) - { - pulBlockHandle = 0; - EBlockQueueError result = FnTable.AcquireWriteOnlyBlock(ulQueueHandle, ref pulBlockHandle, ref ppvBuffer); - return result; - } - public EBlockQueueError ReleaseWriteOnlyBlock(ulong ulQueueHandle, ulong ulBlockHandle) - { - EBlockQueueError result = FnTable.ReleaseWriteOnlyBlock(ulQueueHandle, ulBlockHandle); - return result; - } - public EBlockQueueError WaitAndAcquireReadOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer, EBlockQueueReadType eReadType, uint unTimeoutMs) - { - pulBlockHandle = 0; - EBlockQueueError result = FnTable.WaitAndAcquireReadOnlyBlock(ulQueueHandle, ref pulBlockHandle, ref ppvBuffer, eReadType, unTimeoutMs); - return result; - } - public EBlockQueueError AcquireReadOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer, EBlockQueueReadType eReadType) - { - pulBlockHandle = 0; - EBlockQueueError result = FnTable.AcquireReadOnlyBlock(ulQueueHandle, ref pulBlockHandle, ref ppvBuffer, eReadType); - return result; - } - public EBlockQueueError ReleaseReadOnlyBlock(ulong ulQueueHandle, ulong ulBlockHandle) - { - EBlockQueueError result = FnTable.ReleaseReadOnlyBlock(ulQueueHandle, ulBlockHandle); - return result; - } - public EBlockQueueError QueueHasReader(ulong ulQueueHandle, ref bool pbHasReaders) + if (managedString == null) { - pbHasReaders = false; - EBlockQueueError result = FnTable.QueueHasReader(ulQueueHandle, ref pbHasReaders); - return result; + return IntPtr.Zero; } - } - - public class OpenVRInterop - { - [DllImportAttribute("openvr_api", EntryPoint = "VR_InitInternal", CallingConvention = CallingConvention.Cdecl)] - internal static extern uint InitInternal(ref EVRInitError peError, EVRApplicationType eApplicationType); - [DllImportAttribute("openvr_api", EntryPoint = "VR_InitInternal2", CallingConvention = CallingConvention.Cdecl)] - internal static extern uint InitInternal2(ref EVRInitError peError, EVRApplicationType eApplicationType, [In, MarshalAs(UnmanagedType.LPStr)] string pStartupInfo); - [DllImportAttribute("openvr_api", EntryPoint = "VR_ShutdownInternal", CallingConvention = CallingConvention.Cdecl)] - internal static extern void ShutdownInternal(); - [DllImportAttribute("openvr_api", EntryPoint = "VR_IsHmdPresent", CallingConvention = CallingConvention.Cdecl)] - internal static extern bool IsHmdPresent(); - [DllImportAttribute("openvr_api", EntryPoint = "VR_IsRuntimeInstalled", CallingConvention = CallingConvention.Cdecl)] - internal static extern bool IsRuntimeInstalled(); - [DllImportAttribute("openvr_api", EntryPoint = "VR_RuntimePath", CallingConvention = CallingConvention.Cdecl)] - internal static extern string RuntimePath(); - [DllImportAttribute("openvr_api", EntryPoint = "VR_GetRuntimePath", CallingConvention = CallingConvention.Cdecl)] - internal static extern bool GetRuntimePath(System.Text.StringBuilder pchPathBuffer, uint unBufferSize, ref uint punRequiredBufferSize); - [DllImportAttribute("openvr_api", EntryPoint = "VR_GetStringForHmdError", CallingConvention = CallingConvention.Cdecl)] - internal static extern IntPtr GetStringForHmdError(EVRInitError error); - [DllImportAttribute("openvr_api", EntryPoint = "VR_GetGenericInterface", CallingConvention = CallingConvention.Cdecl)] - internal static extern IntPtr GetGenericInterface([In, MarshalAs(UnmanagedType.LPStr)] string pchInterfaceVersion, ref EVRInitError peError); - [DllImportAttribute("openvr_api", EntryPoint = "VR_IsInterfaceVersionValid", CallingConvention = CallingConvention.Cdecl)] - internal static extern bool IsInterfaceVersionValid([In, MarshalAs(UnmanagedType.LPStr)] string pchInterfaceVersion); - [DllImportAttribute("openvr_api", EntryPoint = "VR_GetInitToken", CallingConvention = CallingConvention.Cdecl)] - internal static extern uint GetInitToken(); + int size = System.Text.Encoding.UTF8.GetByteCount(managedString) + 1; + if (buffer.Length < size) buffer = new byte[size]; + int written = System.Text.Encoding.UTF8.GetBytes(managedString, 0, managedString.Length, buffer, 0); + buffer[written] = 0x00; // null terminate + IntPtr nativeUtf8 = Marshal.AllocHGlobal(written+1); + Marshal.Copy(buffer, 0, nativeUtf8, written+1); + return nativeUtf8; } + private static byte[] buffer = new byte[1024]; +} - - public enum EVREye - { - Eye_Left = 0, - Eye_Right = 1, - } - public enum ETextureType - { - Invalid = -1, - DirectX = 0, - OpenGL = 1, - Vulkan = 2, - IOSurface = 3, - DirectX12 = 4, - DXGISharedHandle = 5, - Metal = 6, - Reserved = 7, - SharedTextureHandle = 8, - } - public enum EColorSpace - { - Auto = 0, - Gamma = 1, - Linear = 2, - } - public enum ETrackingResult - { - Uninitialized = 1, - Calibrating_InProgress = 100, - Calibrating_OutOfRange = 101, - Running_OK = 200, - Running_OutOfRange = 201, - Fallback_RotationOnly = 300, - } - public enum ETrackedDeviceClass - { - Invalid = 0, - HMD = 1, - Controller = 2, - GenericTracker = 3, - TrackingReference = 4, - DisplayRedirect = 5, - Max = 6, - } - public enum ETrackedControllerRole - { - Invalid = 0, - LeftHand = 1, - RightHand = 2, - OptOut = 3, - Treadmill = 4, - Stylus = 5, - Max = 5, - } - public enum ETrackingUniverseOrigin - { - TrackingUniverseSeated = 0, - TrackingUniverseStanding = 1, - TrackingUniverseRawAndUncalibrated = 2, - } - public enum EAdditionalRadioFeatures - { - None = 0, - HTCLinkBox = 1, - InternalDongle = 2, - ExternalDongle = 4, - } - public enum ETrackedDeviceProperty - { - Prop_Invalid = 0, - Prop_TrackingSystemName_String = 1000, - Prop_ModelNumber_String = 1001, - Prop_SerialNumber_String = 1002, - Prop_RenderModelName_String = 1003, - Prop_WillDriftInYaw_Bool = 1004, - Prop_ManufacturerName_String = 1005, - Prop_TrackingFirmwareVersion_String = 1006, - Prop_HardwareRevision_String = 1007, - Prop_AllWirelessDongleDescriptions_String = 1008, - Prop_ConnectedWirelessDongle_String = 1009, - Prop_DeviceIsWireless_Bool = 1010, - Prop_DeviceIsCharging_Bool = 1011, - Prop_DeviceBatteryPercentage_Float = 1012, - Prop_StatusDisplayTransform_Matrix34 = 1013, - Prop_Firmware_UpdateAvailable_Bool = 1014, - Prop_Firmware_ManualUpdate_Bool = 1015, - Prop_Firmware_ManualUpdateURL_String = 1016, - Prop_HardwareRevision_Uint64 = 1017, - Prop_FirmwareVersion_Uint64 = 1018, - Prop_FPGAVersion_Uint64 = 1019, - Prop_VRCVersion_Uint64 = 1020, - Prop_RadioVersion_Uint64 = 1021, - Prop_DongleVersion_Uint64 = 1022, - Prop_BlockServerShutdown_Bool = 1023, - Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024, - Prop_ContainsProximitySensor_Bool = 1025, - Prop_DeviceProvidesBatteryStatus_Bool = 1026, - Prop_DeviceCanPowerOff_Bool = 1027, - Prop_Firmware_ProgrammingTarget_String = 1028, - Prop_DeviceClass_Int32 = 1029, - Prop_HasCamera_Bool = 1030, - Prop_DriverVersion_String = 1031, - Prop_Firmware_ForceUpdateRequired_Bool = 1032, - Prop_ViveSystemButtonFixRequired_Bool = 1033, - Prop_ParentDriver_Uint64 = 1034, - Prop_ResourceRoot_String = 1035, - Prop_RegisteredDeviceType_String = 1036, - Prop_InputProfilePath_String = 1037, - Prop_NeverTracked_Bool = 1038, - Prop_NumCameras_Int32 = 1039, - Prop_CameraFrameLayout_Int32 = 1040, - Prop_CameraStreamFormat_Int32 = 1041, - Prop_AdditionalDeviceSettingsPath_String = 1042, - Prop_Identifiable_Bool = 1043, - Prop_BootloaderVersion_Uint64 = 1044, - Prop_AdditionalSystemReportData_String = 1045, - Prop_CompositeFirmwareVersion_String = 1046, - Prop_Firmware_RemindUpdate_Bool = 1047, - Prop_PeripheralApplicationVersion_Uint64 = 1048, - Prop_ManufacturerSerialNumber_String = 1049, - Prop_ComputedSerialNumber_String = 1050, - Prop_EstimatedDeviceFirstUseTime_Int32 = 1051, - Prop_DevicePowerUsage_Float = 1052, - Prop_IgnoreMotionForStandby_Bool = 1053, - Prop_ActualTrackingSystemName_String = 1054, - Prop_ReportsTimeSinceVSync_Bool = 2000, - Prop_SecondsFromVsyncToPhotons_Float = 2001, - Prop_DisplayFrequency_Float = 2002, - Prop_UserIpdMeters_Float = 2003, - Prop_CurrentUniverseId_Uint64 = 2004, - Prop_PreviousUniverseId_Uint64 = 2005, - Prop_DisplayFirmwareVersion_Uint64 = 2006, - Prop_IsOnDesktop_Bool = 2007, - Prop_DisplayMCType_Int32 = 2008, - Prop_DisplayMCOffset_Float = 2009, - Prop_DisplayMCScale_Float = 2010, - Prop_EdidVendorID_Int32 = 2011, - Prop_DisplayMCImageLeft_String = 2012, - Prop_DisplayMCImageRight_String = 2013, - Prop_DisplayGCBlackClamp_Float = 2014, - Prop_EdidProductID_Int32 = 2015, - Prop_CameraToHeadTransform_Matrix34 = 2016, - Prop_DisplayGCType_Int32 = 2017, - Prop_DisplayGCOffset_Float = 2018, - Prop_DisplayGCScale_Float = 2019, - Prop_DisplayGCPrescale_Float = 2020, - Prop_DisplayGCImage_String = 2021, - Prop_LensCenterLeftU_Float = 2022, - Prop_LensCenterLeftV_Float = 2023, - Prop_LensCenterRightU_Float = 2024, - Prop_LensCenterRightV_Float = 2025, - Prop_UserHeadToEyeDepthMeters_Float = 2026, - Prop_CameraFirmwareVersion_Uint64 = 2027, - Prop_CameraFirmwareDescription_String = 2028, - Prop_DisplayFPGAVersion_Uint64 = 2029, - Prop_DisplayBootloaderVersion_Uint64 = 2030, - Prop_DisplayHardwareVersion_Uint64 = 2031, - Prop_AudioFirmwareVersion_Uint64 = 2032, - Prop_CameraCompatibilityMode_Int32 = 2033, - Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034, - Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035, - Prop_DisplaySuppressed_Bool = 2036, - Prop_DisplayAllowNightMode_Bool = 2037, - Prop_DisplayMCImageWidth_Int32 = 2038, - Prop_DisplayMCImageHeight_Int32 = 2039, - Prop_DisplayMCImageNumChannels_Int32 = 2040, - Prop_DisplayMCImageData_Binary = 2041, - Prop_SecondsFromPhotonsToVblank_Float = 2042, - Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043, - Prop_DisplayDebugMode_Bool = 2044, - Prop_GraphicsAdapterLuid_Uint64 = 2045, - Prop_DriverProvidedChaperonePath_String = 2048, - Prop_ExpectedTrackingReferenceCount_Int32 = 2049, - Prop_ExpectedControllerCount_Int32 = 2050, - Prop_NamedIconPathControllerLeftDeviceOff_String = 2051, - Prop_NamedIconPathControllerRightDeviceOff_String = 2052, - Prop_NamedIconPathTrackingReferenceDeviceOff_String = 2053, - Prop_DoNotApplyPrediction_Bool = 2054, - Prop_CameraToHeadTransforms_Matrix34_Array = 2055, - Prop_DistortionMeshResolution_Int32 = 2056, - Prop_DriverIsDrawingControllers_Bool = 2057, - Prop_DriverRequestsApplicationPause_Bool = 2058, - Prop_DriverRequestsReducedRendering_Bool = 2059, - Prop_MinimumIpdStepMeters_Float = 2060, - Prop_AudioBridgeFirmwareVersion_Uint64 = 2061, - Prop_ImageBridgeFirmwareVersion_Uint64 = 2062, - Prop_ImuToHeadTransform_Matrix34 = 2063, - Prop_ImuFactoryGyroBias_Vector3 = 2064, - Prop_ImuFactoryGyroScale_Vector3 = 2065, - Prop_ImuFactoryAccelerometerBias_Vector3 = 2066, - Prop_ImuFactoryAccelerometerScale_Vector3 = 2067, - Prop_ConfigurationIncludesLighthouse20Features_Bool = 2069, - Prop_AdditionalRadioFeatures_Uint64 = 2070, - Prop_CameraWhiteBalance_Vector4_Array = 2071, - Prop_CameraDistortionFunction_Int32_Array = 2072, - Prop_CameraDistortionCoefficients_Float_Array = 2073, - Prop_ExpectedControllerType_String = 2074, - Prop_HmdTrackingStyle_Int32 = 2075, - Prop_DriverProvidedChaperoneVisibility_Bool = 2076, - Prop_HmdColumnCorrectionSettingPrefix_String = 2077, - Prop_CameraSupportsCompatibilityModes_Bool = 2078, - Prop_SupportsRoomViewDepthProjection_Bool = 2079, - Prop_DisplayAvailableFrameRates_Float_Array = 2080, - Prop_DisplaySupportsMultipleFramerates_Bool = 2081, - Prop_DisplayColorMultLeft_Vector3 = 2082, - Prop_DisplayColorMultRight_Vector3 = 2083, - Prop_DisplaySupportsRuntimeFramerateChange_Bool = 2084, - Prop_DisplaySupportsAnalogGain_Bool = 2085, - Prop_DisplayMinAnalogGain_Float = 2086, - Prop_DisplayMaxAnalogGain_Float = 2087, - Prop_CameraExposureTime_Float = 2088, - Prop_CameraGlobalGain_Float = 2089, - Prop_DashboardScale_Float = 2091, - Prop_PeerButtonInfo_String = 2092, - Prop_Hmd_SupportsHDR10_Bool = 2093, - Prop_Hmd_EnableParallelRenderCameras_Bool = 2094, - Prop_DriverProvidedChaperoneJson_String = 2095, - Prop_ForceSystemLayerUseAppPoses_Bool = 2096, - Prop_IpdUIRangeMinMeters_Float = 2100, - Prop_IpdUIRangeMaxMeters_Float = 2101, - Prop_Hmd_SupportsHDCP14LegacyCompat_Bool = 2102, - Prop_Hmd_SupportsMicMonitoring_Bool = 2103, - Prop_Hmd_SupportsDisplayPortTrainingMode_Bool = 2104, - Prop_Hmd_SupportsRoomViewDirect_Bool = 2105, - Prop_Hmd_SupportsAppThrottling_Bool = 2106, - Prop_Hmd_SupportsGpuBusMonitoring_Bool = 2107, - Prop_DriverDisplaysIPDChanges_Bool = 2108, - Prop_Driver_Reserved_01 = 2109, - Prop_Driver_Reserved_02 = 2110, - Prop_DSCVersion_Int32 = 2110, - Prop_DSCSliceCount_Int32 = 2111, - Prop_DSCBPPx16_Int32 = 2112, - Prop_Hmd_MaxDistortedTextureWidth_Int32 = 2113, - Prop_Hmd_MaxDistortedTextureHeight_Int32 = 2114, - Prop_Hmd_AllowSupersampleFiltering_Bool = 2115, - Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200, - Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201, - Prop_DriverRequestedMuraFeather_InnerRight_Int32 = 2202, - Prop_DriverRequestedMuraFeather_InnerTop_Int32 = 2203, - Prop_DriverRequestedMuraFeather_InnerBottom_Int32 = 2204, - Prop_DriverRequestedMuraFeather_OuterLeft_Int32 = 2205, - Prop_DriverRequestedMuraFeather_OuterRight_Int32 = 2206, - Prop_DriverRequestedMuraFeather_OuterTop_Int32 = 2207, - Prop_DriverRequestedMuraFeather_OuterBottom_Int32 = 2208, - Prop_Audio_DefaultPlaybackDeviceId_String = 2300, - Prop_Audio_DefaultRecordingDeviceId_String = 2301, - Prop_Audio_DefaultPlaybackDeviceVolume_Float = 2302, - Prop_Audio_SupportsDualSpeakerAndJackOutput_Bool = 2303, - Prop_Audio_DriverManagesPlaybackVolumeControl_Bool = 2304, - Prop_Audio_DriverPlaybackVolume_Float = 2305, - Prop_Audio_DriverPlaybackMute_Bool = 2306, - Prop_Audio_DriverManagesRecordingVolumeControl_Bool = 2307, - Prop_Audio_DriverRecordingVolume_Float = 2308, - Prop_Audio_DriverRecordingMute_Bool = 2309, - Prop_AttachedDeviceId_String = 3000, - Prop_SupportedButtons_Uint64 = 3001, - Prop_Axis0Type_Int32 = 3002, - Prop_Axis1Type_Int32 = 3003, - Prop_Axis2Type_Int32 = 3004, - Prop_Axis3Type_Int32 = 3005, - Prop_Axis4Type_Int32 = 3006, - Prop_ControllerRoleHint_Int32 = 3007, - Prop_FieldOfViewLeftDegrees_Float = 4000, - Prop_FieldOfViewRightDegrees_Float = 4001, - Prop_FieldOfViewTopDegrees_Float = 4002, - Prop_FieldOfViewBottomDegrees_Float = 4003, - Prop_TrackingRangeMinimumMeters_Float = 4004, - Prop_TrackingRangeMaximumMeters_Float = 4005, - Prop_ModeLabel_String = 4006, - Prop_CanWirelessIdentify_Bool = 4007, - Prop_Nonce_Int32 = 4008, - Prop_IconPathName_String = 5000, - Prop_NamedIconPathDeviceOff_String = 5001, - Prop_NamedIconPathDeviceSearching_String = 5002, - Prop_NamedIconPathDeviceSearchingAlert_String = 5003, - Prop_NamedIconPathDeviceReady_String = 5004, - Prop_NamedIconPathDeviceReadyAlert_String = 5005, - Prop_NamedIconPathDeviceNotReady_String = 5006, - Prop_NamedIconPathDeviceStandby_String = 5007, - Prop_NamedIconPathDeviceAlertLow_String = 5008, - Prop_NamedIconPathDeviceStandbyAlert_String = 5009, - Prop_DisplayHiddenArea_Binary_Start = 5100, - Prop_DisplayHiddenArea_Binary_End = 5150, - Prop_ParentContainer = 5151, - Prop_OverrideContainer_Uint64 = 5152, - Prop_UserConfigPath_String = 6000, - Prop_InstallPath_String = 6001, - Prop_HasDisplayComponent_Bool = 6002, - Prop_HasControllerComponent_Bool = 6003, - Prop_HasCameraComponent_Bool = 6004, - Prop_HasDriverDirectModeComponent_Bool = 6005, - Prop_HasVirtualDisplayComponent_Bool = 6006, - Prop_HasSpatialAnchorsSupport_Bool = 6007, - Prop_SupportsXrTextureSets_Bool = 6008, - Prop_ControllerType_String = 7000, - Prop_ControllerHandSelectionPriority_Int32 = 7002, - Prop_VendorSpecific_Reserved_Start = 10000, - Prop_VendorSpecific_Reserved_End = 10999, - Prop_TrackedDeviceProperty_Max = 1000000, - } - public enum ETrackedPropertyError - { - TrackedProp_Success = 0, - TrackedProp_WrongDataType = 1, - TrackedProp_WrongDeviceClass = 2, - TrackedProp_BufferTooSmall = 3, - TrackedProp_UnknownProperty = 4, - TrackedProp_InvalidDevice = 5, - TrackedProp_CouldNotContactServer = 6, - TrackedProp_ValueNotProvidedByDevice = 7, - TrackedProp_StringExceedsMaximumLength = 8, - TrackedProp_NotYetAvailable = 9, - TrackedProp_PermissionDenied = 10, - TrackedProp_InvalidOperation = 11, - TrackedProp_CannotWriteToWildcards = 12, - TrackedProp_IPCReadFailure = 13, - TrackedProp_OutOfMemory = 14, - TrackedProp_InvalidContainer = 15, - } - public enum EHmdTrackingStyle - { - Unknown = 0, - Lighthouse = 1, - OutsideInCameras = 2, - InsideOutCameras = 3, - } - public enum EVRSubmitFlags - { - Submit_Default = 0, - Submit_LensDistortionAlreadyApplied = 1, - Submit_GlRenderBuffer = 2, - Submit_Reserved = 4, - Submit_TextureWithPose = 8, - Submit_TextureWithDepth = 16, - Submit_FrameDiscontinuity = 32, - Submit_VulkanTextureWithArrayData = 64, - Submit_GlArrayTexture = 128, - Submit_IsEgl = 256, - Submit_Reserved2 = 32768, - Submit_Reserved3 = 65536, - } - public enum EVRState - { - Undefined = -1, - Off = 0, - Searching = 1, - Searching_Alert = 2, - Ready = 3, - Ready_Alert = 4, - NotReady = 5, - Standby = 6, - Ready_Alert_Low = 7, - } - public enum EVREventType - { - VREvent_None = 0, - VREvent_TrackedDeviceActivated = 100, - VREvent_TrackedDeviceDeactivated = 101, - VREvent_TrackedDeviceUpdated = 102, - VREvent_TrackedDeviceUserInteractionStarted = 103, - VREvent_TrackedDeviceUserInteractionEnded = 104, - VREvent_IpdChanged = 105, - VREvent_EnterStandbyMode = 106, - VREvent_LeaveStandbyMode = 107, - VREvent_TrackedDeviceRoleChanged = 108, - VREvent_WatchdogWakeUpRequested = 109, - VREvent_LensDistortionChanged = 110, - VREvent_PropertyChanged = 111, - VREvent_WirelessDisconnect = 112, - VREvent_WirelessReconnect = 113, - VREvent_Reserved_01 = 114, - VREvent_Reserved_02 = 115, - VREvent_ButtonPress = 200, - VREvent_ButtonUnpress = 201, - VREvent_ButtonTouch = 202, - VREvent_ButtonUntouch = 203, - VREvent_Modal_Cancel = 257, - VREvent_MouseMove = 300, - VREvent_MouseButtonDown = 301, - VREvent_MouseButtonUp = 302, - VREvent_FocusEnter = 303, - VREvent_FocusLeave = 304, - VREvent_ScrollDiscrete = 305, - VREvent_TouchPadMove = 306, - VREvent_OverlayFocusChanged = 307, - VREvent_ReloadOverlays = 308, - VREvent_ScrollSmooth = 309, - VREvent_LockMousePosition = 310, - VREvent_UnlockMousePosition = 311, - VREvent_InputFocusCaptured = 400, - VREvent_InputFocusReleased = 401, - VREvent_SceneApplicationChanged = 404, - VREvent_InputFocusChanged = 406, - VREvent_SceneApplicationUsingWrongGraphicsAdapter = 408, - VREvent_ActionBindingReloaded = 409, - VREvent_HideRenderModels = 410, - VREvent_ShowRenderModels = 411, - VREvent_SceneApplicationStateChanged = 412, - VREvent_SceneAppPipeDisconnected = 413, - VREvent_ConsoleOpened = 420, - VREvent_ConsoleClosed = 421, - VREvent_OverlayShown = 500, - VREvent_OverlayHidden = 501, - VREvent_DashboardActivated = 502, - VREvent_DashboardDeactivated = 503, - VREvent_DashboardRequested = 505, - VREvent_ResetDashboard = 506, - VREvent_ImageLoaded = 508, - VREvent_ShowKeyboard = 509, - VREvent_HideKeyboard = 510, - VREvent_OverlayGamepadFocusGained = 511, - VREvent_OverlayGamepadFocusLost = 512, - VREvent_OverlaySharedTextureChanged = 513, - VREvent_ScreenshotTriggered = 516, - VREvent_ImageFailed = 517, - VREvent_DashboardOverlayCreated = 518, - VREvent_SwitchGamepadFocus = 519, - VREvent_RequestScreenshot = 520, - VREvent_ScreenshotTaken = 521, - VREvent_ScreenshotFailed = 522, - VREvent_SubmitScreenshotToDashboard = 523, - VREvent_ScreenshotProgressToDashboard = 524, - VREvent_PrimaryDashboardDeviceChanged = 525, - VREvent_RoomViewShown = 526, - VREvent_RoomViewHidden = 527, - VREvent_ShowUI = 528, - VREvent_ShowDevTools = 529, - VREvent_DesktopViewUpdating = 530, - VREvent_DesktopViewReady = 531, - VREvent_StartDashboard = 532, - VREvent_ElevatePrism = 533, - VREvent_OverlayClosed = 534, - VREvent_DashboardThumbChanged = 535, - VREvent_DesktopMightBeVisible = 536, - VREvent_DesktopMightBeHidden = 537, - VREvent_MutualSteamCapabilitiesChanged = 538, - VREvent_OverlayCreated = 539, - VREvent_OverlayDestroyed = 540, - VREvent_Notification_Shown = 600, - VREvent_Notification_Hidden = 601, - VREvent_Notification_BeginInteraction = 602, - VREvent_Notification_Destroyed = 603, - VREvent_Quit = 700, - VREvent_ProcessQuit = 701, - VREvent_QuitAcknowledged = 703, - VREvent_DriverRequestedQuit = 704, - VREvent_RestartRequested = 705, - VREvent_InvalidateSwapTextureSets = 706, - VREvent_ChaperoneDataHasChanged = 800, - VREvent_ChaperoneUniverseHasChanged = 801, - VREvent_ChaperoneTempDataHasChanged = 802, - VREvent_ChaperoneSettingsHaveChanged = 803, - VREvent_SeatedZeroPoseReset = 804, - VREvent_ChaperoneFlushCache = 805, - VREvent_ChaperoneRoomSetupStarting = 806, - VREvent_ChaperoneRoomSetupFinished = 807, - VREvent_StandingZeroPoseReset = 808, - VREvent_AudioSettingsHaveChanged = 820, - VREvent_BackgroundSettingHasChanged = 850, - VREvent_CameraSettingsHaveChanged = 851, - VREvent_ReprojectionSettingHasChanged = 852, - VREvent_ModelSkinSettingsHaveChanged = 853, - VREvent_EnvironmentSettingsHaveChanged = 854, - VREvent_PowerSettingsHaveChanged = 855, - VREvent_EnableHomeAppSettingsHaveChanged = 856, - VREvent_SteamVRSectionSettingChanged = 857, - VREvent_LighthouseSectionSettingChanged = 858, - VREvent_NullSectionSettingChanged = 859, - VREvent_UserInterfaceSectionSettingChanged = 860, - VREvent_NotificationsSectionSettingChanged = 861, - VREvent_KeyboardSectionSettingChanged = 862, - VREvent_PerfSectionSettingChanged = 863, - VREvent_DashboardSectionSettingChanged = 864, - VREvent_WebInterfaceSectionSettingChanged = 865, - VREvent_TrackersSectionSettingChanged = 866, - VREvent_LastKnownSectionSettingChanged = 867, - VREvent_DismissedWarningsSectionSettingChanged = 868, - VREvent_GpuSpeedSectionSettingChanged = 869, - VREvent_WindowsMRSectionSettingChanged = 870, - VREvent_OtherSectionSettingChanged = 871, - VREvent_AnyDriverSettingsChanged = 872, - VREvent_StatusUpdate = 900, - VREvent_WebInterface_InstallDriverCompleted = 950, - VREvent_MCImageUpdated = 1000, - VREvent_FirmwareUpdateStarted = 1100, - VREvent_FirmwareUpdateFinished = 1101, - VREvent_KeyboardClosed = 1200, - VREvent_KeyboardCharInput = 1201, - VREvent_KeyboardDone = 1202, - VREvent_KeyboardOpened_Global = 1203, - VREvent_KeyboardClosed_Global = 1204, - VREvent_ApplicationListUpdated = 1303, - VREvent_ApplicationMimeTypeLoad = 1304, - VREvent_ProcessConnected = 1306, - VREvent_ProcessDisconnected = 1307, - VREvent_Compositor_ChaperoneBoundsShown = 1410, - VREvent_Compositor_ChaperoneBoundsHidden = 1411, - VREvent_Compositor_DisplayDisconnected = 1412, - VREvent_Compositor_DisplayReconnected = 1413, - VREvent_Compositor_HDCPError = 1414, - VREvent_Compositor_ApplicationNotResponding = 1415, - VREvent_Compositor_ApplicationResumed = 1416, - VREvent_Compositor_OutOfVideoMemory = 1417, - VREvent_Compositor_DisplayModeNotSupported = 1418, - VREvent_Compositor_StageOverrideReady = 1419, - VREvent_Compositor_RequestDisconnectReconnect = 1420, - VREvent_TrackedCamera_StartVideoStream = 1500, - VREvent_TrackedCamera_StopVideoStream = 1501, - VREvent_TrackedCamera_PauseVideoStream = 1502, - VREvent_TrackedCamera_ResumeVideoStream = 1503, - VREvent_TrackedCamera_EditingSurface = 1550, - VREvent_PerformanceTest_EnableCapture = 1600, - VREvent_PerformanceTest_DisableCapture = 1601, - VREvent_PerformanceTest_FidelityLevel = 1602, - VREvent_MessageOverlay_Closed = 1650, - VREvent_MessageOverlayCloseRequested = 1651, - VREvent_Input_HapticVibration = 1700, - VREvent_Input_BindingLoadFailed = 1701, - VREvent_Input_BindingLoadSuccessful = 1702, - VREvent_Input_ActionManifestReloaded = 1703, - VREvent_Input_ActionManifestLoadFailed = 1704, - VREvent_Input_ProgressUpdate = 1705, - VREvent_Input_TrackerActivated = 1706, - VREvent_Input_BindingsUpdated = 1707, - VREvent_Input_BindingSubscriptionChanged = 1708, - VREvent_SpatialAnchors_PoseUpdated = 1800, - VREvent_SpatialAnchors_DescriptorUpdated = 1801, - VREvent_SpatialAnchors_RequestPoseUpdate = 1802, - VREvent_SpatialAnchors_RequestDescriptorUpdate = 1803, - VREvent_SystemReport_Started = 1900, - VREvent_Monitor_ShowHeadsetView = 2000, - VREvent_Monitor_HideHeadsetView = 2001, - VREvent_Audio_SetSpeakersVolume = 2100, - VREvent_Audio_SetSpeakersMute = 2101, - VREvent_Audio_SetMicrophoneVolume = 2102, - VREvent_Audio_SetMicrophoneMute = 2103, - VREvent_VendorSpecific_Reserved_Start = 10000, - VREvent_VendorSpecific_Reserved_End = 19999, - } - public enum EDeviceActivityLevel - { - k_EDeviceActivityLevel_Unknown = -1, - k_EDeviceActivityLevel_Idle = 0, - k_EDeviceActivityLevel_UserInteraction = 1, - k_EDeviceActivityLevel_UserInteraction_Timeout = 2, - k_EDeviceActivityLevel_Standby = 3, - k_EDeviceActivityLevel_Idle_Timeout = 4, - } - public enum EVRButtonId - { - k_EButton_System = 0, - k_EButton_ApplicationMenu = 1, - k_EButton_Grip = 2, - k_EButton_DPad_Left = 3, - k_EButton_DPad_Up = 4, - k_EButton_DPad_Right = 5, - k_EButton_DPad_Down = 6, - k_EButton_A = 7, - k_EButton_ProximitySensor = 31, - k_EButton_Axis0 = 32, - k_EButton_Axis1 = 33, - k_EButton_Axis2 = 34, - k_EButton_Axis3 = 35, - k_EButton_Axis4 = 36, - k_EButton_SteamVR_Touchpad = 32, - k_EButton_SteamVR_Trigger = 33, - k_EButton_Dashboard_Back = 2, - k_EButton_IndexController_A = 2, - k_EButton_IndexController_B = 1, - k_EButton_IndexController_JoyStick = 35, - k_EButton_Reserved0 = 50, - k_EButton_Reserved1 = 51, - k_EButton_Max = 64, - } - public enum EVRMouseButton - { - Left = 1, - Right = 2, - Middle = 4, - } - public enum EShowUIType - { - ShowUI_ControllerBinding = 0, - ShowUI_ManageTrackers = 1, - ShowUI_Pairing = 3, - ShowUI_Settings = 4, - ShowUI_DebugCommands = 5, - ShowUI_FullControllerBinding = 6, - ShowUI_ManageDrivers = 7, - } - public enum EHDCPError - { - None = 0, - LinkLost = 1, - Tampered = 2, - DeviceRevoked = 3, - Unknown = 4, - } - public enum EVRComponentProperty - { - IsStatic = 1, - IsVisible = 2, - IsTouched = 4, - IsPressed = 8, - IsScrolled = 16, - IsHighlighted = 32, - } - public enum EVRInputError - { - None = 0, - NameNotFound = 1, - WrongType = 2, - InvalidHandle = 3, - InvalidParam = 4, - NoSteam = 5, - MaxCapacityReached = 6, - IPCError = 7, - NoActiveActionSet = 8, - InvalidDevice = 9, - InvalidSkeleton = 10, - InvalidBoneCount = 11, - InvalidCompressedData = 12, - NoData = 13, - BufferTooSmall = 14, - MismatchedActionManifest = 15, - MissingSkeletonData = 16, - InvalidBoneIndex = 17, - InvalidPriority = 18, - PermissionDenied = 19, - InvalidRenderModel = 20, - } - public enum EVRSpatialAnchorError - { - Success = 0, - Internal = 1, - UnknownHandle = 2, - ArrayTooSmall = 3, - InvalidDescriptorChar = 4, - NotYetAvailable = 5, - NotAvailableInThisUniverse = 6, - PermanentlyUnavailable = 7, - WrongDriver = 8, - DescriptorTooLong = 9, - Unknown = 10, - NoRoomCalibration = 11, - InvalidArgument = 12, - UnknownDriver = 13, - } - public enum EHiddenAreaMeshType - { - k_eHiddenAreaMesh_Standard = 0, - k_eHiddenAreaMesh_Inverse = 1, - k_eHiddenAreaMesh_LineLoop = 2, - k_eHiddenAreaMesh_Max = 3, - } - public enum EVRControllerAxisType - { - k_eControllerAxis_None = 0, - k_eControllerAxis_TrackPad = 1, - k_eControllerAxis_Joystick = 2, - k_eControllerAxis_Trigger = 3, - } - public enum EVRControllerEventOutputType - { - ControllerEventOutput_OSEvents = 0, - ControllerEventOutput_VREvents = 1, - } - public enum ECollisionBoundsStyle - { - COLLISION_BOUNDS_STYLE_BEGINNER = 0, - COLLISION_BOUNDS_STYLE_INTERMEDIATE = 1, - COLLISION_BOUNDS_STYLE_SQUARES = 2, - COLLISION_BOUNDS_STYLE_ADVANCED = 3, - COLLISION_BOUNDS_STYLE_NONE = 4, - COLLISION_BOUNDS_STYLE_COUNT = 5, - } - public enum EVROverlayError - { - None = 0, - UnknownOverlay = 10, - InvalidHandle = 11, - PermissionDenied = 12, - OverlayLimitExceeded = 13, - WrongVisibilityType = 14, - KeyTooLong = 15, - NameTooLong = 16, - KeyInUse = 17, - WrongTransformType = 18, - InvalidTrackedDevice = 19, - InvalidParameter = 20, - ThumbnailCantBeDestroyed = 21, - ArrayTooSmall = 22, - RequestFailed = 23, - InvalidTexture = 24, - UnableToLoadFile = 25, - KeyboardAlreadyInUse = 26, - NoNeighbor = 27, - TooManyMaskPrimitives = 29, - BadMaskPrimitive = 30, - TextureAlreadyLocked = 31, - TextureLockCapacityReached = 32, - TextureNotLocked = 33, - TimedOut = 34, - } - public enum EVRApplicationType - { - VRApplication_Other = 0, - VRApplication_Scene = 1, - VRApplication_Overlay = 2, - VRApplication_Background = 3, - VRApplication_Utility = 4, - VRApplication_VRMonitor = 5, - VRApplication_SteamWatchdog = 6, - VRApplication_Bootstrapper = 7, - VRApplication_WebHelper = 8, - VRApplication_OpenXRInstance = 9, - VRApplication_OpenXRScene = 10, - VRApplication_OpenXROverlay = 11, - VRApplication_Prism = 12, - VRApplication_RoomView = 13, - VRApplication_Max = 14, - } - public enum EVRFirmwareError - { - None = 0, - Success = 1, - Fail = 2, - } - public enum EVRNotificationError - { - OK = 0, - InvalidNotificationId = 100, - NotificationQueueFull = 101, - InvalidOverlayHandle = 102, - SystemWithUserValueAlreadyExists = 103, - ServiceUnavailable = 104, - } - public enum EVRSkeletalMotionRange - { - WithController = 0, - WithoutController = 1, - } - public enum EVRSkeletalTrackingLevel - { - VRSkeletalTracking_Estimated = 0, - VRSkeletalTracking_Partial = 1, - VRSkeletalTracking_Full = 2, - Count = 3, - Max = 2, - } - public enum EVRInitError - { - None = 0, - Unknown = 1, - Init_InstallationNotFound = 100, - Init_InstallationCorrupt = 101, - Init_VRClientDLLNotFound = 102, - Init_FileNotFound = 103, - Init_FactoryNotFound = 104, - Init_InterfaceNotFound = 105, - Init_InvalidInterface = 106, - Init_UserConfigDirectoryInvalid = 107, - Init_HmdNotFound = 108, - Init_NotInitialized = 109, - Init_PathRegistryNotFound = 110, - Init_NoConfigPath = 111, - Init_NoLogPath = 112, - Init_PathRegistryNotWritable = 113, - Init_AppInfoInitFailed = 114, - Init_Retry = 115, - Init_InitCanceledByUser = 116, - Init_AnotherAppLaunching = 117, - Init_SettingsInitFailed = 118, - Init_ShuttingDown = 119, - Init_TooManyObjects = 120, - Init_NoServerForBackgroundApp = 121, - Init_NotSupportedWithCompositor = 122, - Init_NotAvailableToUtilityApps = 123, - Init_Internal = 124, - Init_HmdDriverIdIsNone = 125, - Init_HmdNotFoundPresenceFailed = 126, - Init_VRMonitorNotFound = 127, - Init_VRMonitorStartupFailed = 128, - Init_LowPowerWatchdogNotSupported = 129, - Init_InvalidApplicationType = 130, - Init_NotAvailableToWatchdogApps = 131, - Init_WatchdogDisabledInSettings = 132, - Init_VRDashboardNotFound = 133, - Init_VRDashboardStartupFailed = 134, - Init_VRHomeNotFound = 135, - Init_VRHomeStartupFailed = 136, - Init_RebootingBusy = 137, - Init_FirmwareUpdateBusy = 138, - Init_FirmwareRecoveryBusy = 139, - Init_USBServiceBusy = 140, - Init_VRWebHelperStartupFailed = 141, - Init_TrackerManagerInitFailed = 142, - Init_AlreadyRunning = 143, - Init_FailedForVrMonitor = 144, - Init_PropertyManagerInitFailed = 145, - Init_WebServerFailed = 146, - Init_IllegalTypeTransition = 147, - Init_MismatchedRuntimes = 148, - Init_InvalidProcessId = 149, - Init_VRServiceStartupFailed = 150, - Init_PrismNeedsNewDrivers = 151, - Init_PrismStartupTimedOut = 152, - Init_CouldNotStartPrism = 153, - Init_PrismClientInitFailed = 154, - Init_PrismClientStartFailed = 155, - Init_PrismExitedUnexpectedly = 156, - Init_BadLuid = 157, - Init_NoServerForAppContainer = 158, - Init_DuplicateBootstrapper = 159, - Init_VRDashboardServicePending = 160, - Init_VRDashboardServiceTimeout = 161, - Init_VRDashboardServiceStopped = 162, - Init_VRDashboardAlreadyStarted = 163, - Init_VRDashboardCopyFailed = 164, - Init_VRDashboardTokenFailure = 165, - Init_VRDashboardEnvironmentFailure = 166, - Init_VRDashboardPathFailure = 167, - Driver_Failed = 200, - Driver_Unknown = 201, - Driver_HmdUnknown = 202, - Driver_NotLoaded = 203, - Driver_RuntimeOutOfDate = 204, - Driver_HmdInUse = 205, - Driver_NotCalibrated = 206, - Driver_CalibrationInvalid = 207, - Driver_HmdDisplayNotFound = 208, - Driver_TrackedDeviceInterfaceUnknown = 209, - Driver_HmdDriverIdOutOfBounds = 211, - Driver_HmdDisplayMirrored = 212, - Driver_HmdDisplayNotFoundLaptop = 213, - Driver_PeerDriverNotInstalled = 214, - Driver_WirelessHmdNotConnected = 215, - IPC_ServerInitFailed = 300, - IPC_ConnectFailed = 301, - IPC_SharedStateInitFailed = 302, - IPC_CompositorInitFailed = 303, - IPC_MutexInitFailed = 304, - IPC_Failed = 305, - IPC_CompositorConnectFailed = 306, - IPC_CompositorInvalidConnectResponse = 307, - IPC_ConnectFailedAfterMultipleAttempts = 308, - IPC_ConnectFailedAfterTargetExited = 309, - IPC_NamespaceUnavailable = 310, - Compositor_Failed = 400, - Compositor_D3D11HardwareRequired = 401, - Compositor_FirmwareRequiresUpdate = 402, - Compositor_OverlayInitFailed = 403, - Compositor_ScreenshotsInitFailed = 404, - Compositor_UnableToCreateDevice = 405, - Compositor_SharedStateIsNull = 406, - Compositor_NotificationManagerIsNull = 407, - Compositor_ResourceManagerClientIsNull = 408, - Compositor_MessageOverlaySharedStateInitFailure = 409, - Compositor_PropertiesInterfaceIsNull = 410, - Compositor_CreateFullscreenWindowFailed = 411, - Compositor_SettingsInterfaceIsNull = 412, - Compositor_FailedToShowWindow = 413, - Compositor_DistortInterfaceIsNull = 414, - Compositor_DisplayFrequencyFailure = 415, - Compositor_RendererInitializationFailed = 416, - Compositor_DXGIFactoryInterfaceIsNull = 417, - Compositor_DXGIFactoryCreateFailed = 418, - Compositor_DXGIFactoryQueryFailed = 419, - Compositor_InvalidAdapterDesktop = 420, - Compositor_InvalidHmdAttachment = 421, - Compositor_InvalidOutputDesktop = 422, - Compositor_InvalidDeviceProvided = 423, - Compositor_D3D11RendererInitializationFailed = 424, - Compositor_FailedToFindDisplayMode = 425, - Compositor_FailedToCreateSwapChain = 426, - Compositor_FailedToGetBackBuffer = 427, - Compositor_FailedToCreateRenderTarget = 428, - Compositor_FailedToCreateDXGI2SwapChain = 429, - Compositor_FailedtoGetDXGI2BackBuffer = 430, - Compositor_FailedToCreateDXGI2RenderTarget = 431, - Compositor_FailedToGetDXGIDeviceInterface = 432, - Compositor_SelectDisplayMode = 433, - Compositor_FailedToCreateNvAPIRenderTargets = 434, - Compositor_NvAPISetDisplayMode = 435, - Compositor_FailedToCreateDirectModeDisplay = 436, - Compositor_InvalidHmdPropertyContainer = 437, - Compositor_UpdateDisplayFrequency = 438, - Compositor_CreateRasterizerState = 439, - Compositor_CreateWireframeRasterizerState = 440, - Compositor_CreateSamplerState = 441, - Compositor_CreateClampToBorderSamplerState = 442, - Compositor_CreateAnisoSamplerState = 443, - Compositor_CreateOverlaySamplerState = 444, - Compositor_CreatePanoramaSamplerState = 445, - Compositor_CreateFontSamplerState = 446, - Compositor_CreateNoBlendState = 447, - Compositor_CreateBlendState = 448, - Compositor_CreateAlphaBlendState = 449, - Compositor_CreateBlendStateMaskR = 450, - Compositor_CreateBlendStateMaskG = 451, - Compositor_CreateBlendStateMaskB = 452, - Compositor_CreateDepthStencilState = 453, - Compositor_CreateDepthStencilStateNoWrite = 454, - Compositor_CreateDepthStencilStateNoDepth = 455, - Compositor_CreateFlushTexture = 456, - Compositor_CreateDistortionSurfaces = 457, - Compositor_CreateConstantBuffer = 458, - Compositor_CreateHmdPoseConstantBuffer = 459, - Compositor_CreateHmdPoseStagingConstantBuffer = 460, - Compositor_CreateSharedFrameInfoConstantBuffer = 461, - Compositor_CreateOverlayConstantBuffer = 462, - Compositor_CreateSceneTextureIndexConstantBuffer = 463, - Compositor_CreateReadableSceneTextureIndexConstantBuffer = 464, - Compositor_CreateLayerGraphicsTextureIndexConstantBuffer = 465, - Compositor_CreateLayerComputeTextureIndexConstantBuffer = 466, - Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer = 467, - Compositor_CreateComputeHmdPoseConstantBuffer = 468, - Compositor_CreateGeomConstantBuffer = 469, - Compositor_CreatePanelMaskConstantBuffer = 470, - Compositor_CreatePixelSimUBO = 471, - Compositor_CreateMSAARenderTextures = 472, - Compositor_CreateResolveRenderTextures = 473, - Compositor_CreateComputeResolveRenderTextures = 474, - Compositor_CreateDriverDirectModeResolveTextures = 475, - Compositor_OpenDriverDirectModeResolveTextures = 476, - Compositor_CreateFallbackSyncTexture = 477, - Compositor_ShareFallbackSyncTexture = 478, - Compositor_CreateOverlayIndexBuffer = 479, - Compositor_CreateOverlayVertexBuffer = 480, - Compositor_CreateTextVertexBuffer = 481, - Compositor_CreateTextIndexBuffer = 482, - Compositor_CreateMirrorTextures = 483, - Compositor_CreateLastFrameRenderTexture = 484, - Compositor_CreateMirrorOverlay = 485, - Compositor_FailedToCreateVirtualDisplayBackbuffer = 486, - Compositor_DisplayModeNotSupported = 487, - Compositor_CreateOverlayInvalidCall = 488, - Compositor_CreateOverlayAlreadyInitialized = 489, - Compositor_FailedToCreateMailbox = 490, - Compositor_WindowInterfaceIsNull = 491, - Compositor_SystemLayerCreateInstance = 492, - Compositor_SystemLayerCreateSession = 493, - Compositor_CreateInverseDistortUVs = 494, - Compositor_CreateBackbufferDepth = 495, - Compositor_CannotDRMLeaseDisplay = 496, - Compositor_CannotConnectToDisplayServer = 497, - Compositor_GnomeNoDRMLeasing = 498, - Compositor_FailedToInitializeEncoder = 499, - Compositor_CreateBlurTexture = 500, - VendorSpecific_UnableToConnectToOculusRuntime = 1000, - VendorSpecific_WindowsNotInDevMode = 1001, - VendorSpecific_OculusLinkNotEnabled = 1002, - VendorSpecific_HmdFound_CantOpenDevice = 1101, - VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102, - VendorSpecific_HmdFound_NoStoredConfig = 1103, - VendorSpecific_HmdFound_ConfigTooBig = 1104, - VendorSpecific_HmdFound_ConfigTooSmall = 1105, - VendorSpecific_HmdFound_UnableToInitZLib = 1106, - VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107, - VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108, - VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109, - VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110, - VendorSpecific_HmdFound_UserDataAddressRange = 1111, - VendorSpecific_HmdFound_UserDataError = 1112, - VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113, - VendorSpecific_OculusRuntimeBadInstall = 1114, - VendorSpecific_HmdFound_UnexpectedConfiguration_1 = 1115, - Steam_SteamInstallationNotFound = 2000, - LastError = 2001, - } - public enum EVRScreenshotType - { - None = 0, - Mono = 1, - Stereo = 2, - Cubemap = 3, - MonoPanorama = 4, - StereoPanorama = 5, - } - public enum EVRScreenshotPropertyFilenames - { - Preview = 0, - VR = 1, - } - public enum EVRTrackedCameraError - { - None = 0, - OperationFailed = 100, - InvalidHandle = 101, - InvalidFrameHeaderVersion = 102, - OutOfHandles = 103, - IPCFailure = 104, - NotSupportedForThisDevice = 105, - SharedMemoryFailure = 106, - FrameBufferingFailure = 107, - StreamSetupFailure = 108, - InvalidGLTextureId = 109, - InvalidSharedTextureHandle = 110, - FailedToGetGLTextureId = 111, - SharedTextureFailure = 112, - NoFrameAvailable = 113, - InvalidArgument = 114, - InvalidFrameBufferSize = 115, - } - public enum EVRTrackedCameraFrameLayout - { - Mono = 1, - Stereo = 2, - VerticalLayout = 16, - HorizontalLayout = 32, - } - public enum EVRTrackedCameraFrameType - { - Distorted = 0, - Undistorted = 1, - MaximumUndistorted = 2, - MAX_CAMERA_FRAME_TYPES = 3, - } - public enum EVRDistortionFunctionType - { - None = 0, - FTheta = 1, - Extended_FTheta = 2, - MAX_DISTORTION_FUNCTION_TYPES = 3, - } - public enum EVSync - { - None = 0, - WaitRender = 1, - NoWaitRender = 2, - } - public enum EVRMuraCorrectionMode - { - Default = 0, - NoCorrection = 1, - } - public enum Imu_OffScaleFlags - { - OffScale_AccelX = 1, - OffScale_AccelY = 2, - OffScale_AccelZ = 4, - OffScale_GyroX = 8, - OffScale_GyroY = 16, - OffScale_GyroZ = 32, - } - public enum EVRApplicationError - { - None = 0, - AppKeyAlreadyExists = 100, - NoManifest = 101, - NoApplication = 102, - InvalidIndex = 103, - UnknownApplication = 104, - IPCFailed = 105, - ApplicationAlreadyRunning = 106, - InvalidManifest = 107, - InvalidApplication = 108, - LaunchFailed = 109, - ApplicationAlreadyStarting = 110, - LaunchInProgress = 111, - OldApplicationQuitting = 112, - TransitionAborted = 113, - IsTemplate = 114, - SteamVRIsExiting = 115, - BufferTooSmall = 200, - PropertyNotSet = 201, - UnknownProperty = 202, - InvalidParameter = 203, - NotImplemented = 300, - } - public enum EVRApplicationProperty - { - Name_String = 0, - LaunchType_String = 11, - WorkingDirectory_String = 12, - BinaryPath_String = 13, - Arguments_String = 14, - URL_String = 15, - Description_String = 50, - NewsURL_String = 51, - ImagePath_String = 52, - Source_String = 53, - ActionManifestURL_String = 54, - IsDashboardOverlay_Bool = 60, - IsTemplate_Bool = 61, - IsInstanced_Bool = 62, - IsInternal_Bool = 63, - WantsCompositorPauseInStandby_Bool = 64, - IsHidden_Bool = 65, - LastLaunchTime_Uint64 = 70, - } - public enum EVRSceneApplicationState - { - None = 0, - Starting = 1, - Quitting = 2, - Running = 3, - Waiting = 4, - } - public enum ChaperoneCalibrationState - { - OK = 1, - Warning = 100, - Warning_BaseStationMayHaveMoved = 101, - Warning_BaseStationRemoved = 102, - Warning_SeatedBoundsInvalid = 103, - Error = 200, - Error_BaseStationUninitialized = 201, - Error_BaseStationConflict = 202, - Error_PlayAreaInvalid = 203, - Error_CollisionBoundsInvalid = 204, - } - public enum EChaperoneConfigFile - { - Live = 1, - Temp = 2, - } - public enum EChaperoneImportFlags - { - EChaperoneImport_BoundsOnly = 1, - } - public enum EVRCompositorError - { - None = 0, - RequestFailed = 1, - IncompatibleVersion = 100, - DoNotHaveFocus = 101, - InvalidTexture = 102, - IsNotSceneApplication = 103, - TextureIsOnWrongDevice = 104, - TextureUsesUnsupportedFormat = 105, - SharedTexturesNotSupported = 106, - IndexOutOfRange = 107, - AlreadySubmitted = 108, - InvalidBounds = 109, - AlreadySet = 110, - } - public enum EVRCompositorTimingMode - { - Implicit = 0, - Explicit_RuntimePerformsPostPresentHandoff = 1, - Explicit_ApplicationPerformsPostPresentHandoff = 2, - } - public enum VROverlayInputMethod +public class CVRSystem +{ + IVRSystem FnTable; + internal CVRSystem(IntPtr pInterface) { - None = 0, - Mouse = 1, + FnTable = (IVRSystem)Marshal.PtrToStructure(pInterface, typeof(IVRSystem)); } - public enum VROverlayTransformType + public void GetRecommendedRenderTargetSize(ref uint pnWidth,ref uint pnHeight) { - VROverlayTransform_Invalid = -1, - VROverlayTransform_Absolute = 0, - VROverlayTransform_TrackedDeviceRelative = 1, - VROverlayTransform_TrackedComponent = 3, - VROverlayTransform_Cursor = 4, - VROverlayTransform_DashboardTab = 5, - VROverlayTransform_DashboardThumb = 6, - VROverlayTransform_Mountable = 7, - VROverlayTransform_Projection = 8, - VROverlayTransform_Subview = 9, + pnWidth = 0; + pnHeight = 0; + FnTable.GetRecommendedRenderTargetSize(ref pnWidth,ref pnHeight); } - public enum VROverlayFlags + public HmdMatrix44_t GetProjectionMatrix(EVREye eEye,float fNearZ,float fFarZ) { - NoDashboardTab = 8, - SendVRDiscreteScrollEvents = 64, - SendVRTouchpadEvents = 128, - ShowTouchPadScrollWheel = 256, - TransferOwnershipToInternalProcess = 512, - SideBySide_Parallel = 1024, - SideBySide_Crossed = 2048, - Panorama = 4096, - StereoPanorama = 8192, - SortWithNonSceneOverlays = 16384, - VisibleInDashboard = 32768, - MakeOverlaysInteractiveIfVisible = 65536, - SendVRSmoothScrollEvents = 131072, - ProtectedContent = 262144, - HideLaserIntersection = 524288, - WantsModalBehavior = 1048576, - IsPremultiplied = 2097152, - IgnoreTextureAlpha = 4194304, - EnableControlBar = 8388608, - EnableControlBarKeyboard = 16777216, - EnableControlBarClose = 33554432, - Reserved = 67108864, - EnableClickStabilization = 134217728, - MultiCursor = 268435456, + HmdMatrix44_t result = FnTable.GetProjectionMatrix(eEye,fNearZ,fFarZ); + return result; } - public enum VRMessageOverlayResponse + public void GetProjectionRaw(EVREye eEye,ref float pfLeft,ref float pfRight,ref float pfTop,ref float pfBottom) { - ButtonPress_0 = 0, - ButtonPress_1 = 1, - ButtonPress_2 = 2, - ButtonPress_3 = 3, - CouldntFindSystemOverlay = 4, - CouldntFindOrCreateClientOverlay = 5, - ApplicationQuit = 6, + pfLeft = 0; + pfRight = 0; + pfTop = 0; + pfBottom = 0; + FnTable.GetProjectionRaw(eEye,ref pfLeft,ref pfRight,ref pfTop,ref pfBottom); } - public enum EGamepadTextInputMode + public bool ComputeDistortion(EVREye eEye,float fU,float fV,ref DistortionCoordinates_t pDistortionCoordinates) { - k_EGamepadTextInputModeNormal = 0, - k_EGamepadTextInputModePassword = 1, - k_EGamepadTextInputModeSubmit = 2, + bool result = FnTable.ComputeDistortion(eEye,fU,fV,ref pDistortionCoordinates); + return result; } - public enum EGamepadTextInputLineMode + public HmdMatrix34_t GetEyeToHeadTransform(EVREye eEye) { - k_EGamepadTextInputLineModeSingleLine = 0, - k_EGamepadTextInputLineModeMultipleLines = 1, + HmdMatrix34_t result = FnTable.GetEyeToHeadTransform(eEye); + return result; } - public enum EVROverlayIntersectionMaskPrimitiveType + public bool GetTimeSinceLastVsync(ref float pfSecondsSinceLastVsync,ref ulong pulFrameCounter) { - OverlayIntersectionPrimitiveType_Rectangle = 0, - OverlayIntersectionPrimitiveType_Circle = 1, + pfSecondsSinceLastVsync = 0; + pulFrameCounter = 0; + bool result = FnTable.GetTimeSinceLastVsync(ref pfSecondsSinceLastVsync,ref pulFrameCounter); + return result; } - public enum EKeyboardFlags + public int GetD3D9AdapterIndex() { - KeyboardFlag_Minimal = 1, - KeyboardFlag_Modal = 2, - KeyboardFlag_ShowArrowKeys = 4, - KeyboardFlag_HideDoneKey = 8, + int result = FnTable.GetD3D9AdapterIndex(); + return result; } - public enum EDeviceType + public void GetDXGIOutputInfo(ref int pnAdapterIndex) { - Invalid = -1, - DirectX11 = 0, - Vulkan = 1, + pnAdapterIndex = 0; + FnTable.GetDXGIOutputInfo(ref pnAdapterIndex); } - public enum HeadsetViewMode_t + public void GetOutputDevice(ref ulong pnDevice,ETextureType textureType,IntPtr pInstance) { - HeadsetViewMode_Left = 0, - HeadsetViewMode_Right = 1, - HeadsetViewMode_Both = 2, + pnDevice = 0; + FnTable.GetOutputDevice(ref pnDevice,textureType,pInstance); } - public enum EVRRenderModelError + public bool IsDisplayOnDesktop() { - None = 0, - Loading = 100, - NotSupported = 200, - InvalidArg = 300, - InvalidModel = 301, - NoShapes = 302, - MultipleShapes = 303, - TooManyVertices = 304, - MultipleTextures = 305, - BufferTooSmall = 306, - NotEnoughNormals = 307, - NotEnoughTexCoords = 308, - InvalidTexture = 400, + bool result = FnTable.IsDisplayOnDesktop(); + return result; } - public enum EVRRenderModelTextureFormat + public bool SetDisplayVisibility(bool bIsVisibleOnDesktop) { - RGBA8_SRGB = 0, - BC2 = 1, - BC4 = 2, - BC7 = 3, - BC7_SRGB = 4, - RGBA16_FLOAT = 5, + bool result = FnTable.SetDisplayVisibility(bIsVisibleOnDesktop); + return result; } - public enum EVRNotificationType + public void GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin eOrigin,float fPredictedSecondsToPhotonsFromNow,TrackedDevicePose_t [] pTrackedDevicePoseArray) { - Transient = 0, - Persistent = 1, - Transient_SystemWithUserValue = 2, + FnTable.GetDeviceToAbsoluteTrackingPose(eOrigin,fPredictedSecondsToPhotonsFromNow,pTrackedDevicePoseArray,(uint) pTrackedDevicePoseArray.Length); } - public enum EVRNotificationStyle + public HmdMatrix34_t GetSeatedZeroPoseToStandingAbsoluteTrackingPose() { - None = 0, - Application = 100, - Contact_Disabled = 200, - Contact_Enabled = 201, - Contact_Active = 202, + HmdMatrix34_t result = FnTable.GetSeatedZeroPoseToStandingAbsoluteTrackingPose(); + return result; } - public enum EVRSettingsError + public HmdMatrix34_t GetRawZeroPoseToStandingAbsoluteTrackingPose() { - None = 0, - IPCFailed = 1, - WriteFailed = 2, - ReadFailed = 3, - JsonParseFailed = 4, - UnsetSettingHasNoDefault = 5, - AccessDenied = 6, + HmdMatrix34_t result = FnTable.GetRawZeroPoseToStandingAbsoluteTrackingPose(); + return result; } - public enum EVRScreenshotError + public uint GetSortedTrackedDeviceIndicesOfClass(ETrackedDeviceClass eTrackedDeviceClass,uint [] punTrackedDeviceIndexArray,uint unRelativeToTrackedDeviceIndex) { - None = 0, - RequestFailed = 1, - IncompatibleVersion = 100, - NotFound = 101, - BufferTooSmall = 102, - ScreenshotAlreadyInProgress = 108, + uint result = FnTable.GetSortedTrackedDeviceIndicesOfClass(eTrackedDeviceClass,punTrackedDeviceIndexArray,(uint) punTrackedDeviceIndexArray.Length,unRelativeToTrackedDeviceIndex); + return result; } - public enum EVRSkeletalTransformSpace + public EDeviceActivityLevel GetTrackedDeviceActivityLevel(uint unDeviceId) { - Model = 0, - Parent = 1, + EDeviceActivityLevel result = FnTable.GetTrackedDeviceActivityLevel(unDeviceId); + return result; } - public enum EVRSkeletalReferencePose + public void ApplyTransform(ref TrackedDevicePose_t pOutputPose,ref TrackedDevicePose_t pTrackedDevicePose,ref HmdMatrix34_t pTransform) { - BindPose = 0, - OpenHand = 1, - Fist = 2, - GripLimit = 3, + FnTable.ApplyTransform(ref pOutputPose,ref pTrackedDevicePose,ref pTransform); } - public enum EVRFinger + public uint GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole unDeviceType) { - Thumb = 0, - Index = 1, - Middle = 2, - Ring = 3, - Pinky = 4, - Count = 5, + uint result = FnTable.GetTrackedDeviceIndexForControllerRole(unDeviceType); + return result; } - public enum EVRFingerSplay + public ETrackedControllerRole GetControllerRoleForTrackedDeviceIndex(uint unDeviceIndex) { - Thumb_Index = 0, - Index_Middle = 1, - Middle_Ring = 2, - Ring_Pinky = 3, - Count = 4, + ETrackedControllerRole result = FnTable.GetControllerRoleForTrackedDeviceIndex(unDeviceIndex); + return result; } - public enum EVRSummaryType + public ETrackedDeviceClass GetTrackedDeviceClass(uint unDeviceIndex) { - FromAnimation = 0, - FromDevice = 1, + ETrackedDeviceClass result = FnTable.GetTrackedDeviceClass(unDeviceIndex); + return result; } - public enum EVRInputFilterCancelType + public bool IsTrackedDeviceConnected(uint unDeviceIndex) { - VRInputFilterCancel_Timers = 0, - VRInputFilterCancel_Momentum = 1, + bool result = FnTable.IsTrackedDeviceConnected(unDeviceIndex); + return result; } - public enum EVRInputStringBits + public bool GetBoolTrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,ref ETrackedPropertyError pError) { - VRInputString_Hand = 1, - VRInputString_ControllerType = 2, - VRInputString_InputSource = 4, - VRInputString_All = -1, + bool result = FnTable.GetBoolTrackedDeviceProperty(unDeviceIndex,prop,ref pError); + return result; } - public enum EIOBufferError + public float GetFloatTrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,ref ETrackedPropertyError pError) { - IOBuffer_Success = 0, - IOBuffer_OperationFailed = 100, - IOBuffer_InvalidHandle = 101, - IOBuffer_InvalidArgument = 102, - IOBuffer_PathExists = 103, - IOBuffer_PathDoesNotExist = 104, - IOBuffer_Permission = 105, + float result = FnTable.GetFloatTrackedDeviceProperty(unDeviceIndex,prop,ref pError); + return result; } - public enum EIOBufferMode + public int GetInt32TrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,ref ETrackedPropertyError pError) { - Read = 1, - Write = 2, - Create = 512, + int result = FnTable.GetInt32TrackedDeviceProperty(unDeviceIndex,prop,ref pError); + return result; } - public enum EVRDebugError + public ulong GetUint64TrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,ref ETrackedPropertyError pError) { - Success = 0, - BadParameter = 1, + ulong result = FnTable.GetUint64TrackedDeviceProperty(unDeviceIndex,prop,ref pError); + return result; } - public enum EPropertyWriteType + public HmdMatrix34_t GetMatrix34TrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,ref ETrackedPropertyError pError) { - PropertyWrite_Set = 0, - PropertyWrite_Erase = 1, - PropertyWrite_SetError = 2, + HmdMatrix34_t result = FnTable.GetMatrix34TrackedDeviceProperty(unDeviceIndex,prop,ref pError); + return result; } - public enum EBlockQueueError + public uint GetArrayTrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,uint propType,IntPtr pBuffer,uint unBufferSize,ref ETrackedPropertyError pError) { - None = 0, - QueueAlreadyExists = 1, - QueueNotFound = 2, - BlockNotAvailable = 3, - InvalidHandle = 4, - InvalidParam = 5, - ParamMismatch = 6, - InternalError = 7, - AlreadyInitialized = 8, - OperationIsServerOnly = 9, - TooManyConnections = 10, + uint result = FnTable.GetArrayTrackedDeviceProperty(unDeviceIndex,prop,propType,pBuffer,unBufferSize,ref pError); + return result; } - public enum EBlockQueueReadType + public uint GetStringTrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,System.Text.StringBuilder pchValue,uint unBufferSize,ref ETrackedPropertyError pError) { - BlockQueueRead_Latest = 0, - BlockQueueRead_New = 1, - BlockQueueRead_Next = 2, + uint result = FnTable.GetStringTrackedDeviceProperty(unDeviceIndex,prop,pchValue,unBufferSize,ref pError); + return result; } - public enum EBlockQueueCreationFlag + public string GetPropErrorNameFromEnum(ETrackedPropertyError error) { - BlockQueueFlag_OwnerIsReader = 1, + IntPtr result = FnTable.GetPropErrorNameFromEnum(error); + return Marshal.PtrToStringAnsi(result); } - +// This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were +// originally mis-compiled with the wrong packing for Linux and OSX. + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _PollNextEventPacked(ref VREvent_t_Packed pEvent,uint uncbVREvent); [StructLayout(LayoutKind.Explicit)] - public struct VREvent_Data_t + struct PollNextEventUnion { - [FieldOffset(0)] public VREvent_Reserved_t reserved; - [FieldOffset(0)] public VREvent_Controller_t controller; - [FieldOffset(0)] public VREvent_Mouse_t mouse; - [FieldOffset(0)] public VREvent_Scroll_t scroll; - [FieldOffset(0)] public VREvent_Process_t process; - [FieldOffset(0)] public VREvent_Notification_t notification; - [FieldOffset(0)] public VREvent_Overlay_t overlay; - [FieldOffset(0)] public VREvent_Status_t status; - [FieldOffset(0)] public VREvent_Ipd_t ipd; - [FieldOffset(0)] public VREvent_Chaperone_t chaperone; - [FieldOffset(0)] public VREvent_PerformanceTest_t performanceTest; - [FieldOffset(0)] public VREvent_TouchPadMove_t touchPadMove; - [FieldOffset(0)] public VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset; - [FieldOffset(0)] public VREvent_Screenshot_t screenshot; - [FieldOffset(0)] public VREvent_ScreenshotProgress_t screenshotProgress; - [FieldOffset(0)] public VREvent_ApplicationLaunch_t applicationLaunch; - [FieldOffset(0)] public VREvent_EditingCameraSurface_t cameraSurface; - [FieldOffset(0)] public VREvent_MessageOverlay_t messageOverlay; - [FieldOffset(0)] public VREvent_Property_t property; - [FieldOffset(0)] public VREvent_HapticVibration_t hapticVibration; - [FieldOffset(0)] public VREvent_WebConsole_t webConsole; - [FieldOffset(0)] public VREvent_InputBindingLoad_t inputBinding; - [FieldOffset(0)] public VREvent_SpatialAnchor_t spatialAnchor; - [FieldOffset(0)] public VREvent_InputActionManifestLoad_t actionManifest; - [FieldOffset(0)] public VREvent_ProgressUpdate_t progressUpdate; - [FieldOffset(0)] public VREvent_ShowUI_t showUi; - [FieldOffset(0)] public VREvent_ShowDevTools_t showDevTools; - [FieldOffset(0)] public VREvent_HDCPError_t hdcpError; - [FieldOffset(0)] public VREvent_AudioVolumeControl_t audioVolumeControl; - [FieldOffset(0)] public VREvent_AudioMuteControl_t audioMuteControl; - [FieldOffset(0)] public VREvent_Keyboard_t keyboard; // This has to be at the end due to a mono bug + [FieldOffset(0)] + public IVRSystem._PollNextEvent pPollNextEvent; + [FieldOffset(0)] + public _PollNextEventPacked pPollNextEventPacked; } + public bool PollNextEvent(ref VREvent_t pEvent,uint uncbVREvent) + { +#if !UNITY_METRO + if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || + (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) + { + PollNextEventUnion u; + VREvent_t_Packed event_packed = new VREvent_t_Packed(); + u.pPollNextEventPacked = null; + u.pPollNextEvent = FnTable.PollNextEvent; + bool packed_result = u.pPollNextEventPacked(ref event_packed,(uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t_Packed))); - + event_packed.Unpack(ref pEvent); + return packed_result; + } +#endif + bool result = FnTable.PollNextEvent(ref pEvent,uncbVREvent); + return result; + } +// This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were +// originally mis-compiled with the wrong packing for Linux and OSX. + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _PollNextEventWithPosePacked(ETrackingUniverseOrigin eOrigin,ref VREvent_t_Packed pEvent,uint uncbVREvent,ref TrackedDevicePose_t pTrackedDevicePose); [StructLayout(LayoutKind.Explicit)] - public struct VROverlayIntersectionMaskPrimitive_Data_t + struct PollNextEventWithPoseUnion { - [FieldOffset(0)] public IntersectionMaskRectangle_t m_Rectangle; - [FieldOffset(0)] public IntersectionMaskCircle_t m_Circle; + [FieldOffset(0)] + public IVRSystem._PollNextEventWithPose pPollNextEventWithPose; + [FieldOffset(0)] + public _PollNextEventWithPosePacked pPollNextEventWithPosePacked; } - - [StructLayout(LayoutKind.Sequential)] - public struct HmdMatrix34_t + public bool PollNextEventWithPose(ETrackingUniverseOrigin eOrigin,ref VREvent_t pEvent,uint uncbVREvent,ref TrackedDevicePose_t pTrackedDevicePose) { - public float m0; //float[3][4] - public float m1; - public float m2; - public float m3; - public float m4; - public float m5; - public float m6; - public float m7; - public float m8; - public float m9; - public float m10; - public float m11; +#if !UNITY_METRO + if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || + (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) + { + PollNextEventWithPoseUnion u; + VREvent_t_Packed event_packed = new VREvent_t_Packed(); + u.pPollNextEventWithPosePacked = null; + u.pPollNextEventWithPose = FnTable.PollNextEventWithPose; + bool packed_result = u.pPollNextEventWithPosePacked(eOrigin,ref event_packed,(uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t_Packed)),ref pTrackedDevicePose); + + event_packed.Unpack(ref pEvent); + return packed_result; + } +#endif + bool result = FnTable.PollNextEventWithPose(eOrigin,ref pEvent,uncbVREvent,ref pTrackedDevicePose); + return result; + } + public bool PollNextEventWithPoseAndOverlays(ETrackingUniverseOrigin eOrigin,ref VREvent_t pEvent,uint uncbVREvent,ref TrackedDevicePose_t pTrackedDevicePose,ref ulong pulOverlayHandle) + { + pulOverlayHandle = 0; + bool result = FnTable.PollNextEventWithPoseAndOverlays(eOrigin,ref pEvent,uncbVREvent,ref pTrackedDevicePose,ref pulOverlayHandle); + return result; + } + public string GetEventTypeNameFromEnum(EVREventType eType) + { + IntPtr result = FnTable.GetEventTypeNameFromEnum(eType); + return Marshal.PtrToStringAnsi(result); + } + public HiddenAreaMesh_t GetHiddenAreaMesh(EVREye eEye,EHiddenAreaMeshType type) + { + HiddenAreaMesh_t result = FnTable.GetHiddenAreaMesh(eEye,type); + return result; + } +// This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were +// originally mis-compiled with the wrong packing for Linux and OSX. + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetControllerStatePacked(uint unControllerDeviceIndex,ref VRControllerState_t_Packed pControllerState,uint unControllerStateSize); + [StructLayout(LayoutKind.Explicit)] + struct GetControllerStateUnion + { + [FieldOffset(0)] + public IVRSystem._GetControllerState pGetControllerState; + [FieldOffset(0)] + public _GetControllerStatePacked pGetControllerStatePacked; + } + public bool GetControllerState(uint unControllerDeviceIndex,ref VRControllerState_t pControllerState,uint unControllerStateSize) + { +#if !UNITY_METRO + if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || + (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) + { + GetControllerStateUnion u; + VRControllerState_t_Packed state_packed = new VRControllerState_t_Packed(pControllerState); + u.pGetControllerStatePacked = null; + u.pGetControllerState = FnTable.GetControllerState; + bool packed_result = u.pGetControllerStatePacked(unControllerDeviceIndex,ref state_packed,(uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VRControllerState_t_Packed))); + + state_packed.Unpack(ref pControllerState); + return packed_result; + } +#endif + bool result = FnTable.GetControllerState(unControllerDeviceIndex,ref pControllerState,unControllerStateSize); + return result; + } +// This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were +// originally mis-compiled with the wrong packing for Linux and OSX. + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetControllerStateWithPosePacked(ETrackingUniverseOrigin eOrigin,uint unControllerDeviceIndex,ref VRControllerState_t_Packed pControllerState,uint unControllerStateSize,ref TrackedDevicePose_t pTrackedDevicePose); + [StructLayout(LayoutKind.Explicit)] + struct GetControllerStateWithPoseUnion + { + [FieldOffset(0)] + public IVRSystem._GetControllerStateWithPose pGetControllerStateWithPose; + [FieldOffset(0)] + public _GetControllerStateWithPosePacked pGetControllerStateWithPosePacked; + } + public bool GetControllerStateWithPose(ETrackingUniverseOrigin eOrigin,uint unControllerDeviceIndex,ref VRControllerState_t pControllerState,uint unControllerStateSize,ref TrackedDevicePose_t pTrackedDevicePose) + { +#if !UNITY_METRO + if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || + (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) + { + GetControllerStateWithPoseUnion u; + VRControllerState_t_Packed state_packed = new VRControllerState_t_Packed(pControllerState); + u.pGetControllerStateWithPosePacked = null; + u.pGetControllerStateWithPose = FnTable.GetControllerStateWithPose; + bool packed_result = u.pGetControllerStateWithPosePacked(eOrigin,unControllerDeviceIndex,ref state_packed,(uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VRControllerState_t_Packed)),ref pTrackedDevicePose); + + state_packed.Unpack(ref pControllerState); + return packed_result; + } +#endif + bool result = FnTable.GetControllerStateWithPose(eOrigin,unControllerDeviceIndex,ref pControllerState,unControllerStateSize,ref pTrackedDevicePose); + return result; + } + public void TriggerHapticPulse(uint unControllerDeviceIndex,uint unAxisId,ushort usDurationMicroSec) + { + FnTable.TriggerHapticPulse(unControllerDeviceIndex,unAxisId,usDurationMicroSec); + } + public string GetButtonIdNameFromEnum(EVRButtonId eButtonId) + { + IntPtr result = FnTable.GetButtonIdNameFromEnum(eButtonId); + return Marshal.PtrToStringAnsi(result); + } + public string GetControllerAxisTypeNameFromEnum(EVRControllerAxisType eAxisType) + { + IntPtr result = FnTable.GetControllerAxisTypeNameFromEnum(eAxisType); + return Marshal.PtrToStringAnsi(result); + } + public bool IsInputAvailable() + { + bool result = FnTable.IsInputAvailable(); + return result; + } + public bool IsSteamVRDrawingControllers() + { + bool result = FnTable.IsSteamVRDrawingControllers(); + return result; + } + public bool ShouldApplicationPause() + { + bool result = FnTable.ShouldApplicationPause(); + return result; + } + public bool ShouldApplicationReduceRenderingWork() + { + bool result = FnTable.ShouldApplicationReduceRenderingWork(); + return result; + } + public EVRFirmwareError PerformFirmwareUpdate(uint unDeviceIndex) + { + EVRFirmwareError result = FnTable.PerformFirmwareUpdate(unDeviceIndex); + return result; + } + public void AcknowledgeQuit_Exiting() + { + FnTable.AcknowledgeQuit_Exiting(); + } + public uint GetAppContainerFilePaths(System.Text.StringBuilder pchBuffer,uint unBufferSize) + { + uint result = FnTable.GetAppContainerFilePaths(pchBuffer,unBufferSize); + return result; + } + public string GetRuntimeVersion() + { + IntPtr result = FnTable.GetRuntimeVersion(); + return Marshal.PtrToStringAnsi(result); + } +} + + +public class CVRExtendedDisplay +{ + IVRExtendedDisplay FnTable; + internal CVRExtendedDisplay(IntPtr pInterface) + { + FnTable = (IVRExtendedDisplay)Marshal.PtrToStructure(pInterface, typeof(IVRExtendedDisplay)); + } + public void GetWindowBounds(ref int pnX,ref int pnY,ref uint pnWidth,ref uint pnHeight) + { + pnX = 0; + pnY = 0; + pnWidth = 0; + pnHeight = 0; + FnTable.GetWindowBounds(ref pnX,ref pnY,ref pnWidth,ref pnHeight); + } + public void GetEyeOutputViewport(EVREye eEye,ref uint pnX,ref uint pnY,ref uint pnWidth,ref uint pnHeight) + { + pnX = 0; + pnY = 0; + pnWidth = 0; + pnHeight = 0; + FnTable.GetEyeOutputViewport(eEye,ref pnX,ref pnY,ref pnWidth,ref pnHeight); + } + public void GetDXGIOutputInfo(ref int pnAdapterIndex,ref int pnAdapterOutputIndex) + { + pnAdapterIndex = 0; + pnAdapterOutputIndex = 0; + FnTable.GetDXGIOutputInfo(ref pnAdapterIndex,ref pnAdapterOutputIndex); + } +} + + +public class CVRTrackedCamera +{ + IVRTrackedCamera FnTable; + internal CVRTrackedCamera(IntPtr pInterface) + { + FnTable = (IVRTrackedCamera)Marshal.PtrToStructure(pInterface, typeof(IVRTrackedCamera)); + } + public string GetCameraErrorNameFromEnum(EVRTrackedCameraError eCameraError) + { + IntPtr result = FnTable.GetCameraErrorNameFromEnum(eCameraError); + return Marshal.PtrToStringAnsi(result); + } + public EVRTrackedCameraError HasCamera(uint nDeviceIndex,ref bool pHasCamera) + { + pHasCamera = false; + EVRTrackedCameraError result = FnTable.HasCamera(nDeviceIndex,ref pHasCamera); + return result; + } + public EVRTrackedCameraError GetCameraFrameSize(uint nDeviceIndex,EVRTrackedCameraFrameType eFrameType,ref uint pnWidth,ref uint pnHeight,ref uint pnFrameBufferSize) + { + pnWidth = 0; + pnHeight = 0; + pnFrameBufferSize = 0; + EVRTrackedCameraError result = FnTable.GetCameraFrameSize(nDeviceIndex,eFrameType,ref pnWidth,ref pnHeight,ref pnFrameBufferSize); + return result; + } + public EVRTrackedCameraError GetCameraIntrinsics(uint nDeviceIndex,uint nCameraIndex,EVRTrackedCameraFrameType eFrameType,ref HmdVector2_t pFocalLength,ref HmdVector2_t pCenter) + { + EVRTrackedCameraError result = FnTable.GetCameraIntrinsics(nDeviceIndex,nCameraIndex,eFrameType,ref pFocalLength,ref pCenter); + return result; + } + public EVRTrackedCameraError GetCameraProjection(uint nDeviceIndex,uint nCameraIndex,EVRTrackedCameraFrameType eFrameType,float flZNear,float flZFar,ref HmdMatrix44_t pProjection) + { + EVRTrackedCameraError result = FnTable.GetCameraProjection(nDeviceIndex,nCameraIndex,eFrameType,flZNear,flZFar,ref pProjection); + return result; + } + public EVRTrackedCameraError AcquireVideoStreamingService(uint nDeviceIndex,ref ulong pHandle) + { + pHandle = 0; + EVRTrackedCameraError result = FnTable.AcquireVideoStreamingService(nDeviceIndex,ref pHandle); + return result; + } + public EVRTrackedCameraError ReleaseVideoStreamingService(ulong hTrackedCamera) + { + EVRTrackedCameraError result = FnTable.ReleaseVideoStreamingService(hTrackedCamera); + return result; + } + public EVRTrackedCameraError GetVideoStreamFrameBuffer(ulong hTrackedCamera,EVRTrackedCameraFrameType eFrameType,IntPtr pFrameBuffer,uint nFrameBufferSize,ref CameraVideoStreamFrameHeader_t pFrameHeader,uint nFrameHeaderSize) + { + EVRTrackedCameraError result = FnTable.GetVideoStreamFrameBuffer(hTrackedCamera,eFrameType,pFrameBuffer,nFrameBufferSize,ref pFrameHeader,nFrameHeaderSize); + return result; + } + public EVRTrackedCameraError GetVideoStreamTextureSize(uint nDeviceIndex,EVRTrackedCameraFrameType eFrameType,ref VRTextureBounds_t pTextureBounds,ref uint pnWidth,ref uint pnHeight) + { + pnWidth = 0; + pnHeight = 0; + EVRTrackedCameraError result = FnTable.GetVideoStreamTextureSize(nDeviceIndex,eFrameType,ref pTextureBounds,ref pnWidth,ref pnHeight); + return result; + } + public EVRTrackedCameraError GetVideoStreamTextureD3D11(ulong hTrackedCamera,EVRTrackedCameraFrameType eFrameType,IntPtr pD3D11DeviceOrResource,ref IntPtr ppD3D11ShaderResourceView,ref CameraVideoStreamFrameHeader_t pFrameHeader,uint nFrameHeaderSize) + { + EVRTrackedCameraError result = FnTable.GetVideoStreamTextureD3D11(hTrackedCamera,eFrameType,pD3D11DeviceOrResource,ref ppD3D11ShaderResourceView,ref pFrameHeader,nFrameHeaderSize); + return result; + } + public EVRTrackedCameraError GetVideoStreamTextureGL(ulong hTrackedCamera,EVRTrackedCameraFrameType eFrameType,ref uint pglTextureId,ref CameraVideoStreamFrameHeader_t pFrameHeader,uint nFrameHeaderSize) + { + pglTextureId = 0; + EVRTrackedCameraError result = FnTable.GetVideoStreamTextureGL(hTrackedCamera,eFrameType,ref pglTextureId,ref pFrameHeader,nFrameHeaderSize); + return result; + } + public EVRTrackedCameraError ReleaseVideoStreamTextureGL(ulong hTrackedCamera,uint glTextureId) + { + EVRTrackedCameraError result = FnTable.ReleaseVideoStreamTextureGL(hTrackedCamera,glTextureId); + return result; + } + public void SetCameraTrackingSpace(ETrackingUniverseOrigin eUniverse) + { + FnTable.SetCameraTrackingSpace(eUniverse); + } + public ETrackingUniverseOrigin GetCameraTrackingSpace() + { + ETrackingUniverseOrigin result = FnTable.GetCameraTrackingSpace(); + return result; + } +} + + +public class CVRApplications +{ + IVRApplications FnTable; + internal CVRApplications(IntPtr pInterface) + { + FnTable = (IVRApplications)Marshal.PtrToStructure(pInterface, typeof(IVRApplications)); + } + public EVRApplicationError AddApplicationManifest(string pchApplicationManifestFullPath,bool bTemporary) + { + IntPtr pchApplicationManifestFullPathUtf8 = Utils.ToUtf8(pchApplicationManifestFullPath); + EVRApplicationError result = FnTable.AddApplicationManifest(pchApplicationManifestFullPathUtf8,bTemporary); + Marshal.FreeHGlobal(pchApplicationManifestFullPathUtf8); + return result; + } + public EVRApplicationError RemoveApplicationManifest(string pchApplicationManifestFullPath) + { + IntPtr pchApplicationManifestFullPathUtf8 = Utils.ToUtf8(pchApplicationManifestFullPath); + EVRApplicationError result = FnTable.RemoveApplicationManifest(pchApplicationManifestFullPathUtf8); + Marshal.FreeHGlobal(pchApplicationManifestFullPathUtf8); + return result; + } + public bool IsApplicationInstalled(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + bool result = FnTable.IsApplicationInstalled(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public uint GetApplicationCount() + { + uint result = FnTable.GetApplicationCount(); + return result; + } + public EVRApplicationError GetApplicationKeyByIndex(uint unApplicationIndex,System.Text.StringBuilder pchAppKeyBuffer,uint unAppKeyBufferLen) + { + EVRApplicationError result = FnTable.GetApplicationKeyByIndex(unApplicationIndex,pchAppKeyBuffer,unAppKeyBufferLen); + return result; + } + public EVRApplicationError GetApplicationKeyByProcessId(uint unProcessId,System.Text.StringBuilder pchAppKeyBuffer,uint unAppKeyBufferLen) + { + EVRApplicationError result = FnTable.GetApplicationKeyByProcessId(unProcessId,pchAppKeyBuffer,unAppKeyBufferLen); + return result; + } + public EVRApplicationError LaunchApplication(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRApplicationError result = FnTable.LaunchApplication(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public EVRApplicationError LaunchTemplateApplication(string pchTemplateAppKey,string pchNewAppKey,AppOverrideKeys_t [] pKeys) + { + IntPtr pchTemplateAppKeyUtf8 = Utils.ToUtf8(pchTemplateAppKey); + IntPtr pchNewAppKeyUtf8 = Utils.ToUtf8(pchNewAppKey); + EVRApplicationError result = FnTable.LaunchTemplateApplication(pchTemplateAppKeyUtf8,pchNewAppKeyUtf8,pKeys,(uint) pKeys.Length); + Marshal.FreeHGlobal(pchTemplateAppKeyUtf8); + Marshal.FreeHGlobal(pchNewAppKeyUtf8); + return result; + } + public EVRApplicationError LaunchApplicationFromMimeType(string pchMimeType,string pchArgs) + { + IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); + IntPtr pchArgsUtf8 = Utils.ToUtf8(pchArgs); + EVRApplicationError result = FnTable.LaunchApplicationFromMimeType(pchMimeTypeUtf8,pchArgsUtf8); + Marshal.FreeHGlobal(pchMimeTypeUtf8); + Marshal.FreeHGlobal(pchArgsUtf8); + return result; + } + public EVRApplicationError LaunchDashboardOverlay(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRApplicationError result = FnTable.LaunchDashboardOverlay(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public bool CancelApplicationLaunch(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + bool result = FnTable.CancelApplicationLaunch(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public EVRApplicationError IdentifyApplication(uint unProcessId,string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRApplicationError result = FnTable.IdentifyApplication(unProcessId,pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public uint GetApplicationProcessId(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + uint result = FnTable.GetApplicationProcessId(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public string GetApplicationsErrorNameFromEnum(EVRApplicationError error) + { + IntPtr result = FnTable.GetApplicationsErrorNameFromEnum(error); + return Marshal.PtrToStringAnsi(result); + } + public uint GetApplicationPropertyString(string pchAppKey,EVRApplicationProperty eProperty,System.Text.StringBuilder pchPropertyValueBuffer,uint unPropertyValueBufferLen,ref EVRApplicationError peError) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + uint result = FnTable.GetApplicationPropertyString(pchAppKeyUtf8,eProperty,pchPropertyValueBuffer,unPropertyValueBufferLen,ref peError); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public bool GetApplicationPropertyBool(string pchAppKey,EVRApplicationProperty eProperty,ref EVRApplicationError peError) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + bool result = FnTable.GetApplicationPropertyBool(pchAppKeyUtf8,eProperty,ref peError); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public ulong GetApplicationPropertyUint64(string pchAppKey,EVRApplicationProperty eProperty,ref EVRApplicationError peError) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + ulong result = FnTable.GetApplicationPropertyUint64(pchAppKeyUtf8,eProperty,ref peError); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public EVRApplicationError SetApplicationAutoLaunch(string pchAppKey,bool bAutoLaunch) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRApplicationError result = FnTable.SetApplicationAutoLaunch(pchAppKeyUtf8,bAutoLaunch); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public bool GetApplicationAutoLaunch(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + bool result = FnTable.GetApplicationAutoLaunch(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public EVRApplicationError SetDefaultApplicationForMimeType(string pchAppKey,string pchMimeType) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); + EVRApplicationError result = FnTable.SetDefaultApplicationForMimeType(pchAppKeyUtf8,pchMimeTypeUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchMimeTypeUtf8); + return result; + } + public bool GetDefaultApplicationForMimeType(string pchMimeType,System.Text.StringBuilder pchAppKeyBuffer,uint unAppKeyBufferLen) + { + IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); + bool result = FnTable.GetDefaultApplicationForMimeType(pchMimeTypeUtf8,pchAppKeyBuffer,unAppKeyBufferLen); + Marshal.FreeHGlobal(pchMimeTypeUtf8); + return result; + } + public bool GetApplicationSupportedMimeTypes(string pchAppKey,System.Text.StringBuilder pchMimeTypesBuffer,uint unMimeTypesBuffer) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + bool result = FnTable.GetApplicationSupportedMimeTypes(pchAppKeyUtf8,pchMimeTypesBuffer,unMimeTypesBuffer); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public uint GetApplicationsThatSupportMimeType(string pchMimeType,System.Text.StringBuilder pchAppKeysThatSupportBuffer,uint unAppKeysThatSupportBuffer) + { + IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); + uint result = FnTable.GetApplicationsThatSupportMimeType(pchMimeTypeUtf8,pchAppKeysThatSupportBuffer,unAppKeysThatSupportBuffer); + Marshal.FreeHGlobal(pchMimeTypeUtf8); + return result; + } + public uint GetApplicationLaunchArguments(uint unHandle,System.Text.StringBuilder pchArgs,uint unArgs) + { + uint result = FnTable.GetApplicationLaunchArguments(unHandle,pchArgs,unArgs); + return result; + } + public EVRApplicationError GetStartingApplication(System.Text.StringBuilder pchAppKeyBuffer,uint unAppKeyBufferLen) + { + EVRApplicationError result = FnTable.GetStartingApplication(pchAppKeyBuffer,unAppKeyBufferLen); + return result; + } + public EVRSceneApplicationState GetSceneApplicationState() + { + EVRSceneApplicationState result = FnTable.GetSceneApplicationState(); + return result; + } + public EVRApplicationError PerformApplicationPrelaunchCheck(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRApplicationError result = FnTable.PerformApplicationPrelaunchCheck(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public string GetSceneApplicationStateNameFromEnum(EVRSceneApplicationState state) + { + IntPtr result = FnTable.GetSceneApplicationStateNameFromEnum(state); + return Marshal.PtrToStringAnsi(result); + } + public EVRApplicationError LaunchInternalProcess(string pchBinaryPath,string pchArguments,string pchWorkingDirectory) + { + IntPtr pchBinaryPathUtf8 = Utils.ToUtf8(pchBinaryPath); + IntPtr pchArgumentsUtf8 = Utils.ToUtf8(pchArguments); + IntPtr pchWorkingDirectoryUtf8 = Utils.ToUtf8(pchWorkingDirectory); + EVRApplicationError result = FnTable.LaunchInternalProcess(pchBinaryPathUtf8,pchArgumentsUtf8,pchWorkingDirectoryUtf8); + Marshal.FreeHGlobal(pchBinaryPathUtf8); + Marshal.FreeHGlobal(pchArgumentsUtf8); + Marshal.FreeHGlobal(pchWorkingDirectoryUtf8); + return result; + } + public uint GetCurrentSceneProcessId() + { + uint result = FnTable.GetCurrentSceneProcessId(); + return result; + } +} + + +public class CVRChaperone +{ + IVRChaperone FnTable; + internal CVRChaperone(IntPtr pInterface) + { + FnTable = (IVRChaperone)Marshal.PtrToStructure(pInterface, typeof(IVRChaperone)); + } + public ChaperoneCalibrationState GetCalibrationState() + { + ChaperoneCalibrationState result = FnTable.GetCalibrationState(); + return result; + } + public bool GetPlayAreaSize(ref float pSizeX,ref float pSizeZ) + { + pSizeX = 0; + pSizeZ = 0; + bool result = FnTable.GetPlayAreaSize(ref pSizeX,ref pSizeZ); + return result; + } + public bool GetPlayAreaRect(ref HmdQuad_t rect) + { + bool result = FnTable.GetPlayAreaRect(ref rect); + return result; + } + public void ReloadInfo() + { + FnTable.ReloadInfo(); + } + public void SetSceneColor(HmdColor_t color) + { + FnTable.SetSceneColor(color); + } + public void GetBoundsColor(ref HmdColor_t pOutputColorArray,int nNumOutputColors,float flCollisionBoundsFadeDistance,ref HmdColor_t pOutputCameraColor) + { + FnTable.GetBoundsColor(ref pOutputColorArray,nNumOutputColors,flCollisionBoundsFadeDistance,ref pOutputCameraColor); + } + public bool AreBoundsVisible() + { + bool result = FnTable.AreBoundsVisible(); + return result; + } + public void ForceBoundsVisible(bool bForce) + { + FnTable.ForceBoundsVisible(bForce); + } + public void ResetZeroPose(ETrackingUniverseOrigin eTrackingUniverseOrigin) + { + FnTable.ResetZeroPose(eTrackingUniverseOrigin); + } +} + + +public class CVRChaperoneSetup +{ + IVRChaperoneSetup FnTable; + internal CVRChaperoneSetup(IntPtr pInterface) + { + FnTable = (IVRChaperoneSetup)Marshal.PtrToStructure(pInterface, typeof(IVRChaperoneSetup)); + } + public bool CommitWorkingCopy(EChaperoneConfigFile configFile) + { + bool result = FnTable.CommitWorkingCopy(configFile); + return result; + } + public void RevertWorkingCopy() + { + FnTable.RevertWorkingCopy(); + } + public bool GetWorkingPlayAreaSize(ref float pSizeX,ref float pSizeZ) + { + pSizeX = 0; + pSizeZ = 0; + bool result = FnTable.GetWorkingPlayAreaSize(ref pSizeX,ref pSizeZ); + return result; + } + public bool GetWorkingPlayAreaRect(ref HmdQuad_t rect) + { + bool result = FnTable.GetWorkingPlayAreaRect(ref rect); + return result; + } + public bool GetWorkingCollisionBoundsInfo(out HmdQuad_t [] pQuadsBuffer) + { + uint punQuadsCount = 0; + bool result = FnTable.GetWorkingCollisionBoundsInfo(null,ref punQuadsCount); + pQuadsBuffer= new HmdQuad_t[punQuadsCount]; + result = FnTable.GetWorkingCollisionBoundsInfo(pQuadsBuffer,ref punQuadsCount); + return result; + } + public bool GetLiveCollisionBoundsInfo(out HmdQuad_t [] pQuadsBuffer) + { + uint punQuadsCount = 0; + bool result = FnTable.GetLiveCollisionBoundsInfo(null,ref punQuadsCount); + pQuadsBuffer= new HmdQuad_t[punQuadsCount]; + result = FnTable.GetLiveCollisionBoundsInfo(pQuadsBuffer,ref punQuadsCount); + return result; + } + public bool GetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose) + { + bool result = FnTable.GetWorkingSeatedZeroPoseToRawTrackingPose(ref pmatSeatedZeroPoseToRawTrackingPose); + return result; + } + public bool GetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatStandingZeroPoseToRawTrackingPose) + { + bool result = FnTable.GetWorkingStandingZeroPoseToRawTrackingPose(ref pmatStandingZeroPoseToRawTrackingPose); + return result; + } + public void SetWorkingPlayAreaSize(float sizeX,float sizeZ) + { + FnTable.SetWorkingPlayAreaSize(sizeX,sizeZ); + } + public void SetWorkingCollisionBoundsInfo(HmdQuad_t [] pQuadsBuffer) + { + FnTable.SetWorkingCollisionBoundsInfo(pQuadsBuffer,(uint) pQuadsBuffer.Length); + } + public void SetWorkingPerimeter(HmdVector2_t [] pPointBuffer) + { + FnTable.SetWorkingPerimeter(pPointBuffer,(uint) pPointBuffer.Length); + } + public void SetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatSeatedZeroPoseToRawTrackingPose) + { + FnTable.SetWorkingSeatedZeroPoseToRawTrackingPose(ref pMatSeatedZeroPoseToRawTrackingPose); + } + public void SetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatStandingZeroPoseToRawTrackingPose) + { + FnTable.SetWorkingStandingZeroPoseToRawTrackingPose(ref pMatStandingZeroPoseToRawTrackingPose); + } + public void ReloadFromDisk(EChaperoneConfigFile configFile) + { + FnTable.ReloadFromDisk(configFile); + } + public bool GetLiveSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose) + { + bool result = FnTable.GetLiveSeatedZeroPoseToRawTrackingPose(ref pmatSeatedZeroPoseToRawTrackingPose); + return result; + } + public bool ExportLiveToBuffer(System.Text.StringBuilder pBuffer,ref uint pnBufferLength) + { + pnBufferLength = 0; + bool result = FnTable.ExportLiveToBuffer(pBuffer,ref pnBufferLength); + return result; + } + public bool ImportFromBufferToWorking(string pBuffer,uint nImportFlags) + { + IntPtr pBufferUtf8 = Utils.ToUtf8(pBuffer); + bool result = FnTable.ImportFromBufferToWorking(pBufferUtf8,nImportFlags); + Marshal.FreeHGlobal(pBufferUtf8); + return result; + } + public void ShowWorkingSetPreview() + { + FnTable.ShowWorkingSetPreview(); + } + public void HideWorkingSetPreview() + { + FnTable.HideWorkingSetPreview(); + } + public void RoomSetupStarting() + { + FnTable.RoomSetupStarting(); + } +} + + +public class CVRCompositor +{ + IVRCompositor FnTable; + internal CVRCompositor(IntPtr pInterface) + { + FnTable = (IVRCompositor)Marshal.PtrToStructure(pInterface, typeof(IVRCompositor)); + } + public void SetTrackingSpace(ETrackingUniverseOrigin eOrigin) + { + FnTable.SetTrackingSpace(eOrigin); + } + public ETrackingUniverseOrigin GetTrackingSpace() + { + ETrackingUniverseOrigin result = FnTable.GetTrackingSpace(); + return result; + } + public EVRCompositorError WaitGetPoses(TrackedDevicePose_t [] pRenderPoseArray,TrackedDevicePose_t [] pGamePoseArray) + { + EVRCompositorError result = FnTable.WaitGetPoses(pRenderPoseArray,(uint) pRenderPoseArray.Length,pGamePoseArray,(uint) pGamePoseArray.Length); + return result; + } + public EVRCompositorError GetLastPoses(TrackedDevicePose_t [] pRenderPoseArray,TrackedDevicePose_t [] pGamePoseArray) + { + EVRCompositorError result = FnTable.GetLastPoses(pRenderPoseArray,(uint) pRenderPoseArray.Length,pGamePoseArray,(uint) pGamePoseArray.Length); + return result; + } + public EVRCompositorError GetLastPoseForTrackedDeviceIndex(uint unDeviceIndex,ref TrackedDevicePose_t pOutputPose,ref TrackedDevicePose_t pOutputGamePose) + { + EVRCompositorError result = FnTable.GetLastPoseForTrackedDeviceIndex(unDeviceIndex,ref pOutputPose,ref pOutputGamePose); + return result; + } + public EVRCompositorError GetSubmitTexture(ref Texture_t pOutTexture,ref bool pNeedsFlush,EVRCompositorTextureUsage eUsage,ref Texture_t pTexture,ref VRTextureBounds_t pBounds,EVRSubmitFlags nSubmitFlags) + { + pNeedsFlush = false; + EVRCompositorError result = FnTable.GetSubmitTexture(ref pOutTexture,ref pNeedsFlush,eUsage,ref pTexture,ref pBounds,nSubmitFlags); + return result; + } + public EVRCompositorError Submit(EVREye eEye,ref Texture_t pTexture,ref VRTextureBounds_t pBounds,EVRSubmitFlags nSubmitFlags) + { + EVRCompositorError result = FnTable.Submit(eEye,ref pTexture,ref pBounds,nSubmitFlags); + return result; + } + public EVRCompositorError SubmitWithArrayIndex(EVREye eEye,ref Texture_t pTexture,uint unTextureArrayIndex,ref VRTextureBounds_t pBounds,EVRSubmitFlags nSubmitFlags) + { + EVRCompositorError result = FnTable.SubmitWithArrayIndex(eEye,ref pTexture,unTextureArrayIndex,ref pBounds,nSubmitFlags); + return result; + } + public void ClearLastSubmittedFrame() + { + FnTable.ClearLastSubmittedFrame(); + } + public void PostPresentHandoff() + { + FnTable.PostPresentHandoff(); + } + public bool GetFrameTiming(ref Compositor_FrameTiming pTiming,uint unFramesAgo) + { + bool result = FnTable.GetFrameTiming(ref pTiming,unFramesAgo); + return result; + } + public uint GetFrameTimings(Compositor_FrameTiming [] pTiming) + { + uint result = FnTable.GetFrameTimings(pTiming,(uint) pTiming.Length); + return result; + } + public float GetFrameTimeRemaining() + { + float result = FnTable.GetFrameTimeRemaining(); + return result; + } + public void GetCumulativeStats(ref Compositor_CumulativeStats pStats,uint nStatsSizeInBytes) + { + FnTable.GetCumulativeStats(ref pStats,nStatsSizeInBytes); + } + public void FadeToColor(float fSeconds,float fRed,float fGreen,float fBlue,float fAlpha,bool bBackground) + { + FnTable.FadeToColor(fSeconds,fRed,fGreen,fBlue,fAlpha,bBackground); + } + public HmdColor_t GetCurrentFadeColor(bool bBackground) + { + HmdColor_t result = FnTable.GetCurrentFadeColor(bBackground); + return result; + } + public void FadeGrid(float fSeconds,bool bFadeGridIn) + { + FnTable.FadeGrid(fSeconds,bFadeGridIn); + } + public float GetCurrentGridAlpha() + { + float result = FnTable.GetCurrentGridAlpha(); + return result; + } + public EVRCompositorError SetSkyboxOverride(Texture_t [] pTextures) + { + EVRCompositorError result = FnTable.SetSkyboxOverride(pTextures,(uint) pTextures.Length); + return result; + } + public void ClearSkyboxOverride() + { + FnTable.ClearSkyboxOverride(); + } + public void CompositorBringToFront() + { + FnTable.CompositorBringToFront(); + } + public void CompositorGoToBack() + { + FnTable.CompositorGoToBack(); + } + public void CompositorQuit() + { + FnTable.CompositorQuit(); + } + public bool IsFullscreen() + { + bool result = FnTable.IsFullscreen(); + return result; + } + public uint GetCurrentSceneFocusProcess() + { + uint result = FnTable.GetCurrentSceneFocusProcess(); + return result; + } + public uint GetLastFrameRenderer() + { + uint result = FnTable.GetLastFrameRenderer(); + return result; + } + public bool CanRenderScene() + { + bool result = FnTable.CanRenderScene(); + return result; + } + public void ShowMirrorWindow() + { + FnTable.ShowMirrorWindow(); + } + public void HideMirrorWindow() + { + FnTable.HideMirrorWindow(); + } + public bool IsMirrorWindowVisible() + { + bool result = FnTable.IsMirrorWindowVisible(); + return result; + } + public void CompositorDumpImages() + { + FnTable.CompositorDumpImages(); + } + public bool ShouldAppRenderWithLowResources() + { + bool result = FnTable.ShouldAppRenderWithLowResources(); + return result; + } + public void ForceInterleavedReprojectionOn(bool bOverride) + { + FnTable.ForceInterleavedReprojectionOn(bOverride); + } + public void ForceReconnectProcess() + { + FnTable.ForceReconnectProcess(); + } + public void SuspendRendering(bool bSuspend) + { + FnTable.SuspendRendering(bSuspend); + } + public EVRCompositorError GetMirrorTextureD3D11(EVREye eEye,IntPtr pD3D11DeviceOrResource,ref IntPtr ppD3D11ShaderResourceView) + { + EVRCompositorError result = FnTable.GetMirrorTextureD3D11(eEye,pD3D11DeviceOrResource,ref ppD3D11ShaderResourceView); + return result; + } + public void ReleaseMirrorTextureD3D11(IntPtr pD3D11ShaderResourceView) + { + FnTable.ReleaseMirrorTextureD3D11(pD3D11ShaderResourceView); + } + public EVRCompositorError GetMirrorTextureGL(EVREye eEye,ref uint pglTextureId,IntPtr pglSharedTextureHandle) + { + pglTextureId = 0; + EVRCompositorError result = FnTable.GetMirrorTextureGL(eEye,ref pglTextureId,pglSharedTextureHandle); + return result; + } + public bool ReleaseSharedGLTexture(uint glTextureId,IntPtr glSharedTextureHandle) + { + bool result = FnTable.ReleaseSharedGLTexture(glTextureId,glSharedTextureHandle); + return result; + } + public void LockGLSharedTextureForAccess(IntPtr glSharedTextureHandle) + { + FnTable.LockGLSharedTextureForAccess(glSharedTextureHandle); + } + public void UnlockGLSharedTextureForAccess(IntPtr glSharedTextureHandle) + { + FnTable.UnlockGLSharedTextureForAccess(glSharedTextureHandle); + } + public uint GetVulkanInstanceExtensionsRequired(System.Text.StringBuilder pchValue,uint unBufferSize) + { + uint result = FnTable.GetVulkanInstanceExtensionsRequired(pchValue,unBufferSize); + return result; + } + public uint GetVulkanDeviceExtensionsRequired(IntPtr pPhysicalDevice,System.Text.StringBuilder pchValue,uint unBufferSize) + { + uint result = FnTable.GetVulkanDeviceExtensionsRequired(pPhysicalDevice,pchValue,unBufferSize); + return result; + } + public void SetExplicitTimingMode(EVRCompositorTimingMode eTimingMode) + { + FnTable.SetExplicitTimingMode(eTimingMode); + } + public EVRCompositorError SubmitExplicitTimingData() + { + EVRCompositorError result = FnTable.SubmitExplicitTimingData(); + return result; + } + public bool IsMotionSmoothingEnabled() + { + bool result = FnTable.IsMotionSmoothingEnabled(); + return result; + } + public bool IsMotionSmoothingSupported() + { + bool result = FnTable.IsMotionSmoothingSupported(); + return result; + } + public bool IsCurrentSceneFocusAppLoading() + { + bool result = FnTable.IsCurrentSceneFocusAppLoading(); + return result; + } + public EVRCompositorError SetStageOverride_Async(string pchRenderModelPath,ref HmdMatrix34_t pTransform,ref Compositor_StageRenderSettings pRenderSettings,uint nSizeOfRenderSettings) + { + IntPtr pchRenderModelPathUtf8 = Utils.ToUtf8(pchRenderModelPath); + EVRCompositorError result = FnTable.SetStageOverride_Async(pchRenderModelPathUtf8,ref pTransform,ref pRenderSettings,nSizeOfRenderSettings); + Marshal.FreeHGlobal(pchRenderModelPathUtf8); + return result; + } + public void ClearStageOverride() + { + FnTable.ClearStageOverride(); + } + public bool GetCompositorBenchmarkResults(ref Compositor_BenchmarkResults pBenchmarkResults,uint nSizeOfBenchmarkResults) + { + bool result = FnTable.GetCompositorBenchmarkResults(ref pBenchmarkResults,nSizeOfBenchmarkResults); + return result; + } + public EVRCompositorError GetLastPosePredictionIDs(ref uint pRenderPosePredictionID,ref uint pGamePosePredictionID) + { + pRenderPosePredictionID = 0; + pGamePosePredictionID = 0; + EVRCompositorError result = FnTable.GetLastPosePredictionIDs(ref pRenderPosePredictionID,ref pGamePosePredictionID); + return result; + } + public EVRCompositorError GetPosesForFrame(uint unPosePredictionID,TrackedDevicePose_t [] pPoseArray) + { + EVRCompositorError result = FnTable.GetPosesForFrame(unPosePredictionID,pPoseArray,(uint) pPoseArray.Length); + return result; + } +} + + +public class CVROverlay +{ + IVROverlay FnTable; + internal CVROverlay(IntPtr pInterface) + { + FnTable = (IVROverlay)Marshal.PtrToStructure(pInterface, typeof(IVROverlay)); + } + public EVROverlayError FindOverlay(string pchOverlayKey,ref ulong pOverlayHandle) + { + IntPtr pchOverlayKeyUtf8 = Utils.ToUtf8(pchOverlayKey); + pOverlayHandle = 0; + EVROverlayError result = FnTable.FindOverlay(pchOverlayKeyUtf8,ref pOverlayHandle); + Marshal.FreeHGlobal(pchOverlayKeyUtf8); + return result; + } + public EVROverlayError CreateOverlay(string pchOverlayKey,string pchOverlayName,ref ulong pOverlayHandle) + { + IntPtr pchOverlayKeyUtf8 = Utils.ToUtf8(pchOverlayKey); + IntPtr pchOverlayNameUtf8 = Utils.ToUtf8(pchOverlayName); + pOverlayHandle = 0; + EVROverlayError result = FnTable.CreateOverlay(pchOverlayKeyUtf8,pchOverlayNameUtf8,ref pOverlayHandle); + Marshal.FreeHGlobal(pchOverlayKeyUtf8); + Marshal.FreeHGlobal(pchOverlayNameUtf8); + return result; + } + public EVROverlayError CreateSubviewOverlay(ulong parentOverlayHandle,string pchSubviewOverlayKey,string pchSubviewOverlayName,ref ulong pSubviewOverlayHandle) + { + IntPtr pchSubviewOverlayKeyUtf8 = Utils.ToUtf8(pchSubviewOverlayKey); + IntPtr pchSubviewOverlayNameUtf8 = Utils.ToUtf8(pchSubviewOverlayName); + pSubviewOverlayHandle = 0; + EVROverlayError result = FnTable.CreateSubviewOverlay(parentOverlayHandle,pchSubviewOverlayKeyUtf8,pchSubviewOverlayNameUtf8,ref pSubviewOverlayHandle); + Marshal.FreeHGlobal(pchSubviewOverlayKeyUtf8); + Marshal.FreeHGlobal(pchSubviewOverlayNameUtf8); + return result; + } + public EVROverlayError DestroyOverlay(ulong ulOverlayHandle) + { + EVROverlayError result = FnTable.DestroyOverlay(ulOverlayHandle); + return result; + } + public uint GetOverlayKey(ulong ulOverlayHandle,System.Text.StringBuilder pchValue,uint unBufferSize,ref EVROverlayError pError) + { + uint result = FnTable.GetOverlayKey(ulOverlayHandle,pchValue,unBufferSize,ref pError); + return result; + } + public uint GetOverlayName(ulong ulOverlayHandle,System.Text.StringBuilder pchValue,uint unBufferSize,ref EVROverlayError pError) + { + uint result = FnTable.GetOverlayName(ulOverlayHandle,pchValue,unBufferSize,ref pError); + return result; + } + public EVROverlayError SetOverlayName(ulong ulOverlayHandle,string pchName) + { + IntPtr pchNameUtf8 = Utils.ToUtf8(pchName); + EVROverlayError result = FnTable.SetOverlayName(ulOverlayHandle,pchNameUtf8); + Marshal.FreeHGlobal(pchNameUtf8); + return result; + } + public EVROverlayError GetOverlayImageData(ulong ulOverlayHandle,IntPtr pvBuffer,uint unBufferSize,ref uint punWidth,ref uint punHeight) + { + punWidth = 0; + punHeight = 0; + EVROverlayError result = FnTable.GetOverlayImageData(ulOverlayHandle,pvBuffer,unBufferSize,ref punWidth,ref punHeight); + return result; + } + public string GetOverlayErrorNameFromEnum(EVROverlayError error) + { + IntPtr result = FnTable.GetOverlayErrorNameFromEnum(error); + return Marshal.PtrToStringAnsi(result); + } + public EVROverlayError SetOverlayRenderingPid(ulong ulOverlayHandle,uint unPID) + { + EVROverlayError result = FnTable.SetOverlayRenderingPid(ulOverlayHandle,unPID); + return result; + } + public uint GetOverlayRenderingPid(ulong ulOverlayHandle) + { + uint result = FnTable.GetOverlayRenderingPid(ulOverlayHandle); + return result; + } + public EVROverlayError SetOverlayFlag(ulong ulOverlayHandle,VROverlayFlags eOverlayFlag,bool bEnabled) + { + EVROverlayError result = FnTable.SetOverlayFlag(ulOverlayHandle,eOverlayFlag,bEnabled); + return result; + } + public EVROverlayError GetOverlayFlag(ulong ulOverlayHandle,VROverlayFlags eOverlayFlag,ref bool pbEnabled) + { + pbEnabled = false; + EVROverlayError result = FnTable.GetOverlayFlag(ulOverlayHandle,eOverlayFlag,ref pbEnabled); + return result; + } + public EVROverlayError GetOverlayFlags(ulong ulOverlayHandle,ref uint pFlags) + { + pFlags = 0; + EVROverlayError result = FnTable.GetOverlayFlags(ulOverlayHandle,ref pFlags); + return result; + } + public EVROverlayError SetOverlayColor(ulong ulOverlayHandle,float fRed,float fGreen,float fBlue) + { + EVROverlayError result = FnTable.SetOverlayColor(ulOverlayHandle,fRed,fGreen,fBlue); + return result; + } + public EVROverlayError GetOverlayColor(ulong ulOverlayHandle,ref float pfRed,ref float pfGreen,ref float pfBlue) + { + pfRed = 0; + pfGreen = 0; + pfBlue = 0; + EVROverlayError result = FnTable.GetOverlayColor(ulOverlayHandle,ref pfRed,ref pfGreen,ref pfBlue); + return result; + } + public EVROverlayError SetOverlayAlpha(ulong ulOverlayHandle,float fAlpha) + { + EVROverlayError result = FnTable.SetOverlayAlpha(ulOverlayHandle,fAlpha); + return result; + } + public EVROverlayError GetOverlayAlpha(ulong ulOverlayHandle,ref float pfAlpha) + { + pfAlpha = 0; + EVROverlayError result = FnTable.GetOverlayAlpha(ulOverlayHandle,ref pfAlpha); + return result; + } + public EVROverlayError SetOverlayTexelAspect(ulong ulOverlayHandle,float fTexelAspect) + { + EVROverlayError result = FnTable.SetOverlayTexelAspect(ulOverlayHandle,fTexelAspect); + return result; + } + public EVROverlayError GetOverlayTexelAspect(ulong ulOverlayHandle,ref float pfTexelAspect) + { + pfTexelAspect = 0; + EVROverlayError result = FnTable.GetOverlayTexelAspect(ulOverlayHandle,ref pfTexelAspect); + return result; + } + public EVROverlayError SetOverlaySortOrder(ulong ulOverlayHandle,uint unSortOrder) + { + EVROverlayError result = FnTable.SetOverlaySortOrder(ulOverlayHandle,unSortOrder); + return result; + } + public EVROverlayError GetOverlaySortOrder(ulong ulOverlayHandle,ref uint punSortOrder) + { + punSortOrder = 0; + EVROverlayError result = FnTable.GetOverlaySortOrder(ulOverlayHandle,ref punSortOrder); + return result; + } + public EVROverlayError SetOverlayWidthInMeters(ulong ulOverlayHandle,float fWidthInMeters) + { + EVROverlayError result = FnTable.SetOverlayWidthInMeters(ulOverlayHandle,fWidthInMeters); + return result; + } + public EVROverlayError GetOverlayWidthInMeters(ulong ulOverlayHandle,ref float pfWidthInMeters) + { + pfWidthInMeters = 0; + EVROverlayError result = FnTable.GetOverlayWidthInMeters(ulOverlayHandle,ref pfWidthInMeters); + return result; + } + public EVROverlayError SetOverlayCurvature(ulong ulOverlayHandle,float fCurvature) + { + EVROverlayError result = FnTable.SetOverlayCurvature(ulOverlayHandle,fCurvature); + return result; + } + public EVROverlayError GetOverlayCurvature(ulong ulOverlayHandle,ref float pfCurvature) + { + pfCurvature = 0; + EVROverlayError result = FnTable.GetOverlayCurvature(ulOverlayHandle,ref pfCurvature); + return result; + } + public EVROverlayError SetOverlayPreCurvePitch(ulong ulOverlayHandle,float fRadians) + { + EVROverlayError result = FnTable.SetOverlayPreCurvePitch(ulOverlayHandle,fRadians); + return result; + } + public EVROverlayError GetOverlayPreCurvePitch(ulong ulOverlayHandle,ref float pfRadians) + { + pfRadians = 0; + EVROverlayError result = FnTable.GetOverlayPreCurvePitch(ulOverlayHandle,ref pfRadians); + return result; + } + public EVROverlayError SetOverlayTextureColorSpace(ulong ulOverlayHandle,EColorSpace eTextureColorSpace) + { + EVROverlayError result = FnTable.SetOverlayTextureColorSpace(ulOverlayHandle,eTextureColorSpace); + return result; + } + public EVROverlayError GetOverlayTextureColorSpace(ulong ulOverlayHandle,ref EColorSpace peTextureColorSpace) + { + EVROverlayError result = FnTable.GetOverlayTextureColorSpace(ulOverlayHandle,ref peTextureColorSpace); + return result; + } + public EVROverlayError SetOverlayTextureBounds(ulong ulOverlayHandle,ref VRTextureBounds_t pOverlayTextureBounds) + { + EVROverlayError result = FnTable.SetOverlayTextureBounds(ulOverlayHandle,ref pOverlayTextureBounds); + return result; + } + public EVROverlayError GetOverlayTextureBounds(ulong ulOverlayHandle,ref VRTextureBounds_t pOverlayTextureBounds) + { + EVROverlayError result = FnTable.GetOverlayTextureBounds(ulOverlayHandle,ref pOverlayTextureBounds); + return result; + } + public EVROverlayError GetOverlayTransformType(ulong ulOverlayHandle,ref VROverlayTransformType peTransformType) + { + EVROverlayError result = FnTable.GetOverlayTransformType(ulOverlayHandle,ref peTransformType); + return result; + } + public EVROverlayError SetOverlayTransformAbsolute(ulong ulOverlayHandle,ETrackingUniverseOrigin eTrackingOrigin,ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform) + { + EVROverlayError result = FnTable.SetOverlayTransformAbsolute(ulOverlayHandle,eTrackingOrigin,ref pmatTrackingOriginToOverlayTransform); + return result; + } + public EVROverlayError GetOverlayTransformAbsolute(ulong ulOverlayHandle,ref ETrackingUniverseOrigin peTrackingOrigin,ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform) + { + EVROverlayError result = FnTable.GetOverlayTransformAbsolute(ulOverlayHandle,ref peTrackingOrigin,ref pmatTrackingOriginToOverlayTransform); + return result; + } + public EVROverlayError SetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle,uint unTrackedDevice,ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform) + { + EVROverlayError result = FnTable.SetOverlayTransformTrackedDeviceRelative(ulOverlayHandle,unTrackedDevice,ref pmatTrackedDeviceToOverlayTransform); + return result; + } + public EVROverlayError GetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle,ref uint punTrackedDevice,ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform) + { + punTrackedDevice = 0; + EVROverlayError result = FnTable.GetOverlayTransformTrackedDeviceRelative(ulOverlayHandle,ref punTrackedDevice,ref pmatTrackedDeviceToOverlayTransform); + return result; + } + public EVROverlayError SetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle,uint unDeviceIndex,string pchComponentName) + { + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + EVROverlayError result = FnTable.SetOverlayTransformTrackedDeviceComponent(ulOverlayHandle,unDeviceIndex,pchComponentNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public EVROverlayError GetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle,ref uint punDeviceIndex,System.Text.StringBuilder pchComponentName,uint unComponentNameSize) + { + punDeviceIndex = 0; + EVROverlayError result = FnTable.GetOverlayTransformTrackedDeviceComponent(ulOverlayHandle,ref punDeviceIndex,pchComponentName,unComponentNameSize); + return result; + } + public EVROverlayError SetOverlayTransformCursor(ulong ulCursorOverlayHandle,ref HmdVector2_t pvHotspot) + { + EVROverlayError result = FnTable.SetOverlayTransformCursor(ulCursorOverlayHandle,ref pvHotspot); + return result; + } + public EVROverlayError GetOverlayTransformCursor(ulong ulOverlayHandle,ref HmdVector2_t pvHotspot) + { + EVROverlayError result = FnTable.GetOverlayTransformCursor(ulOverlayHandle,ref pvHotspot); + return result; + } + public EVROverlayError SetOverlayTransformProjection(ulong ulOverlayHandle,ETrackingUniverseOrigin eTrackingOrigin,ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform,ref VROverlayProjection_t pProjection,EVREye eEye) + { + EVROverlayError result = FnTable.SetOverlayTransformProjection(ulOverlayHandle,eTrackingOrigin,ref pmatTrackingOriginToOverlayTransform,ref pProjection,eEye); + return result; + } + public EVROverlayError SetSubviewPosition(ulong ulOverlayHandle,float fX,float fY) + { + EVROverlayError result = FnTable.SetSubviewPosition(ulOverlayHandle,fX,fY); + return result; + } + public EVROverlayError ShowOverlay(ulong ulOverlayHandle) + { + EVROverlayError result = FnTable.ShowOverlay(ulOverlayHandle); + return result; + } + public EVROverlayError HideOverlay(ulong ulOverlayHandle) + { + EVROverlayError result = FnTable.HideOverlay(ulOverlayHandle); + return result; + } + public bool IsOverlayVisible(ulong ulOverlayHandle) + { + bool result = FnTable.IsOverlayVisible(ulOverlayHandle); + return result; + } + public EVROverlayError GetTransformForOverlayCoordinates(ulong ulOverlayHandle,ETrackingUniverseOrigin eTrackingOrigin,HmdVector2_t coordinatesInOverlay,ref HmdMatrix34_t pmatTransform) + { + EVROverlayError result = FnTable.GetTransformForOverlayCoordinates(ulOverlayHandle,eTrackingOrigin,coordinatesInOverlay,ref pmatTransform); + return result; + } + public EVROverlayError WaitFrameSync(uint nTimeoutMs) + { + EVROverlayError result = FnTable.WaitFrameSync(nTimeoutMs); + return result; + } +// This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were +// originally mis-compiled with the wrong packing for Linux and OSX. + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _PollNextOverlayEventPacked(ulong ulOverlayHandle,ref VREvent_t_Packed pEvent,uint uncbVREvent); + [StructLayout(LayoutKind.Explicit)] + struct PollNextOverlayEventUnion + { + [FieldOffset(0)] + public IVROverlay._PollNextOverlayEvent pPollNextOverlayEvent; + [FieldOffset(0)] + public _PollNextOverlayEventPacked pPollNextOverlayEventPacked; + } + public bool PollNextOverlayEvent(ulong ulOverlayHandle,ref VREvent_t pEvent,uint uncbVREvent) + { +#if !UNITY_METRO + if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || + (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) + { + PollNextOverlayEventUnion u; + VREvent_t_Packed event_packed = new VREvent_t_Packed(); + u.pPollNextOverlayEventPacked = null; + u.pPollNextOverlayEvent = FnTable.PollNextOverlayEvent; + bool packed_result = u.pPollNextOverlayEventPacked(ulOverlayHandle,ref event_packed,(uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t_Packed))); + + event_packed.Unpack(ref pEvent); + return packed_result; + } +#endif + bool result = FnTable.PollNextOverlayEvent(ulOverlayHandle,ref pEvent,uncbVREvent); + return result; + } + public EVROverlayError GetOverlayInputMethod(ulong ulOverlayHandle,ref VROverlayInputMethod peInputMethod) + { + EVROverlayError result = FnTable.GetOverlayInputMethod(ulOverlayHandle,ref peInputMethod); + return result; + } + public EVROverlayError SetOverlayInputMethod(ulong ulOverlayHandle,VROverlayInputMethod eInputMethod) + { + EVROverlayError result = FnTable.SetOverlayInputMethod(ulOverlayHandle,eInputMethod); + return result; + } + public EVROverlayError GetOverlayMouseScale(ulong ulOverlayHandle,ref HmdVector2_t pvecMouseScale) + { + EVROverlayError result = FnTable.GetOverlayMouseScale(ulOverlayHandle,ref pvecMouseScale); + return result; + } + public EVROverlayError SetOverlayMouseScale(ulong ulOverlayHandle,ref HmdVector2_t pvecMouseScale) + { + EVROverlayError result = FnTable.SetOverlayMouseScale(ulOverlayHandle,ref pvecMouseScale); + return result; + } + public bool ComputeOverlayIntersection(ulong ulOverlayHandle,ref VROverlayIntersectionParams_t pParams,ref VROverlayIntersectionResults_t pResults) + { + bool result = FnTable.ComputeOverlayIntersection(ulOverlayHandle,ref pParams,ref pResults); + return result; + } + public bool IsHoverTargetOverlay(ulong ulOverlayHandle) + { + bool result = FnTable.IsHoverTargetOverlay(ulOverlayHandle); + return result; + } + public EVROverlayError SetOverlayIntersectionMask(ulong ulOverlayHandle,ref VROverlayIntersectionMaskPrimitive_t pMaskPrimitives,uint unNumMaskPrimitives,uint unPrimitiveSize) + { + EVROverlayError result = FnTable.SetOverlayIntersectionMask(ulOverlayHandle,ref pMaskPrimitives,unNumMaskPrimitives,unPrimitiveSize); + return result; + } + public EVROverlayError TriggerLaserMouseHapticVibration(ulong ulOverlayHandle,float fDurationSeconds,float fFrequency,float fAmplitude) + { + EVROverlayError result = FnTable.TriggerLaserMouseHapticVibration(ulOverlayHandle,fDurationSeconds,fFrequency,fAmplitude); + return result; + } + public EVROverlayError SetOverlayCursor(ulong ulOverlayHandle,ulong ulCursorHandle) + { + EVROverlayError result = FnTable.SetOverlayCursor(ulOverlayHandle,ulCursorHandle); + return result; + } + public EVROverlayError SetOverlayCursorPositionOverride(ulong ulOverlayHandle,ref HmdVector2_t pvCursor) + { + EVROverlayError result = FnTable.SetOverlayCursorPositionOverride(ulOverlayHandle,ref pvCursor); + return result; + } + public EVROverlayError ClearOverlayCursorPositionOverride(ulong ulOverlayHandle) + { + EVROverlayError result = FnTable.ClearOverlayCursorPositionOverride(ulOverlayHandle); + return result; + } + public EVROverlayError SetOverlayTexture(ulong ulOverlayHandle,ref Texture_t pTexture) + { + EVROverlayError result = FnTable.SetOverlayTexture(ulOverlayHandle,ref pTexture); + return result; + } + public EVROverlayError ClearOverlayTexture(ulong ulOverlayHandle) + { + EVROverlayError result = FnTable.ClearOverlayTexture(ulOverlayHandle); + return result; + } + public EVROverlayError SetOverlayRaw(ulong ulOverlayHandle,IntPtr pvBuffer,uint unWidth,uint unHeight,uint unBytesPerPixel) + { + EVROverlayError result = FnTable.SetOverlayRaw(ulOverlayHandle,pvBuffer,unWidth,unHeight,unBytesPerPixel); + return result; + } + public EVROverlayError SetOverlayFromFile(ulong ulOverlayHandle,string pchFilePath) + { + IntPtr pchFilePathUtf8 = Utils.ToUtf8(pchFilePath); + EVROverlayError result = FnTable.SetOverlayFromFile(ulOverlayHandle,pchFilePathUtf8); + Marshal.FreeHGlobal(pchFilePathUtf8); + return result; + } + public EVROverlayError GetOverlayTexture(ulong ulOverlayHandle,ref IntPtr pNativeTextureHandle,IntPtr pNativeTextureRef,ref uint pWidth,ref uint pHeight,ref uint pNativeFormat,ref ETextureType pAPIType,ref EColorSpace pColorSpace,ref VRTextureBounds_t pTextureBounds) + { + pWidth = 0; + pHeight = 0; + pNativeFormat = 0; + EVROverlayError result = FnTable.GetOverlayTexture(ulOverlayHandle,ref pNativeTextureHandle,pNativeTextureRef,ref pWidth,ref pHeight,ref pNativeFormat,ref pAPIType,ref pColorSpace,ref pTextureBounds); + return result; + } + public EVROverlayError ReleaseNativeOverlayHandle(ulong ulOverlayHandle,IntPtr pNativeTextureHandle) + { + EVROverlayError result = FnTable.ReleaseNativeOverlayHandle(ulOverlayHandle,pNativeTextureHandle); + return result; + } + public EVROverlayError GetOverlayTextureSize(ulong ulOverlayHandle,ref uint pWidth,ref uint pHeight) + { + pWidth = 0; + pHeight = 0; + EVROverlayError result = FnTable.GetOverlayTextureSize(ulOverlayHandle,ref pWidth,ref pHeight); + return result; + } + public EVROverlayError CreateDashboardOverlay(string pchOverlayKey,string pchOverlayFriendlyName,ref ulong pMainHandle,ref ulong pThumbnailHandle) + { + IntPtr pchOverlayKeyUtf8 = Utils.ToUtf8(pchOverlayKey); + IntPtr pchOverlayFriendlyNameUtf8 = Utils.ToUtf8(pchOverlayFriendlyName); + pMainHandle = 0; + pThumbnailHandle = 0; + EVROverlayError result = FnTable.CreateDashboardOverlay(pchOverlayKeyUtf8,pchOverlayFriendlyNameUtf8,ref pMainHandle,ref pThumbnailHandle); + Marshal.FreeHGlobal(pchOverlayKeyUtf8); + Marshal.FreeHGlobal(pchOverlayFriendlyNameUtf8); + return result; + } + public bool IsDashboardVisible() + { + bool result = FnTable.IsDashboardVisible(); + return result; + } + public bool IsActiveDashboardOverlay(ulong ulOverlayHandle) + { + bool result = FnTable.IsActiveDashboardOverlay(ulOverlayHandle); + return result; + } + public EVROverlayError SetDashboardOverlaySceneProcess(ulong ulOverlayHandle,uint unProcessId) + { + EVROverlayError result = FnTable.SetDashboardOverlaySceneProcess(ulOverlayHandle,unProcessId); + return result; + } + public EVROverlayError GetDashboardOverlaySceneProcess(ulong ulOverlayHandle,ref uint punProcessId) + { + punProcessId = 0; + EVROverlayError result = FnTable.GetDashboardOverlaySceneProcess(ulOverlayHandle,ref punProcessId); + return result; + } + public void ShowDashboard(string pchOverlayToShow) + { + IntPtr pchOverlayToShowUtf8 = Utils.ToUtf8(pchOverlayToShow); + FnTable.ShowDashboard(pchOverlayToShowUtf8); + Marshal.FreeHGlobal(pchOverlayToShowUtf8); + } + public uint GetPrimaryDashboardDevice() + { + uint result = FnTable.GetPrimaryDashboardDevice(); + return result; + } + public EVROverlayError ShowKeyboard(int eInputMode,int eLineInputMode,uint unFlags,string pchDescription,uint unCharMax,string pchExistingText,ulong uUserValue) + { + IntPtr pchDescriptionUtf8 = Utils.ToUtf8(pchDescription); + IntPtr pchExistingTextUtf8 = Utils.ToUtf8(pchExistingText); + EVROverlayError result = FnTable.ShowKeyboard(eInputMode,eLineInputMode,unFlags,pchDescriptionUtf8,unCharMax,pchExistingTextUtf8,uUserValue); + Marshal.FreeHGlobal(pchDescriptionUtf8); + Marshal.FreeHGlobal(pchExistingTextUtf8); + return result; + } + public EVROverlayError ShowKeyboardForOverlay(ulong ulOverlayHandle,int eInputMode,int eLineInputMode,uint unFlags,string pchDescription,uint unCharMax,string pchExistingText,ulong uUserValue) + { + IntPtr pchDescriptionUtf8 = Utils.ToUtf8(pchDescription); + IntPtr pchExistingTextUtf8 = Utils.ToUtf8(pchExistingText); + EVROverlayError result = FnTable.ShowKeyboardForOverlay(ulOverlayHandle,eInputMode,eLineInputMode,unFlags,pchDescriptionUtf8,unCharMax,pchExistingTextUtf8,uUserValue); + Marshal.FreeHGlobal(pchDescriptionUtf8); + Marshal.FreeHGlobal(pchExistingTextUtf8); + return result; + } + public uint GetKeyboardText(System.Text.StringBuilder pchText,uint cchText) + { + uint result = FnTable.GetKeyboardText(pchText,cchText); + return result; + } + public void HideKeyboard() + { + FnTable.HideKeyboard(); + } + public void SetKeyboardTransformAbsolute(ETrackingUniverseOrigin eTrackingOrigin,ref HmdMatrix34_t pmatTrackingOriginToKeyboardTransform) + { + FnTable.SetKeyboardTransformAbsolute(eTrackingOrigin,ref pmatTrackingOriginToKeyboardTransform); + } + public void SetKeyboardPositionForOverlay(ulong ulOverlayHandle,HmdRect2_t avoidRect) + { + FnTable.SetKeyboardPositionForOverlay(ulOverlayHandle,avoidRect); + } + public VRMessageOverlayResponse ShowMessageOverlay(string pchText,string pchCaption,string pchButton0Text,string pchButton1Text,string pchButton2Text,string pchButton3Text) + { + IntPtr pchTextUtf8 = Utils.ToUtf8(pchText); + IntPtr pchCaptionUtf8 = Utils.ToUtf8(pchCaption); + IntPtr pchButton0TextUtf8 = Utils.ToUtf8(pchButton0Text); + IntPtr pchButton1TextUtf8 = Utils.ToUtf8(pchButton1Text); + IntPtr pchButton2TextUtf8 = Utils.ToUtf8(pchButton2Text); + IntPtr pchButton3TextUtf8 = Utils.ToUtf8(pchButton3Text); + VRMessageOverlayResponse result = FnTable.ShowMessageOverlay(pchTextUtf8,pchCaptionUtf8,pchButton0TextUtf8,pchButton1TextUtf8,pchButton2TextUtf8,pchButton3TextUtf8); + Marshal.FreeHGlobal(pchTextUtf8); + Marshal.FreeHGlobal(pchCaptionUtf8); + Marshal.FreeHGlobal(pchButton0TextUtf8); + Marshal.FreeHGlobal(pchButton1TextUtf8); + Marshal.FreeHGlobal(pchButton2TextUtf8); + Marshal.FreeHGlobal(pchButton3TextUtf8); + return result; + } + public void CloseMessageOverlay() + { + FnTable.CloseMessageOverlay(); + } +} + + +public class CVROverlayView +{ + IVROverlayView FnTable; + internal CVROverlayView(IntPtr pInterface) + { + FnTable = (IVROverlayView)Marshal.PtrToStructure(pInterface, typeof(IVROverlayView)); + } + public EVROverlayError AcquireOverlayView(ulong ulOverlayHandle,ref VRNativeDevice_t pNativeDevice,ref VROverlayView_t pOverlayView,uint unOverlayViewSize) + { + EVROverlayError result = FnTable.AcquireOverlayView(ulOverlayHandle,ref pNativeDevice,ref pOverlayView,unOverlayViewSize); + return result; + } + public EVROverlayError ReleaseOverlayView(ref VROverlayView_t pOverlayView) + { + EVROverlayError result = FnTable.ReleaseOverlayView(ref pOverlayView); + return result; + } + public void PostOverlayEvent(ulong ulOverlayHandle,ref VREvent_t pvrEvent) + { + FnTable.PostOverlayEvent(ulOverlayHandle,ref pvrEvent); + } + public bool IsViewingPermitted(ulong ulOverlayHandle) + { + bool result = FnTable.IsViewingPermitted(ulOverlayHandle); + return result; + } +} + + +public class CVRHeadsetView +{ + IVRHeadsetView FnTable; + internal CVRHeadsetView(IntPtr pInterface) + { + FnTable = (IVRHeadsetView)Marshal.PtrToStructure(pInterface, typeof(IVRHeadsetView)); + } + public void SetHeadsetViewSize(uint nWidth,uint nHeight) + { + FnTable.SetHeadsetViewSize(nWidth,nHeight); + } + public void GetHeadsetViewSize(ref uint pnWidth,ref uint pnHeight) + { + pnWidth = 0; + pnHeight = 0; + FnTable.GetHeadsetViewSize(ref pnWidth,ref pnHeight); + } + public void SetHeadsetViewMode(uint eHeadsetViewMode) + { + FnTable.SetHeadsetViewMode(eHeadsetViewMode); + } + public uint GetHeadsetViewMode() + { + uint result = FnTable.GetHeadsetViewMode(); + return result; + } + public void SetHeadsetViewCropped(bool bCropped) + { + FnTable.SetHeadsetViewCropped(bCropped); + } + public bool GetHeadsetViewCropped() + { + bool result = FnTable.GetHeadsetViewCropped(); + return result; + } + public float GetHeadsetViewAspectRatio() + { + float result = FnTable.GetHeadsetViewAspectRatio(); + return result; + } + public void SetHeadsetViewBlendRange(float flStartPct,float flEndPct) + { + FnTable.SetHeadsetViewBlendRange(flStartPct,flEndPct); + } + public void GetHeadsetViewBlendRange(ref float pStartPct,ref float pEndPct) + { + pStartPct = 0; + pEndPct = 0; + FnTable.GetHeadsetViewBlendRange(ref pStartPct,ref pEndPct); + } +} + + +public class CVRRenderModels +{ + IVRRenderModels FnTable; + internal CVRRenderModels(IntPtr pInterface) + { + FnTable = (IVRRenderModels)Marshal.PtrToStructure(pInterface, typeof(IVRRenderModels)); + } + public EVRRenderModelError LoadRenderModel_Async(string pchRenderModelName,ref IntPtr ppRenderModel) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + EVRRenderModelError result = FnTable.LoadRenderModel_Async(pchRenderModelNameUtf8,ref ppRenderModel); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + return result; + } + public void FreeRenderModel(IntPtr pRenderModel) + { + FnTable.FreeRenderModel(pRenderModel); + } + public EVRRenderModelError LoadTexture_Async(int textureId,ref IntPtr ppTexture) + { + EVRRenderModelError result = FnTable.LoadTexture_Async(textureId,ref ppTexture); + return result; + } + public void FreeTexture(IntPtr pTexture) + { + FnTable.FreeTexture(pTexture); + } + public EVRRenderModelError LoadTextureD3D11_Async(int textureId,IntPtr pD3D11Device,ref IntPtr ppD3D11Texture2D) + { + EVRRenderModelError result = FnTable.LoadTextureD3D11_Async(textureId,pD3D11Device,ref ppD3D11Texture2D); + return result; + } + public EVRRenderModelError LoadIntoTextureD3D11_Async(int textureId,IntPtr pDstTexture) + { + EVRRenderModelError result = FnTable.LoadIntoTextureD3D11_Async(textureId,pDstTexture); + return result; + } + public void FreeTextureD3D11(IntPtr pD3D11Texture2D) + { + FnTable.FreeTextureD3D11(pD3D11Texture2D); + } + public uint GetRenderModelName(uint unRenderModelIndex,System.Text.StringBuilder pchRenderModelName,uint unRenderModelNameLen) + { + uint result = FnTable.GetRenderModelName(unRenderModelIndex,pchRenderModelName,unRenderModelNameLen); + return result; + } + public uint GetRenderModelCount() + { + uint result = FnTable.GetRenderModelCount(); + return result; + } + public uint GetComponentCount(string pchRenderModelName) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + uint result = FnTable.GetComponentCount(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + return result; + } + public uint GetComponentName(string pchRenderModelName,uint unComponentIndex,System.Text.StringBuilder pchComponentName,uint unComponentNameLen) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + uint result = FnTable.GetComponentName(pchRenderModelNameUtf8,unComponentIndex,pchComponentName,unComponentNameLen); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + return result; + } + public ulong GetComponentButtonMask(string pchRenderModelName,string pchComponentName) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + ulong result = FnTable.GetComponentButtonMask(pchRenderModelNameUtf8,pchComponentNameUtf8); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public uint GetComponentRenderModelName(string pchRenderModelName,string pchComponentName,System.Text.StringBuilder pchComponentRenderModelName,uint unComponentRenderModelNameLen) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + uint result = FnTable.GetComponentRenderModelName(pchRenderModelNameUtf8,pchComponentNameUtf8,pchComponentRenderModelName,unComponentRenderModelNameLen); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public bool GetComponentStateForDevicePath(string pchRenderModelName,string pchComponentName,ulong devicePath,ref RenderModel_ControllerMode_State_t pState,ref RenderModel_ComponentState_t pComponentState) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + bool result = FnTable.GetComponentStateForDevicePath(pchRenderModelNameUtf8,pchComponentNameUtf8,devicePath,ref pState,ref pComponentState); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } +// This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were +// originally mis-compiled with the wrong packing for Linux and OSX. + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetComponentStatePacked(IntPtr pchRenderModelName,IntPtr pchComponentName,ref VRControllerState_t_Packed pControllerState,ref RenderModel_ControllerMode_State_t pState,ref RenderModel_ComponentState_t pComponentState); + [StructLayout(LayoutKind.Explicit)] + struct GetComponentStateUnion + { + [FieldOffset(0)] + public IVRRenderModels._GetComponentState pGetComponentState; + [FieldOffset(0)] + public _GetComponentStatePacked pGetComponentStatePacked; + } + public bool GetComponentState(string pchRenderModelName,string pchComponentName,ref VRControllerState_t pControllerState,ref RenderModel_ControllerMode_State_t pState,ref RenderModel_ComponentState_t pComponentState) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); +#if !UNITY_METRO + if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || + (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) + { + GetComponentStateUnion u; + VRControllerState_t_Packed state_packed = new VRControllerState_t_Packed(pControllerState); + u.pGetComponentStatePacked = null; + u.pGetComponentState = FnTable.GetComponentState; + bool packed_result = u.pGetComponentStatePacked(pchRenderModelNameUtf8,pchComponentNameUtf8,ref state_packed,ref pState,ref pComponentState); + + state_packed.Unpack(ref pControllerState); + return packed_result; + } +#endif + bool result = FnTable.GetComponentState(pchRenderModelNameUtf8,pchComponentNameUtf8,ref pControllerState,ref pState,ref pComponentState); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public bool RenderModelHasComponent(string pchRenderModelName,string pchComponentName) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + bool result = FnTable.RenderModelHasComponent(pchRenderModelNameUtf8,pchComponentNameUtf8); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public uint GetRenderModelThumbnailURL(string pchRenderModelName,System.Text.StringBuilder pchThumbnailURL,uint unThumbnailURLLen,ref EVRRenderModelError peError) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + uint result = FnTable.GetRenderModelThumbnailURL(pchRenderModelNameUtf8,pchThumbnailURL,unThumbnailURLLen,ref peError); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + return result; + } + public uint GetRenderModelOriginalPath(string pchRenderModelName,System.Text.StringBuilder pchOriginalPath,uint unOriginalPathLen,ref EVRRenderModelError peError) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + uint result = FnTable.GetRenderModelOriginalPath(pchRenderModelNameUtf8,pchOriginalPath,unOriginalPathLen,ref peError); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + return result; + } + public string GetRenderModelErrorNameFromEnum(EVRRenderModelError error) + { + IntPtr result = FnTable.GetRenderModelErrorNameFromEnum(error); + return Marshal.PtrToStringAnsi(result); + } +} + + +public class CVRNotifications +{ + IVRNotifications FnTable; + internal CVRNotifications(IntPtr pInterface) + { + FnTable = (IVRNotifications)Marshal.PtrToStructure(pInterface, typeof(IVRNotifications)); + } + public EVRNotificationError CreateNotification(ulong ulOverlayHandle,ulong ulUserValue,EVRNotificationType type,string pchText,EVRNotificationStyle style,ref NotificationBitmap_t pImage,ref uint pNotificationId) + { + IntPtr pchTextUtf8 = Utils.ToUtf8(pchText); + pNotificationId = 0; + EVRNotificationError result = FnTable.CreateNotification(ulOverlayHandle,ulUserValue,type,pchTextUtf8,style,ref pImage,ref pNotificationId); + Marshal.FreeHGlobal(pchTextUtf8); + return result; + } + public EVRNotificationError RemoveNotification(uint notificationId) + { + EVRNotificationError result = FnTable.RemoveNotification(notificationId); + return result; + } +} + + +public class CVRSettings +{ + IVRSettings FnTable; + internal CVRSettings(IntPtr pInterface) + { + FnTable = (IVRSettings)Marshal.PtrToStructure(pInterface, typeof(IVRSettings)); + } + public string GetSettingsErrorNameFromEnum(EVRSettingsError eError) + { + IntPtr result = FnTable.GetSettingsErrorNameFromEnum(eError); + return Marshal.PtrToStringAnsi(result); + } + public void SetBool(string pchSection,string pchSettingsKey,bool bValue,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + FnTable.SetBool(pchSectionUtf8,pchSettingsKeyUtf8,bValue,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + } + public void SetInt32(string pchSection,string pchSettingsKey,int nValue,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + FnTable.SetInt32(pchSectionUtf8,pchSettingsKeyUtf8,nValue,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + } + public void SetFloat(string pchSection,string pchSettingsKey,float flValue,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + FnTable.SetFloat(pchSectionUtf8,pchSettingsKeyUtf8,flValue,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + } + public void SetString(string pchSection,string pchSettingsKey,string pchValue,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + IntPtr pchValueUtf8 = Utils.ToUtf8(pchValue); + FnTable.SetString(pchSectionUtf8,pchSettingsKeyUtf8,pchValueUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + Marshal.FreeHGlobal(pchValueUtf8); + } + public bool GetBool(string pchSection,string pchSettingsKey,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + bool result = FnTable.GetBool(pchSectionUtf8,pchSettingsKeyUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + return result; + } + public int GetInt32(string pchSection,string pchSettingsKey,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + int result = FnTable.GetInt32(pchSectionUtf8,pchSettingsKeyUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + return result; + } + public float GetFloat(string pchSection,string pchSettingsKey,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + float result = FnTable.GetFloat(pchSectionUtf8,pchSettingsKeyUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + return result; + } + public void GetString(string pchSection,string pchSettingsKey,System.Text.StringBuilder pchValue,uint unValueLen,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + FnTable.GetString(pchSectionUtf8,pchSettingsKeyUtf8,pchValue,unValueLen,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + } + public void RemoveSection(string pchSection,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + FnTable.RemoveSection(pchSectionUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + } + public void RemoveKeyInSection(string pchSection,string pchSettingsKey,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + FnTable.RemoveKeyInSection(pchSectionUtf8,pchSettingsKeyUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + } +} + + +public class CVRScreenshots +{ + IVRScreenshots FnTable; + internal CVRScreenshots(IntPtr pInterface) + { + FnTable = (IVRScreenshots)Marshal.PtrToStructure(pInterface, typeof(IVRScreenshots)); + } + public EVRScreenshotError RequestScreenshot(ref uint pOutScreenshotHandle,EVRScreenshotType type,string pchPreviewFilename,string pchVRFilename) + { + pOutScreenshotHandle = 0; + IntPtr pchPreviewFilenameUtf8 = Utils.ToUtf8(pchPreviewFilename); + IntPtr pchVRFilenameUtf8 = Utils.ToUtf8(pchVRFilename); + EVRScreenshotError result = FnTable.RequestScreenshot(ref pOutScreenshotHandle,type,pchPreviewFilenameUtf8,pchVRFilenameUtf8); + Marshal.FreeHGlobal(pchPreviewFilenameUtf8); + Marshal.FreeHGlobal(pchVRFilenameUtf8); + return result; + } + public EVRScreenshotError HookScreenshot(EVRScreenshotType [] pSupportedTypes) + { + EVRScreenshotError result = FnTable.HookScreenshot(pSupportedTypes,(int) pSupportedTypes.Length); + return result; + } + public EVRScreenshotType GetScreenshotPropertyType(uint screenshotHandle,ref EVRScreenshotError pError) + { + EVRScreenshotType result = FnTable.GetScreenshotPropertyType(screenshotHandle,ref pError); + return result; + } + public uint GetScreenshotPropertyFilename(uint screenshotHandle,EVRScreenshotPropertyFilenames filenameType,System.Text.StringBuilder pchFilename,uint cchFilename,ref EVRScreenshotError pError) + { + uint result = FnTable.GetScreenshotPropertyFilename(screenshotHandle,filenameType,pchFilename,cchFilename,ref pError); + return result; + } + public EVRScreenshotError UpdateScreenshotProgress(uint screenshotHandle,float flProgress) + { + EVRScreenshotError result = FnTable.UpdateScreenshotProgress(screenshotHandle,flProgress); + return result; + } + public EVRScreenshotError TakeStereoScreenshot(ref uint pOutScreenshotHandle,string pchPreviewFilename,string pchVRFilename) + { + pOutScreenshotHandle = 0; + IntPtr pchPreviewFilenameUtf8 = Utils.ToUtf8(pchPreviewFilename); + IntPtr pchVRFilenameUtf8 = Utils.ToUtf8(pchVRFilename); + EVRScreenshotError result = FnTable.TakeStereoScreenshot(ref pOutScreenshotHandle,pchPreviewFilenameUtf8,pchVRFilenameUtf8); + Marshal.FreeHGlobal(pchPreviewFilenameUtf8); + Marshal.FreeHGlobal(pchVRFilenameUtf8); + return result; + } + public EVRScreenshotError SubmitScreenshot(uint screenshotHandle,EVRScreenshotType type,string pchSourcePreviewFilename,string pchSourceVRFilename) + { + IntPtr pchSourcePreviewFilenameUtf8 = Utils.ToUtf8(pchSourcePreviewFilename); + IntPtr pchSourceVRFilenameUtf8 = Utils.ToUtf8(pchSourceVRFilename); + EVRScreenshotError result = FnTable.SubmitScreenshot(screenshotHandle,type,pchSourcePreviewFilenameUtf8,pchSourceVRFilenameUtf8); + Marshal.FreeHGlobal(pchSourcePreviewFilenameUtf8); + Marshal.FreeHGlobal(pchSourceVRFilenameUtf8); + return result; + } +} + + +public class CVRResources +{ + IVRResources FnTable; + internal CVRResources(IntPtr pInterface) + { + FnTable = (IVRResources)Marshal.PtrToStructure(pInterface, typeof(IVRResources)); + } + public uint LoadSharedResource(string pchResourceName,string pchBuffer,uint unBufferLen) + { + IntPtr pchResourceNameUtf8 = Utils.ToUtf8(pchResourceName); + uint result = FnTable.LoadSharedResource(pchResourceNameUtf8,pchBuffer,unBufferLen); + Marshal.FreeHGlobal(pchResourceNameUtf8); + return result; + } + public uint GetResourceFullPath(string pchResourceName,string pchResourceTypeDirectory,System.Text.StringBuilder pchPathBuffer,uint unBufferLen) + { + IntPtr pchResourceNameUtf8 = Utils.ToUtf8(pchResourceName); + IntPtr pchResourceTypeDirectoryUtf8 = Utils.ToUtf8(pchResourceTypeDirectory); + uint result = FnTable.GetResourceFullPath(pchResourceNameUtf8,pchResourceTypeDirectoryUtf8,pchPathBuffer,unBufferLen); + Marshal.FreeHGlobal(pchResourceNameUtf8); + Marshal.FreeHGlobal(pchResourceTypeDirectoryUtf8); + return result; + } +} + + +public class CVRDriverManager +{ + IVRDriverManager FnTable; + internal CVRDriverManager(IntPtr pInterface) + { + FnTable = (IVRDriverManager)Marshal.PtrToStructure(pInterface, typeof(IVRDriverManager)); + } + public uint GetDriverCount() + { + uint result = FnTable.GetDriverCount(); + return result; + } + public uint GetDriverName(uint nDriver,System.Text.StringBuilder pchValue,uint unBufferSize) + { + uint result = FnTable.GetDriverName(nDriver,pchValue,unBufferSize); + return result; + } + public ulong GetDriverHandle(string pchDriverName) + { + IntPtr pchDriverNameUtf8 = Utils.ToUtf8(pchDriverName); + ulong result = FnTable.GetDriverHandle(pchDriverNameUtf8); + Marshal.FreeHGlobal(pchDriverNameUtf8); + return result; + } + public bool IsEnabled(uint nDriver) + { + bool result = FnTable.IsEnabled(nDriver); + return result; + } +} + + +public class CVRInput +{ + IVRInput FnTable; + internal CVRInput(IntPtr pInterface) + { + FnTable = (IVRInput)Marshal.PtrToStructure(pInterface, typeof(IVRInput)); + } + public EVRInputError SetActionManifestPath(string pchActionManifestPath) + { + IntPtr pchActionManifestPathUtf8 = Utils.ToUtf8(pchActionManifestPath); + EVRInputError result = FnTable.SetActionManifestPath(pchActionManifestPathUtf8); + Marshal.FreeHGlobal(pchActionManifestPathUtf8); + return result; + } + public EVRInputError GetActionSetHandle(string pchActionSetName,ref ulong pHandle) + { + IntPtr pchActionSetNameUtf8 = Utils.ToUtf8(pchActionSetName); + pHandle = 0; + EVRInputError result = FnTable.GetActionSetHandle(pchActionSetNameUtf8,ref pHandle); + Marshal.FreeHGlobal(pchActionSetNameUtf8); + return result; + } + public EVRInputError GetActionHandle(string pchActionName,ref ulong pHandle) + { + IntPtr pchActionNameUtf8 = Utils.ToUtf8(pchActionName); + pHandle = 0; + EVRInputError result = FnTable.GetActionHandle(pchActionNameUtf8,ref pHandle); + Marshal.FreeHGlobal(pchActionNameUtf8); + return result; + } + public EVRInputError GetInputSourceHandle(string pchInputSourcePath,ref ulong pHandle) + { + IntPtr pchInputSourcePathUtf8 = Utils.ToUtf8(pchInputSourcePath); + pHandle = 0; + EVRInputError result = FnTable.GetInputSourceHandle(pchInputSourcePathUtf8,ref pHandle); + Marshal.FreeHGlobal(pchInputSourcePathUtf8); + return result; + } + public EVRInputError UpdateActionState(VRActiveActionSet_t [] pSets,uint unSizeOfVRSelectedActionSet_t) + { + EVRInputError result = FnTable.UpdateActionState(pSets,unSizeOfVRSelectedActionSet_t,(uint) pSets.Length); + return result; + } + public EVRInputError GetDigitalActionData(ulong action,ref InputDigitalActionData_t pActionData,uint unActionDataSize,ulong ulRestrictToDevice) + { + EVRInputError result = FnTable.GetDigitalActionData(action,ref pActionData,unActionDataSize,ulRestrictToDevice); + return result; + } + public EVRInputError GetAnalogActionData(ulong action,ref InputAnalogActionData_t pActionData,uint unActionDataSize,ulong ulRestrictToDevice) + { + EVRInputError result = FnTable.GetAnalogActionData(action,ref pActionData,unActionDataSize,ulRestrictToDevice); + return result; + } + public EVRInputError GetPoseActionDataRelativeToNow(ulong action,ETrackingUniverseOrigin eOrigin,float fPredictedSecondsFromNow,ref InputPoseActionData_t pActionData,uint unActionDataSize,ulong ulRestrictToDevice) + { + EVRInputError result = FnTable.GetPoseActionDataRelativeToNow(action,eOrigin,fPredictedSecondsFromNow,ref pActionData,unActionDataSize,ulRestrictToDevice); + return result; + } + public EVRInputError GetPoseActionDataForNextFrame(ulong action,ETrackingUniverseOrigin eOrigin,ref InputPoseActionData_t pActionData,uint unActionDataSize,ulong ulRestrictToDevice) + { + EVRInputError result = FnTable.GetPoseActionDataForNextFrame(action,eOrigin,ref pActionData,unActionDataSize,ulRestrictToDevice); + return result; + } + public EVRInputError GetSkeletalActionData(ulong action,ref InputSkeletalActionData_t pActionData,uint unActionDataSize) + { + EVRInputError result = FnTable.GetSkeletalActionData(action,ref pActionData,unActionDataSize); + return result; + } + public EVRInputError GetDominantHand(ref ETrackedControllerRole peDominantHand) + { + EVRInputError result = FnTable.GetDominantHand(ref peDominantHand); + return result; + } + public EVRInputError SetDominantHand(ETrackedControllerRole eDominantHand) + { + EVRInputError result = FnTable.SetDominantHand(eDominantHand); + return result; + } + public EVRInputError GetBoneCount(ulong action,ref uint pBoneCount) + { + pBoneCount = 0; + EVRInputError result = FnTable.GetBoneCount(action,ref pBoneCount); + return result; + } + public EVRInputError GetBoneHierarchy(ulong action,int [] pParentIndices) + { + EVRInputError result = FnTable.GetBoneHierarchy(action,pParentIndices,(uint) pParentIndices.Length); + return result; + } + public EVRInputError GetBoneName(ulong action,int nBoneIndex,System.Text.StringBuilder pchBoneName,uint unNameBufferSize) + { + EVRInputError result = FnTable.GetBoneName(action,nBoneIndex,pchBoneName,unNameBufferSize); + return result; + } + public EVRInputError GetSkeletalReferenceTransforms(ulong action,EVRSkeletalTransformSpace eTransformSpace,EVRSkeletalReferencePose eReferencePose,VRBoneTransform_t [] pTransformArray) + { + EVRInputError result = FnTable.GetSkeletalReferenceTransforms(action,eTransformSpace,eReferencePose,pTransformArray,(uint) pTransformArray.Length); + return result; + } + public EVRInputError GetSkeletalTrackingLevel(ulong action,ref EVRSkeletalTrackingLevel pSkeletalTrackingLevel) + { + EVRInputError result = FnTable.GetSkeletalTrackingLevel(action,ref pSkeletalTrackingLevel); + return result; + } + public EVRInputError GetSkeletalBoneData(ulong action,EVRSkeletalTransformSpace eTransformSpace,EVRSkeletalMotionRange eMotionRange,VRBoneTransform_t [] pTransformArray) + { + EVRInputError result = FnTable.GetSkeletalBoneData(action,eTransformSpace,eMotionRange,pTransformArray,(uint) pTransformArray.Length); + return result; + } + public EVRInputError GetSkeletalSummaryData(ulong action,EVRSummaryType eSummaryType,ref VRSkeletalSummaryData_t pSkeletalSummaryData) + { + EVRInputError result = FnTable.GetSkeletalSummaryData(action,eSummaryType,ref pSkeletalSummaryData); + return result; + } + public EVRInputError GetSkeletalBoneDataCompressed(ulong action,EVRSkeletalMotionRange eMotionRange,IntPtr pvCompressedData,uint unCompressedSize,ref uint punRequiredCompressedSize) + { + punRequiredCompressedSize = 0; + EVRInputError result = FnTable.GetSkeletalBoneDataCompressed(action,eMotionRange,pvCompressedData,unCompressedSize,ref punRequiredCompressedSize); + return result; + } + public EVRInputError DecompressSkeletalBoneData(IntPtr pvCompressedBuffer,uint unCompressedBufferSize,EVRSkeletalTransformSpace eTransformSpace,VRBoneTransform_t [] pTransformArray) + { + EVRInputError result = FnTable.DecompressSkeletalBoneData(pvCompressedBuffer,unCompressedBufferSize,eTransformSpace,pTransformArray,(uint) pTransformArray.Length); + return result; + } + public EVRInputError TriggerHapticVibrationAction(ulong action,float fStartSecondsFromNow,float fDurationSeconds,float fFrequency,float fAmplitude,ulong ulRestrictToDevice) + { + EVRInputError result = FnTable.TriggerHapticVibrationAction(action,fStartSecondsFromNow,fDurationSeconds,fFrequency,fAmplitude,ulRestrictToDevice); + return result; + } + public EVRInputError GetActionOrigins(ulong actionSetHandle,ulong digitalActionHandle,ulong [] originsOut) + { + EVRInputError result = FnTable.GetActionOrigins(actionSetHandle,digitalActionHandle,originsOut,(uint) originsOut.Length); + return result; + } + public EVRInputError GetOriginLocalizedName(ulong origin,System.Text.StringBuilder pchNameArray,uint unNameArraySize,int unStringSectionsToInclude) + { + EVRInputError result = FnTable.GetOriginLocalizedName(origin,pchNameArray,unNameArraySize,unStringSectionsToInclude); + return result; + } + public EVRInputError GetOriginTrackedDeviceInfo(ulong origin,ref InputOriginInfo_t pOriginInfo,uint unOriginInfoSize) + { + EVRInputError result = FnTable.GetOriginTrackedDeviceInfo(origin,ref pOriginInfo,unOriginInfoSize); + return result; + } + public EVRInputError GetActionBindingInfo(ulong action,InputBindingInfo_t [] pOriginInfo,uint unBindingInfoSize,ref uint punReturnedBindingInfoCount) + { + punReturnedBindingInfoCount = 0; + EVRInputError result = FnTable.GetActionBindingInfo(action,pOriginInfo,unBindingInfoSize,(uint) pOriginInfo.Length,ref punReturnedBindingInfoCount); + return result; + } + public EVRInputError ShowActionOrigins(ulong actionSetHandle,ulong ulActionHandle) + { + EVRInputError result = FnTable.ShowActionOrigins(actionSetHandle,ulActionHandle); + return result; + } + public EVRInputError ShowBindingsForActionSet(VRActiveActionSet_t [] pSets,uint unSizeOfVRSelectedActionSet_t,ulong originToHighlight) + { + EVRInputError result = FnTable.ShowBindingsForActionSet(pSets,unSizeOfVRSelectedActionSet_t,(uint) pSets.Length,originToHighlight); + return result; + } + public EVRInputError GetComponentStateForBinding(string pchRenderModelName,string pchComponentName,ref InputBindingInfo_t pOriginInfo,uint unBindingInfoSize,uint unBindingInfoCount,ref RenderModel_ComponentState_t pComponentState) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + EVRInputError result = FnTable.GetComponentStateForBinding(pchRenderModelNameUtf8,pchComponentNameUtf8,ref pOriginInfo,unBindingInfoSize,unBindingInfoCount,ref pComponentState); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public bool IsUsingLegacyInput() + { + bool result = FnTable.IsUsingLegacyInput(); + return result; + } + public EVRInputError OpenBindingUI(string pchAppKey,ulong ulActionSetHandle,ulong ulDeviceHandle,bool bShowOnDesktop) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRInputError result = FnTable.OpenBindingUI(pchAppKeyUtf8,ulActionSetHandle,ulDeviceHandle,bShowOnDesktop); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public EVRInputError GetBindingVariant(ulong ulDevicePath,System.Text.StringBuilder pchVariantArray,uint unVariantArraySize) + { + EVRInputError result = FnTable.GetBindingVariant(ulDevicePath,pchVariantArray,unVariantArraySize); + return result; + } +} + + +public class CVRIOBuffer +{ + IVRIOBuffer FnTable; + internal CVRIOBuffer(IntPtr pInterface) + { + FnTable = (IVRIOBuffer)Marshal.PtrToStructure(pInterface, typeof(IVRIOBuffer)); + } + public EIOBufferError Open(string pchPath,EIOBufferMode mode,uint unElementSize,uint unElements,ref ulong pulBuffer) + { + IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); + pulBuffer = 0; + EIOBufferError result = FnTable.Open(pchPathUtf8,mode,unElementSize,unElements,ref pulBuffer); + Marshal.FreeHGlobal(pchPathUtf8); + return result; + } + public EIOBufferError Close(ulong ulBuffer) + { + EIOBufferError result = FnTable.Close(ulBuffer); + return result; + } + public EIOBufferError Read(ulong ulBuffer,IntPtr pDst,uint unBytes,ref uint punRead) + { + punRead = 0; + EIOBufferError result = FnTable.Read(ulBuffer,pDst,unBytes,ref punRead); + return result; + } + public EIOBufferError Write(ulong ulBuffer,IntPtr pSrc,uint unBytes) + { + EIOBufferError result = FnTable.Write(ulBuffer,pSrc,unBytes); + return result; + } + public ulong PropertyContainer(ulong ulBuffer) + { + ulong result = FnTable.PropertyContainer(ulBuffer); + return result; + } + public bool HasReaders(ulong ulBuffer) + { + bool result = FnTable.HasReaders(ulBuffer); + return result; + } +} + + +public class CVRSpatialAnchors +{ + IVRSpatialAnchors FnTable; + internal CVRSpatialAnchors(IntPtr pInterface) + { + FnTable = (IVRSpatialAnchors)Marshal.PtrToStructure(pInterface, typeof(IVRSpatialAnchors)); + } + public EVRSpatialAnchorError CreateSpatialAnchorFromDescriptor(string pchDescriptor,ref uint pHandleOut) + { + IntPtr pchDescriptorUtf8 = Utils.ToUtf8(pchDescriptor); + pHandleOut = 0; + EVRSpatialAnchorError result = FnTable.CreateSpatialAnchorFromDescriptor(pchDescriptorUtf8,ref pHandleOut); + Marshal.FreeHGlobal(pchDescriptorUtf8); + return result; + } + public EVRSpatialAnchorError CreateSpatialAnchorFromPose(uint unDeviceIndex,ETrackingUniverseOrigin eOrigin,ref SpatialAnchorPose_t pPose,ref uint pHandleOut) + { + pHandleOut = 0; + EVRSpatialAnchorError result = FnTable.CreateSpatialAnchorFromPose(unDeviceIndex,eOrigin,ref pPose,ref pHandleOut); + return result; + } + public EVRSpatialAnchorError GetSpatialAnchorPose(uint unHandle,ETrackingUniverseOrigin eOrigin,ref SpatialAnchorPose_t pPoseOut) + { + EVRSpatialAnchorError result = FnTable.GetSpatialAnchorPose(unHandle,eOrigin,ref pPoseOut); + return result; + } + public EVRSpatialAnchorError GetSpatialAnchorDescriptor(uint unHandle,System.Text.StringBuilder pchDescriptorOut,ref uint punDescriptorBufferLenInOut) + { + punDescriptorBufferLenInOut = 0; + EVRSpatialAnchorError result = FnTable.GetSpatialAnchorDescriptor(unHandle,pchDescriptorOut,ref punDescriptorBufferLenInOut); + return result; + } +} + + +public class CVRDebug +{ + IVRDebug FnTable; + internal CVRDebug(IntPtr pInterface) + { + FnTable = (IVRDebug)Marshal.PtrToStructure(pInterface, typeof(IVRDebug)); + } + public EVRDebugError EmitVrProfilerEvent(string pchMessage) + { + IntPtr pchMessageUtf8 = Utils.ToUtf8(pchMessage); + EVRDebugError result = FnTable.EmitVrProfilerEvent(pchMessageUtf8); + Marshal.FreeHGlobal(pchMessageUtf8); + return result; + } + public EVRDebugError BeginVrProfilerEvent(ref ulong pHandleOut) + { + pHandleOut = 0; + EVRDebugError result = FnTable.BeginVrProfilerEvent(ref pHandleOut); + return result; + } + public EVRDebugError FinishVrProfilerEvent(ulong hHandle,string pchMessage) + { + IntPtr pchMessageUtf8 = Utils.ToUtf8(pchMessage); + EVRDebugError result = FnTable.FinishVrProfilerEvent(hHandle,pchMessageUtf8); + Marshal.FreeHGlobal(pchMessageUtf8); + return result; + } + public uint DriverDebugRequest(uint unDeviceIndex,string pchRequest,System.Text.StringBuilder pchResponseBuffer,uint unResponseBufferSize) + { + IntPtr pchRequestUtf8 = Utils.ToUtf8(pchRequest); + uint result = FnTable.DriverDebugRequest(unDeviceIndex,pchRequestUtf8,pchResponseBuffer,unResponseBufferSize); + Marshal.FreeHGlobal(pchRequestUtf8); + return result; + } +} + + +public class CVRIPCResourceManagerClient +{ + IVRIPCResourceManagerClient FnTable; + internal CVRIPCResourceManagerClient(IntPtr pInterface) + { + FnTable = (IVRIPCResourceManagerClient)Marshal.PtrToStructure(pInterface, typeof(IVRIPCResourceManagerClient)); + } + public bool NewSharedVulkanImage(uint nImageFormat,uint nWidth,uint nHeight,bool bRenderable,bool bMappable,bool bComputeAccess,uint unMipLevels,uint unArrayLayerCount,ref ulong pSharedHandle) + { + pSharedHandle = 0; + bool result = FnTable.NewSharedVulkanImage(nImageFormat,nWidth,nHeight,bRenderable,bMappable,bComputeAccess,unMipLevels,unArrayLayerCount,ref pSharedHandle); + return result; + } + public bool NewSharedVulkanBuffer(uint nSize,uint nUsageFlags,ref ulong pSharedHandle) + { + pSharedHandle = 0; + bool result = FnTable.NewSharedVulkanBuffer(nSize,nUsageFlags,ref pSharedHandle); + return result; + } + public bool NewSharedVulkanSemaphore(bool bCounting,ref ulong pSharedHandle) + { + pSharedHandle = 0; + bool result = FnTable.NewSharedVulkanSemaphore(bCounting,ref pSharedHandle); + return result; + } + public bool RefResource(ulong hSharedHandle,ref ulong pNewIpcHandle) + { + pNewIpcHandle = 0; + bool result = FnTable.RefResource(hSharedHandle,ref pNewIpcHandle); + return result; + } + public bool UnrefResource(ulong hSharedHandle) + { + bool result = FnTable.UnrefResource(hSharedHandle); + return result; + } + public bool GetDmabufFormats(ref uint pOutFormatCount,ref uint pOutFormats) + { + pOutFormatCount = 0; + pOutFormats = 0; + bool result = FnTable.GetDmabufFormats(ref pOutFormatCount,ref pOutFormats); + return result; + } + public bool GetDmabufModifiers(EVRApplicationType eApplicationType,uint unDRMFormat,ref uint pOutModifierCount,ref ulong pOutModifiers) + { + pOutModifierCount = 0; + pOutModifiers = 0; + bool result = FnTable.GetDmabufModifiers(eApplicationType,unDRMFormat,ref pOutModifierCount,ref pOutModifiers); + return result; + } + public bool ImportDmabuf(EVRApplicationType eApplicationType,ref DmabufAttributes_t pDmabufAttributes,ref ulong pSharedHandle) + { + pSharedHandle = 0; + bool result = FnTable.ImportDmabuf(eApplicationType,ref pDmabufAttributes,ref pSharedHandle); + return result; + } + public bool ReceiveSharedFd(ulong ulIpcHandle,ref int pOutFd) + { + pOutFd = 0; + bool result = FnTable.ReceiveSharedFd(ulIpcHandle,ref pOutFd); + return result; + } + public void DestructIVRIPCResourceManagerClient() + { + FnTable.DestructIVRIPCResourceManagerClient(); + } +} + + +public class CVRProperties +{ + IVRProperties FnTable; + internal CVRProperties(IntPtr pInterface) + { + FnTable = (IVRProperties)Marshal.PtrToStructure(pInterface, typeof(IVRProperties)); + } + public ETrackedPropertyError ReadPropertyBatch(ulong ulContainerHandle,ref PropertyRead_t pBatch,uint unBatchEntryCount) + { + ETrackedPropertyError result = FnTable.ReadPropertyBatch(ulContainerHandle,ref pBatch,unBatchEntryCount); + return result; + } + public ETrackedPropertyError WritePropertyBatch(ulong ulContainerHandle,ref PropertyWrite_t pBatch,uint unBatchEntryCount) + { + ETrackedPropertyError result = FnTable.WritePropertyBatch(ulContainerHandle,ref pBatch,unBatchEntryCount); + return result; + } + public string GetPropErrorNameFromEnum(ETrackedPropertyError error) + { + IntPtr result = FnTable.GetPropErrorNameFromEnum(error); + return Marshal.PtrToStringAnsi(result); + } + public ulong TrackedDeviceToPropertyContainer(uint nDevice) + { + ulong result = FnTable.TrackedDeviceToPropertyContainer(nDevice); + return result; + } +} + + +public class CVRPaths +{ + IVRPaths FnTable; + internal CVRPaths(IntPtr pInterface) + { + FnTable = (IVRPaths)Marshal.PtrToStructure(pInterface, typeof(IVRPaths)); + } + public ETrackedPropertyError ReadPathBatch(ulong ulRootHandle,ref PathRead_t pBatch,uint unBatchEntryCount) + { + ETrackedPropertyError result = FnTable.ReadPathBatch(ulRootHandle,ref pBatch,unBatchEntryCount); + return result; + } + public ETrackedPropertyError WritePathBatch(ulong ulRootHandle,ref PathWrite_t pBatch,uint unBatchEntryCount) + { + ETrackedPropertyError result = FnTable.WritePathBatch(ulRootHandle,ref pBatch,unBatchEntryCount); + return result; + } + public ETrackedPropertyError StringToHandle(ref ulong pHandle,string pchPath) + { + pHandle = 0; + IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); + ETrackedPropertyError result = FnTable.StringToHandle(ref pHandle,pchPathUtf8); + Marshal.FreeHGlobal(pchPathUtf8); + return result; + } + public ETrackedPropertyError HandleToString(ulong pHandle,string pchBuffer,uint unBufferSize,ref uint punBufferSizeUsed) + { + punBufferSizeUsed = 0; + ETrackedPropertyError result = FnTable.HandleToString(pHandle,pchBuffer,unBufferSize,ref punBufferSizeUsed); + return result; + } +} + + +public class CVRBlockQueue +{ + IVRBlockQueue FnTable; + internal CVRBlockQueue(IntPtr pInterface) + { + FnTable = (IVRBlockQueue)Marshal.PtrToStructure(pInterface, typeof(IVRBlockQueue)); + } + public EBlockQueueError Create(ref ulong pulQueueHandle,string pchPath,uint unBlockDataSize,uint unBlockHeaderSize,uint unBlockCount,uint unFlags) + { + pulQueueHandle = 0; + IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); + EBlockQueueError result = FnTable.Create(ref pulQueueHandle,pchPathUtf8,unBlockDataSize,unBlockHeaderSize,unBlockCount,unFlags); + Marshal.FreeHGlobal(pchPathUtf8); + return result; + } + public EBlockQueueError Connect(ref ulong pulQueueHandle,string pchPath) + { + pulQueueHandle = 0; + IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); + EBlockQueueError result = FnTable.Connect(ref pulQueueHandle,pchPathUtf8); + Marshal.FreeHGlobal(pchPathUtf8); + return result; + } + public EBlockQueueError Destroy(ulong ulQueueHandle) + { + EBlockQueueError result = FnTable.Destroy(ulQueueHandle); + return result; + } + public EBlockQueueError AcquireWriteOnlyBlock(ulong ulQueueHandle,ref ulong pulBlockHandle,ref IntPtr ppvBuffer) + { + pulBlockHandle = 0; + EBlockQueueError result = FnTable.AcquireWriteOnlyBlock(ulQueueHandle,ref pulBlockHandle,ref ppvBuffer); + return result; + } + public EBlockQueueError ReleaseWriteOnlyBlock(ulong ulQueueHandle,ulong ulBlockHandle) + { + EBlockQueueError result = FnTable.ReleaseWriteOnlyBlock(ulQueueHandle,ulBlockHandle); + return result; + } + public EBlockQueueError WaitAndAcquireReadOnlyBlock(ulong ulQueueHandle,ref ulong pulBlockHandle,ref IntPtr ppvBuffer,EBlockQueueReadType eReadType,uint unTimeoutMs) + { + pulBlockHandle = 0; + EBlockQueueError result = FnTable.WaitAndAcquireReadOnlyBlock(ulQueueHandle,ref pulBlockHandle,ref ppvBuffer,eReadType,unTimeoutMs); + return result; + } + public EBlockQueueError AcquireReadOnlyBlock(ulong ulQueueHandle,ref ulong pulBlockHandle,ref IntPtr ppvBuffer,EBlockQueueReadType eReadType) + { + pulBlockHandle = 0; + EBlockQueueError result = FnTable.AcquireReadOnlyBlock(ulQueueHandle,ref pulBlockHandle,ref ppvBuffer,eReadType); + return result; + } + public EBlockQueueError ReleaseReadOnlyBlock(ulong ulQueueHandle,ulong ulBlockHandle) + { + EBlockQueueError result = FnTable.ReleaseReadOnlyBlock(ulQueueHandle,ulBlockHandle); + return result; + } + public EBlockQueueError QueueHasReader(ulong ulQueueHandle,ref bool pbHasReaders) + { + pbHasReaders = false; + EBlockQueueError result = FnTable.QueueHasReader(ulQueueHandle,ref pbHasReaders); + return result; + } +} + + +public class OpenVRInterop +{ + [DllImportAttribute("openvr_api", EntryPoint = "VR_InitInternal", CallingConvention = CallingConvention.Cdecl)] + internal static extern uint InitInternal(ref EVRInitError peError, EVRApplicationType eApplicationType); + [DllImportAttribute("openvr_api", EntryPoint = "VR_InitInternal2", CallingConvention = CallingConvention.Cdecl)] + internal static extern uint InitInternal2(ref EVRInitError peError, EVRApplicationType eApplicationType,[In, MarshalAs(UnmanagedType.LPStr)] string pStartupInfo); + [DllImportAttribute("openvr_api", EntryPoint = "VR_ShutdownInternal", CallingConvention = CallingConvention.Cdecl)] + internal static extern void ShutdownInternal(); + [DllImportAttribute("openvr_api", EntryPoint = "VR_IsHmdPresent", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool IsHmdPresent(); + [DllImportAttribute("openvr_api", EntryPoint = "VR_IsRuntimeInstalled", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool IsRuntimeInstalled(); + [DllImportAttribute("openvr_api", EntryPoint = "VR_RuntimePath", CallingConvention = CallingConvention.Cdecl)] + internal static extern string RuntimePath(); + [DllImportAttribute("openvr_api", EntryPoint = "VR_GetRuntimePath", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool GetRuntimePath(System.Text.StringBuilder pchPathBuffer, uint unBufferSize, ref uint punRequiredBufferSize); + [DllImportAttribute("openvr_api", EntryPoint = "VR_GetStringForHmdError", CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr GetStringForHmdError(EVRInitError error); + [DllImportAttribute("openvr_api", EntryPoint = "VR_GetGenericInterface", CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr GetGenericInterface([In, MarshalAs(UnmanagedType.LPStr)] string pchInterfaceVersion, ref EVRInitError peError); + [DllImportAttribute("openvr_api", EntryPoint = "VR_IsInterfaceVersionValid", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool IsInterfaceVersionValid([In, MarshalAs(UnmanagedType.LPStr)] string pchInterfaceVersion); + [DllImportAttribute("openvr_api", EntryPoint = "VR_GetInitToken", CallingConvention = CallingConvention.Cdecl)] + internal static extern uint GetInitToken(); +} + + +public enum EVREye +{ + Eye_Left = 0, + Eye_Right = 1, +} +public enum ETextureType +{ + Invalid = -1, + DirectX = 0, + OpenGL = 1, + Vulkan = 2, + IOSurface = 3, + DirectX12 = 4, + DXGISharedHandle = 5, + Metal = 6, + Reserved = 7, + SharedTextureHandle = 8, +} +public enum EColorSpace +{ + Auto = 0, + Gamma = 1, + Linear = 2, +} +public enum ETrackingResult +{ + Uninitialized = 1, + Calibrating_InProgress = 100, + Calibrating_OutOfRange = 101, + Running_OK = 200, + Running_OutOfRange = 201, + Fallback_RotationOnly = 300, +} +public enum ETrackedDeviceClass +{ + Invalid = 0, + HMD = 1, + Controller = 2, + GenericTracker = 3, + TrackingReference = 4, + DisplayRedirect = 5, + Max = 6, +} +public enum ETrackedControllerRole +{ + Invalid = 0, + LeftHand = 1, + RightHand = 2, + OptOut = 3, + Treadmill = 4, + Stylus = 5, + Max = 5, +} +public enum ETrackingUniverseOrigin +{ + TrackingUniverseSeated = 0, + TrackingUniverseStanding = 1, + TrackingUniverseRawAndUncalibrated = 2, +} +public enum EAdditionalRadioFeatures +{ + None = 0, + HTCLinkBox = 1, + InternalDongle = 2, + ExternalDongle = 4, +} +public enum ETrackedDeviceProperty +{ + Prop_Invalid = 0, + Prop_TrackingSystemName_String = 1000, + Prop_ModelNumber_String = 1001, + Prop_SerialNumber_String = 1002, + Prop_RenderModelName_String = 1003, + Prop_WillDriftInYaw_Bool = 1004, + Prop_ManufacturerName_String = 1005, + Prop_TrackingFirmwareVersion_String = 1006, + Prop_HardwareRevision_String = 1007, + Prop_AllWirelessDongleDescriptions_String = 1008, + Prop_ConnectedWirelessDongle_String = 1009, + Prop_DeviceIsWireless_Bool = 1010, + Prop_DeviceIsCharging_Bool = 1011, + Prop_DeviceBatteryPercentage_Float = 1012, + Prop_StatusDisplayTransform_Matrix34 = 1013, + Prop_Firmware_UpdateAvailable_Bool = 1014, + Prop_Firmware_ManualUpdate_Bool = 1015, + Prop_Firmware_ManualUpdateURL_String = 1016, + Prop_HardwareRevision_Uint64 = 1017, + Prop_FirmwareVersion_Uint64 = 1018, + Prop_FPGAVersion_Uint64 = 1019, + Prop_VRCVersion_Uint64 = 1020, + Prop_RadioVersion_Uint64 = 1021, + Prop_DongleVersion_Uint64 = 1022, + Prop_BlockServerShutdown_Bool = 1023, + Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024, + Prop_ContainsProximitySensor_Bool = 1025, + Prop_DeviceProvidesBatteryStatus_Bool = 1026, + Prop_DeviceCanPowerOff_Bool = 1027, + Prop_Firmware_ProgrammingTarget_String = 1028, + Prop_DeviceClass_Int32 = 1029, + Prop_HasCamera_Bool = 1030, + Prop_DriverVersion_String = 1031, + Prop_Firmware_ForceUpdateRequired_Bool = 1032, + Prop_ViveSystemButtonFixRequired_Bool = 1033, + Prop_ParentDriver_Uint64 = 1034, + Prop_ResourceRoot_String = 1035, + Prop_RegisteredDeviceType_String = 1036, + Prop_InputProfilePath_String = 1037, + Prop_NeverTracked_Bool = 1038, + Prop_NumCameras_Int32 = 1039, + Prop_CameraFrameLayout_Int32 = 1040, + Prop_CameraStreamFormat_Int32 = 1041, + Prop_AdditionalDeviceSettingsPath_String = 1042, + Prop_Identifiable_Bool = 1043, + Prop_BootloaderVersion_Uint64 = 1044, + Prop_AdditionalSystemReportData_String = 1045, + Prop_CompositeFirmwareVersion_String = 1046, + Prop_Firmware_RemindUpdate_Bool = 1047, + Prop_PeripheralApplicationVersion_Uint64 = 1048, + Prop_ManufacturerSerialNumber_String = 1049, + Prop_ComputedSerialNumber_String = 1050, + Prop_EstimatedDeviceFirstUseTime_Int32 = 1051, + Prop_DevicePowerUsage_Float = 1052, + Prop_IgnoreMotionForStandby_Bool = 1053, + Prop_ActualTrackingSystemName_String = 1054, + Prop_AllowCameraToggle_Bool = 1055, + Prop_AllowLightSourceFrequency_Bool = 1056, + Prop_SteamRemoteClientID_Uint64 = 1057, + Prop_Reserved_1058 = 1058, + Prop_ReportsTimeSinceVSync_Bool = 2000, + Prop_SecondsFromVsyncToPhotons_Float = 2001, + Prop_DisplayFrequency_Float = 2002, + Prop_UserIpdMeters_Float = 2003, + Prop_CurrentUniverseId_Uint64 = 2004, + Prop_PreviousUniverseId_Uint64 = 2005, + Prop_DisplayFirmwareVersion_Uint64 = 2006, + Prop_IsOnDesktop_Bool = 2007, + Prop_DisplayMCType_Int32 = 2008, + Prop_DisplayMCOffset_Float = 2009, + Prop_DisplayMCScale_Float = 2010, + Prop_EdidVendorID_Int32 = 2011, + Prop_DisplayMCImageLeft_String = 2012, + Prop_DisplayMCImageRight_String = 2013, + Prop_DisplayGCBlackClamp_Float = 2014, + Prop_EdidProductID_Int32 = 2015, + Prop_CameraToHeadTransform_Matrix34 = 2016, + Prop_DisplayGCType_Int32 = 2017, + Prop_DisplayGCOffset_Float = 2018, + Prop_DisplayGCScale_Float = 2019, + Prop_DisplayGCPrescale_Float = 2020, + Prop_DisplayGCImage_String = 2021, + Prop_LensCenterLeftU_Float = 2022, + Prop_LensCenterLeftV_Float = 2023, + Prop_LensCenterRightU_Float = 2024, + Prop_LensCenterRightV_Float = 2025, + Prop_UserHeadToEyeDepthMeters_Float = 2026, + Prop_CameraFirmwareVersion_Uint64 = 2027, + Prop_CameraFirmwareDescription_String = 2028, + Prop_DisplayFPGAVersion_Uint64 = 2029, + Prop_DisplayBootloaderVersion_Uint64 = 2030, + Prop_DisplayHardwareVersion_Uint64 = 2031, + Prop_AudioFirmwareVersion_Uint64 = 2032, + Prop_CameraCompatibilityMode_Int32 = 2033, + Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034, + Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035, + Prop_DisplaySuppressed_Bool = 2036, + Prop_DisplayAllowNightMode_Bool = 2037, + Prop_DisplayMCImageWidth_Int32 = 2038, + Prop_DisplayMCImageHeight_Int32 = 2039, + Prop_DisplayMCImageNumChannels_Int32 = 2040, + Prop_DisplayMCImageData_Binary = 2041, + Prop_SecondsFromPhotonsToVblank_Float = 2042, + Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043, + Prop_DisplayDebugMode_Bool = 2044, + Prop_GraphicsAdapterLuid_Uint64 = 2045, + Prop_DriverProvidedChaperonePath_String = 2048, + Prop_ExpectedTrackingReferenceCount_Int32 = 2049, + Prop_ExpectedControllerCount_Int32 = 2050, + Prop_NamedIconPathControllerLeftDeviceOff_String = 2051, + Prop_NamedIconPathControllerRightDeviceOff_String = 2052, + Prop_NamedIconPathTrackingReferenceDeviceOff_String = 2053, + Prop_DoNotApplyPrediction_Bool = 2054, + Prop_CameraToHeadTransforms_Matrix34_Array = 2055, + Prop_DistortionMeshResolution_Int32 = 2056, + Prop_DriverIsDrawingControllers_Bool = 2057, + Prop_DriverRequestsApplicationPause_Bool = 2058, + Prop_DriverRequestsReducedRendering_Bool = 2059, + Prop_MinimumIpdStepMeters_Float = 2060, + Prop_AudioBridgeFirmwareVersion_Uint64 = 2061, + Prop_ImageBridgeFirmwareVersion_Uint64 = 2062, + Prop_ImuToHeadTransform_Matrix34 = 2063, + Prop_ImuFactoryGyroBias_Vector3 = 2064, + Prop_ImuFactoryGyroScale_Vector3 = 2065, + Prop_ImuFactoryAccelerometerBias_Vector3 = 2066, + Prop_ImuFactoryAccelerometerScale_Vector3 = 2067, + Prop_ConfigurationIncludesLighthouse20Features_Bool = 2069, + Prop_AdditionalRadioFeatures_Uint64 = 2070, + Prop_CameraWhiteBalance_Vector4_Array = 2071, + Prop_CameraDistortionFunction_Int32_Array = 2072, + Prop_CameraDistortionCoefficients_Float_Array = 2073, + Prop_ExpectedControllerType_String = 2074, + Prop_HmdTrackingStyle_Int32 = 2075, + Prop_DriverProvidedChaperoneVisibility_Bool = 2076, + Prop_HmdColumnCorrectionSettingPrefix_String = 2077, + Prop_CameraSupportsCompatibilityModes_Bool = 2078, + Prop_SupportsRoomViewDepthProjection_Bool = 2079, + Prop_DisplayAvailableFrameRates_Float_Array = 2080, + Prop_DisplaySupportsMultipleFramerates_Bool = 2081, + Prop_DisplayColorMultLeft_Vector3 = 2082, + Prop_DisplayColorMultRight_Vector3 = 2083, + Prop_DisplaySupportsRuntimeFramerateChange_Bool = 2084, + Prop_DisplaySupportsAnalogGain_Bool = 2085, + Prop_DisplayMinAnalogGain_Float = 2086, + Prop_DisplayMaxAnalogGain_Float = 2087, + Prop_CameraExposureTime_Float = 2088, + Prop_CameraGlobalGain_Float = 2089, + Prop_DashboardScale_Float = 2091, + Prop_Hmd_SupportsHDR10_Bool = 2093, + Prop_Hmd_EnableParallelRenderCameras_Bool = 2094, + Prop_DriverProvidedChaperoneJson_String = 2095, + Prop_ForceSystemLayerUseAppPoses_Bool = 2096, + Prop_DashboardLinkSupport_Int32 = 2097, + Prop_DisplayMinUIAnalogGain_Float = 2098, + Prop_IpdUIRangeMinMeters_Float = 2100, + Prop_IpdUIRangeMaxMeters_Float = 2101, + Prop_Hmd_SupportsHDCP14LegacyCompat_Bool = 2102, + Prop_Hmd_SupportsMicMonitoring_Bool = 2103, + Prop_Hmd_SupportsDisplayPortTrainingMode_Bool = 2104, + Prop_Hmd_SupportsRoomViewDirect_Bool = 2105, + Prop_Hmd_SupportsAppThrottling_Bool = 2106, + Prop_Hmd_SupportsGpuBusMonitoring_Bool = 2107, + Prop_DriverDisplaysIPDChanges_Bool = 2108, + Prop_Reserved_2110 = 2110, + Prop_Reserved_2111 = 2111, + Prop_Reserved_2112 = 2112, + Prop_Hmd_MaxDistortedTextureWidth_Int32 = 2113, + Prop_Hmd_MaxDistortedTextureHeight_Int32 = 2114, + Prop_Hmd_AllowSupersampleFiltering_Bool = 2115, + Prop_Hmd_AllowsClientToControlTextureIndex = 2116, + Prop_Reserved_2117 = 2117, + Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200, + Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201, + Prop_DriverRequestedMuraFeather_InnerRight_Int32 = 2202, + Prop_DriverRequestedMuraFeather_InnerTop_Int32 = 2203, + Prop_DriverRequestedMuraFeather_InnerBottom_Int32 = 2204, + Prop_DriverRequestedMuraFeather_OuterLeft_Int32 = 2205, + Prop_DriverRequestedMuraFeather_OuterRight_Int32 = 2206, + Prop_DriverRequestedMuraFeather_OuterTop_Int32 = 2207, + Prop_DriverRequestedMuraFeather_OuterBottom_Int32 = 2208, + Prop_Audio_DefaultPlaybackDeviceId_String = 2300, + Prop_Audio_DefaultRecordingDeviceId_String = 2301, + Prop_Audio_DefaultPlaybackDeviceVolume_Float = 2302, + Prop_Audio_SupportsDualSpeakerAndJackOutput_Bool = 2303, + Prop_Audio_DriverManagesPlaybackVolumeControl_Bool = 2304, + Prop_Audio_DriverPlaybackVolume_Float = 2305, + Prop_Audio_DriverPlaybackMute_Bool = 2306, + Prop_Audio_DriverManagesRecordingVolumeControl_Bool = 2307, + Prop_Audio_DriverRecordingVolume_Float = 2308, + Prop_Audio_DriverRecordingMute_Bool = 2309, + Prop_Audio_PipewirePlaybackNode_Int32 = 2400, + Prop_Audio_PipewireRecordingNode_Int32 = 2401, + Prop_AttachedDeviceId_String = 3000, + Prop_SupportedButtons_Uint64 = 3001, + Prop_Axis0Type_Int32 = 3002, + Prop_Axis1Type_Int32 = 3003, + Prop_Axis2Type_Int32 = 3004, + Prop_Axis3Type_Int32 = 3005, + Prop_Axis4Type_Int32 = 3006, + Prop_ControllerRoleHint_Int32 = 3007, + Prop_FieldOfViewLeftDegrees_Float = 4000, + Prop_FieldOfViewRightDegrees_Float = 4001, + Prop_FieldOfViewTopDegrees_Float = 4002, + Prop_FieldOfViewBottomDegrees_Float = 4003, + Prop_TrackingRangeMinimumMeters_Float = 4004, + Prop_TrackingRangeMaximumMeters_Float = 4005, + Prop_ModeLabel_String = 4006, + Prop_CanWirelessIdentify_Bool = 4007, + Prop_Nonce_Int32 = 4008, + Prop_IconPathName_String = 5000, + Prop_NamedIconPathDeviceOff_String = 5001, + Prop_NamedIconPathDeviceSearching_String = 5002, + Prop_NamedIconPathDeviceSearchingAlert_String = 5003, + Prop_NamedIconPathDeviceReady_String = 5004, + Prop_NamedIconPathDeviceReadyAlert_String = 5005, + Prop_NamedIconPathDeviceNotReady_String = 5006, + Prop_NamedIconPathDeviceStandby_String = 5007, + Prop_NamedIconPathDeviceAlertLow_String = 5008, + Prop_NamedIconPathDeviceStandbyAlert_String = 5009, + Prop_DisplayHiddenArea_Binary_Start = 5100, + Prop_DisplayHiddenArea_Binary_End = 5150, + Prop_ParentContainer = 5151, + Prop_OverrideContainer_Uint64 = 5152, + Prop_UserConfigPath_String = 6000, + Prop_InstallPath_String = 6001, + Prop_HasDisplayComponent_Bool = 6002, + Prop_HasControllerComponent_Bool = 6003, + Prop_HasCameraComponent_Bool = 6004, + Prop_HasDriverDirectModeComponent_Bool = 6005, + Prop_HasVirtualDisplayComponent_Bool = 6006, + Prop_HasSpatialAnchorsSupport_Bool = 6007, + Prop_SupportsXrTextureSets_Bool = 6008, + Prop_SupportsXrEyeGazeInteraction_Bool = 6009, + Prop_DeviceHasNoIMU_Bool = 6010, + Prop_UseAdvancedPrediction_Bool = 6011, + Prop_ControllerType_String = 7000, + Prop_ControllerHandSelectionPriority_Int32 = 7002, + Prop_VendorSpecific_Reserved_Start = 10000, + Prop_VendorSpecific_Reserved_End = 10999, + Prop_Reserved_11000 = 11000, + Prop_Reserved_11001 = 11001, + Prop_Reserved_11002 = 11002, + Prop_Reserved_11003 = 11003, + Prop_Reserved_11004 = 11004, + Prop_TrackedDeviceProperty_Max = 1000000, +} +public enum ETrackedPropertyError +{ + TrackedProp_Success = 0, + TrackedProp_WrongDataType = 1, + TrackedProp_WrongDeviceClass = 2, + TrackedProp_BufferTooSmall = 3, + TrackedProp_UnknownProperty = 4, + TrackedProp_InvalidDevice = 5, + TrackedProp_CouldNotContactServer = 6, + TrackedProp_ValueNotProvidedByDevice = 7, + TrackedProp_StringExceedsMaximumLength = 8, + TrackedProp_NotYetAvailable = 9, + TrackedProp_PermissionDenied = 10, + TrackedProp_InvalidOperation = 11, + TrackedProp_CannotWriteToWildcards = 12, + TrackedProp_IPCReadFailure = 13, + TrackedProp_OutOfMemory = 14, + TrackedProp_InvalidContainer = 15, +} +public enum EHmdTrackingStyle +{ + Unknown = 0, + Lighthouse = 1, + OutsideInCameras = 2, + InsideOutCameras = 3, +} +public enum EVRSubmitFlags +{ + Submit_Default = 0, + Submit_LensDistortionAlreadyApplied = 1, + Submit_GlRenderBuffer = 2, + Submit_Reserved = 4, + Submit_TextureWithPose = 8, + Submit_TextureWithDepth = 16, + Submit_FrameDiscontinuity = 32, + Submit_VulkanTextureWithArrayData = 64, + Submit_GlArrayTexture = 128, + Submit_IsEgl = 256, + Submit_Reserved2 = 32768, + Submit_Reserved3 = 65536, + Submit_Reserved4 = 131072, + Submit_Reserved5 = 262144, +} +public enum EVRState +{ + Undefined = -1, + Off = 0, + Searching = 1, + Searching_Alert = 2, + Ready = 3, + Ready_Alert = 4, + NotReady = 5, + Standby = 6, + Ready_Alert_Low = 7, +} +public enum EVREventType +{ + VREvent_None = 0, + VREvent_TrackedDeviceActivated = 100, + VREvent_TrackedDeviceDeactivated = 101, + VREvent_TrackedDeviceUpdated = 102, + VREvent_TrackedDeviceUserInteractionStarted = 103, + VREvent_TrackedDeviceUserInteractionEnded = 104, + VREvent_IpdChanged = 105, + VREvent_EnterStandbyMode = 106, + VREvent_LeaveStandbyMode = 107, + VREvent_TrackedDeviceRoleChanged = 108, + VREvent_WatchdogWakeUpRequested = 109, + VREvent_LensDistortionChanged = 110, + VREvent_PropertyChanged = 111, + VREvent_WirelessDisconnect = 112, + VREvent_WirelessReconnect = 113, + VREvent_Reserved_0114 = 114, + VREvent_Reserved_0115 = 115, + VREvent_ButtonPress = 200, + VREvent_ButtonUnpress = 201, + VREvent_ButtonTouch = 202, + VREvent_ButtonUntouch = 203, + VREvent_Modal_Cancel = 257, + VREvent_MouseMove = 300, + VREvent_MouseButtonDown = 301, + VREvent_MouseButtonUp = 302, + VREvent_FocusEnter = 303, + VREvent_FocusLeave = 304, + VREvent_ScrollDiscrete = 305, + VREvent_TouchPadMove = 306, + VREvent_OverlayFocusChanged = 307, + VREvent_ReloadOverlays = 308, + VREvent_ScrollSmooth = 309, + VREvent_LockMousePosition = 310, + VREvent_UnlockMousePosition = 311, + VREvent_InputFocusCaptured = 400, + VREvent_InputFocusReleased = 401, + VREvent_SceneApplicationChanged = 404, + VREvent_InputFocusChanged = 406, + VREvent_SceneApplicationUsingWrongGraphicsAdapter = 408, + VREvent_ActionBindingReloaded = 409, + VREvent_HideRenderModels = 410, + VREvent_ShowRenderModels = 411, + VREvent_SceneApplicationStateChanged = 412, + VREvent_SceneAppPipeDisconnected = 413, + VREvent_ConsoleOpened = 420, + VREvent_ConsoleClosed = 421, + VREvent_OverlayShown = 500, + VREvent_OverlayHidden = 501, + VREvent_DashboardActivated = 502, + VREvent_DashboardDeactivated = 503, + VREvent_ResetDashboard = 506, + VREvent_ImageLoaded = 508, + VREvent_ShowKeyboard = 509, + VREvent_HideKeyboard = 510, + VREvent_OverlayGamepadFocusGained = 511, + VREvent_OverlayGamepadFocusLost = 512, + VREvent_OverlaySharedTextureChanged = 513, + VREvent_ScreenshotTriggered = 516, + VREvent_ImageFailed = 517, + VREvent_DashboardOverlayCreated = 518, + VREvent_SwitchGamepadFocus = 519, + VREvent_RequestScreenshot = 520, + VREvent_ScreenshotTaken = 521, + VREvent_ScreenshotFailed = 522, + VREvent_SubmitScreenshotToDashboard = 523, + VREvent_ScreenshotProgressToDashboard = 524, + VREvent_PrimaryDashboardDeviceChanged = 525, + VREvent_RoomViewShown = 526, + VREvent_RoomViewHidden = 527, + VREvent_ShowUI = 528, + VREvent_ShowDevTools = 529, + VREvent_DesktopViewUpdating = 530, + VREvent_DesktopViewReady = 531, + VREvent_StartDashboard = 532, + VREvent_ElevatePrism = 533, + VREvent_OverlayClosed = 534, + VREvent_DashboardThumbChanged = 535, + VREvent_DesktopMightBeVisible = 536, + VREvent_DesktopMightBeHidden = 537, + VREvent_MutualSteamCapabilitiesChanged = 538, + VREvent_OverlayCreated = 539, + VREvent_OverlayDestroyed = 540, + VREvent_TrackingRecordingStarted = 541, + VREvent_TrackingRecordingStopped = 542, + VREvent_SetTrackingRecordingPath = 543, + VREvent_Reserved_0560 = 560, + VREvent_Reserved_0561 = 561, + VREvent_Reserved_0562 = 562, + VREvent_Reserved_0563 = 563, + VREvent_Notification_Shown = 600, + VREvent_Notification_Hidden = 601, + VREvent_Notification_BeginInteraction = 602, + VREvent_Notification_Destroyed = 603, + VREvent_Quit = 700, + VREvent_ProcessQuit = 701, + VREvent_QuitAcknowledged = 703, + VREvent_DriverRequestedQuit = 704, + VREvent_RestartRequested = 705, + VREvent_InvalidateSwapTextureSets = 706, + VREvent_RequestDisconnectWirelessHMD = 707, + VREvent_ChaperoneDataHasChanged = 800, + VREvent_ChaperoneUniverseHasChanged = 801, + VREvent_ChaperoneTempDataHasChanged = 802, + VREvent_ChaperoneSettingsHaveChanged = 803, + VREvent_SeatedZeroPoseReset = 804, + VREvent_ChaperoneFlushCache = 805, + VREvent_ChaperoneRoomSetupStarting = 806, + VREvent_ChaperoneRoomSetupCommitted = 807, + VREvent_StandingZeroPoseReset = 808, + VREvent_Reserved_0809 = 809, + VREvent_Reserved_0810 = 810, + VREvent_Reserved_0811 = 811, + VREvent_AudioSettingsHaveChanged = 820, + VREvent_BackgroundSettingHasChanged = 850, + VREvent_CameraSettingsHaveChanged = 851, + VREvent_ReprojectionSettingHasChanged = 852, + VREvent_ModelSkinSettingsHaveChanged = 853, + VREvent_EnvironmentSettingsHaveChanged = 854, + VREvent_PowerSettingsHaveChanged = 855, + VREvent_EnableHomeAppSettingsHaveChanged = 856, + VREvent_SteamVRSectionSettingChanged = 857, + VREvent_LighthouseSectionSettingChanged = 858, + VREvent_NullSectionSettingChanged = 859, + VREvent_UserInterfaceSectionSettingChanged = 860, + VREvent_NotificationsSectionSettingChanged = 861, + VREvent_KeyboardSectionSettingChanged = 862, + VREvent_PerfSectionSettingChanged = 863, + VREvent_DashboardSectionSettingChanged = 864, + VREvent_WebInterfaceSectionSettingChanged = 865, + VREvent_TrackersSectionSettingChanged = 866, + VREvent_LastKnownSectionSettingChanged = 867, + VREvent_DismissedWarningsSectionSettingChanged = 868, + VREvent_GpuSpeedSectionSettingChanged = 869, + VREvent_WindowsMRSectionSettingChanged = 870, + VREvent_OtherSectionSettingChanged = 871, + VREvent_AnyDriverSettingsChanged = 872, + VREvent_StatusUpdate = 900, + VREvent_WebInterface_InstallDriverCompleted = 950, + VREvent_MCImageUpdated = 1000, + VREvent_FirmwareUpdateStarted = 1100, + VREvent_FirmwareUpdateFinished = 1101, + VREvent_KeyboardClosed = 1200, + VREvent_KeyboardCharInput = 1201, + VREvent_KeyboardDone = 1202, + VREvent_KeyboardOpened_Global = 1203, + VREvent_KeyboardClosed_Global = 1204, + VREvent_ApplicationListUpdated = 1303, + VREvent_ApplicationMimeTypeLoad = 1304, + VREvent_ProcessConnected = 1306, + VREvent_ProcessDisconnected = 1307, + VREvent_Compositor_ChaperoneBoundsShown = 1410, + VREvent_Compositor_ChaperoneBoundsHidden = 1411, + VREvent_Compositor_DisplayDisconnected = 1412, + VREvent_Compositor_DisplayReconnected = 1413, + VREvent_Compositor_HDCPError = 1414, + VREvent_Compositor_ApplicationNotResponding = 1415, + VREvent_Compositor_ApplicationResumed = 1416, + VREvent_Compositor_OutOfVideoMemory = 1417, + VREvent_Compositor_DisplayModeNotSupported = 1418, + VREvent_Compositor_StageOverrideReady = 1419, + VREvent_Compositor_RequestDisconnectReconnect = 1420, + VREvent_TrackedCamera_StartVideoStream = 1500, + VREvent_TrackedCamera_StopVideoStream = 1501, + VREvent_TrackedCamera_PauseVideoStream = 1502, + VREvent_TrackedCamera_ResumeVideoStream = 1503, + VREvent_TrackedCamera_EditingSurface = 1550, + VREvent_PerformanceTest_EnableCapture = 1600, + VREvent_PerformanceTest_DisableCapture = 1601, + VREvent_PerformanceTest_FidelityLevel = 1602, + VREvent_MessageOverlay_Closed = 1650, + VREvent_MessageOverlayCloseRequested = 1651, + VREvent_Input_HapticVibration = 1700, + VREvent_Input_BindingLoadFailed = 1701, + VREvent_Input_BindingLoadSuccessful = 1702, + VREvent_Input_ActionManifestReloaded = 1703, + VREvent_Input_ActionManifestLoadFailed = 1704, + VREvent_Input_ProgressUpdate = 1705, + VREvent_Input_TrackerActivated = 1706, + VREvent_Input_BindingsUpdated = 1707, + VREvent_Input_BindingSubscriptionChanged = 1708, + VREvent_SpatialAnchors_PoseUpdated = 1800, + VREvent_SpatialAnchors_DescriptorUpdated = 1801, + VREvent_SpatialAnchors_RequestPoseUpdate = 1802, + VREvent_SpatialAnchors_RequestDescriptorUpdate = 1803, + VREvent_SystemReport_Started = 1900, + VREvent_Monitor_ShowHeadsetView = 2000, + VREvent_Monitor_HideHeadsetView = 2001, + VREvent_Audio_SetSpeakersVolume = 2100, + VREvent_Audio_SetSpeakersMute = 2101, + VREvent_Audio_SetMicrophoneVolume = 2102, + VREvent_Audio_SetMicrophoneMute = 2103, + VREvent_RenderModel_CountChanged = 2200, + VREvent_VendorSpecific_Reserved_Start = 10000, + VREvent_VendorSpecific_Reserved_End = 19999, +} +public enum EDeviceActivityLevel +{ + k_EDeviceActivityLevel_Unknown = -1, + k_EDeviceActivityLevel_Idle = 0, + k_EDeviceActivityLevel_UserInteraction = 1, + k_EDeviceActivityLevel_UserInteraction_Timeout = 2, + k_EDeviceActivityLevel_Standby = 3, + k_EDeviceActivityLevel_Idle_Timeout = 4, +} +public enum EVRButtonId +{ + k_EButton_System = 0, + k_EButton_ApplicationMenu = 1, + k_EButton_Grip = 2, + k_EButton_DPad_Left = 3, + k_EButton_DPad_Up = 4, + k_EButton_DPad_Right = 5, + k_EButton_DPad_Down = 6, + k_EButton_A = 7, + k_EButton_ProximitySensor = 31, + k_EButton_Axis0 = 32, + k_EButton_Axis1 = 33, + k_EButton_Axis2 = 34, + k_EButton_Axis3 = 35, + k_EButton_Axis4 = 36, + k_EButton_SteamVR_Touchpad = 32, + k_EButton_SteamVR_Trigger = 33, + k_EButton_Dashboard_Back = 2, + k_EButton_IndexController_A = 2, + k_EButton_IndexController_B = 1, + k_EButton_IndexController_JoyStick = 35, + k_EButton_Reserved0 = 50, + k_EButton_Reserved1 = 51, + k_EButton_Max = 64, +} +public enum EVRMouseButton +{ + Left = 1, + Right = 2, + Middle = 4, +} +public enum EShowUIType +{ + ShowUI_ControllerBinding = 0, + ShowUI_ManageTrackers = 1, + ShowUI_Pairing = 3, + ShowUI_Settings = 4, + ShowUI_DebugCommands = 5, + ShowUI_FullControllerBinding = 6, + ShowUI_ManageDrivers = 7, +} +public enum EHDCPError +{ + None = 0, + LinkLost = 1, + Tampered = 2, + DeviceRevoked = 3, + Unknown = 4, +} +public enum EVRComponentProperty +{ + IsStatic = 1, + IsVisible = 2, + IsTouched = 4, + IsPressed = 8, + IsScrolled = 16, + IsHighlighted = 32, +} +public enum EVRInputError +{ + None = 0, + NameNotFound = 1, + WrongType = 2, + InvalidHandle = 3, + InvalidParam = 4, + NoSteam = 5, + MaxCapacityReached = 6, + IPCError = 7, + NoActiveActionSet = 8, + InvalidDevice = 9, + InvalidSkeleton = 10, + InvalidBoneCount = 11, + InvalidCompressedData = 12, + NoData = 13, + BufferTooSmall = 14, + MismatchedActionManifest = 15, + MissingSkeletonData = 16, + InvalidBoneIndex = 17, + InvalidPriority = 18, + PermissionDenied = 19, + InvalidRenderModel = 20, +} +public enum EVRSpatialAnchorError +{ + Success = 0, + Internal = 1, + UnknownHandle = 2, + ArrayTooSmall = 3, + InvalidDescriptorChar = 4, + NotYetAvailable = 5, + NotAvailableInThisUniverse = 6, + PermanentlyUnavailable = 7, + WrongDriver = 8, + DescriptorTooLong = 9, + Unknown = 10, + NoRoomCalibration = 11, + InvalidArgument = 12, + UnknownDriver = 13, +} +public enum EHiddenAreaMeshType +{ + k_eHiddenAreaMesh_Standard = 0, + k_eHiddenAreaMesh_Inverse = 1, + k_eHiddenAreaMesh_LineLoop = 2, + k_eHiddenAreaMesh_Max = 3, +} +public enum EVRControllerAxisType +{ + k_eControllerAxis_None = 0, + k_eControllerAxis_TrackPad = 1, + k_eControllerAxis_Joystick = 2, + k_eControllerAxis_Trigger = 3, +} +public enum EVRControllerEventOutputType +{ + ControllerEventOutput_OSEvents = 0, + ControllerEventOutput_VREvents = 1, +} +public enum ECollisionBoundsStyle +{ + COLLISION_BOUNDS_STYLE_BEGINNER = 0, + COLLISION_BOUNDS_STYLE_INTERMEDIATE = 1, + COLLISION_BOUNDS_STYLE_SQUARES = 2, + COLLISION_BOUNDS_STYLE_ADVANCED = 3, + COLLISION_BOUNDS_STYLE_NONE = 4, + COLLISION_BOUNDS_STYLE_COUNT = 5, +} +public enum EVROverlayError +{ + None = 0, + UnknownOverlay = 10, + InvalidHandle = 11, + PermissionDenied = 12, + OverlayLimitExceeded = 13, + WrongVisibilityType = 14, + KeyTooLong = 15, + NameTooLong = 16, + KeyInUse = 17, + WrongTransformType = 18, + InvalidTrackedDevice = 19, + InvalidParameter = 20, + ThumbnailCantBeDestroyed = 21, + ArrayTooSmall = 22, + RequestFailed = 23, + InvalidTexture = 24, + UnableToLoadFile = 25, + KeyboardAlreadyInUse = 26, + NoNeighbor = 27, + TooManyMaskPrimitives = 29, + BadMaskPrimitive = 30, + TextureAlreadyLocked = 31, + TextureLockCapacityReached = 32, + TextureNotLocked = 33, + TimedOut = 34, +} +public enum EVRApplicationType +{ + VRApplication_Other = 0, + VRApplication_Scene = 1, + VRApplication_Overlay = 2, + VRApplication_Background = 3, + VRApplication_Utility = 4, + VRApplication_VRMonitor = 5, + VRApplication_SteamWatchdog = 6, + VRApplication_Bootstrapper = 7, + VRApplication_WebHelper = 8, + VRApplication_OpenXRInstance = 9, + VRApplication_OpenXRScene = 10, + VRApplication_OpenXROverlay = 11, + VRApplication_Prism = 12, + VRApplication_RoomView = 13, + VRApplication_Max = 14, +} +public enum EVRFirmwareError +{ + None = 0, + Success = 1, + Fail = 2, +} +public enum EVRNotificationError +{ + OK = 0, + InvalidNotificationId = 100, + NotificationQueueFull = 101, + InvalidOverlayHandle = 102, + SystemWithUserValueAlreadyExists = 103, + ServiceUnavailable = 104, +} +public enum EVRSkeletalMotionRange +{ + WithController = 0, + WithoutController = 1, +} +public enum EVRSkeletalTrackingLevel +{ + VRSkeletalTracking_Estimated = 0, + VRSkeletalTracking_Partial = 1, + VRSkeletalTracking_Full = 2, + Count = 3, + Max = 2, +} +public enum EVRInitError +{ + None = 0, + Unknown = 1, + Init_InstallationNotFound = 100, + Init_InstallationCorrupt = 101, + Init_VRClientDLLNotFound = 102, + Init_FileNotFound = 103, + Init_FactoryNotFound = 104, + Init_InterfaceNotFound = 105, + Init_InvalidInterface = 106, + Init_UserConfigDirectoryInvalid = 107, + Init_HmdNotFound = 108, + Init_NotInitialized = 109, + Init_PathRegistryNotFound = 110, + Init_NoConfigPath = 111, + Init_NoLogPath = 112, + Init_PathRegistryNotWritable = 113, + Init_AppInfoInitFailed = 114, + Init_Retry = 115, + Init_InitCanceledByUser = 116, + Init_AnotherAppLaunching = 117, + Init_SettingsInitFailed = 118, + Init_ShuttingDown = 119, + Init_TooManyObjects = 120, + Init_NoServerForBackgroundApp = 121, + Init_NotSupportedWithCompositor = 122, + Init_NotAvailableToUtilityApps = 123, + Init_Internal = 124, + Init_HmdDriverIdIsNone = 125, + Init_HmdNotFoundPresenceFailed = 126, + Init_VRMonitorNotFound = 127, + Init_VRMonitorStartupFailed = 128, + Init_LowPowerWatchdogNotSupported = 129, + Init_InvalidApplicationType = 130, + Init_NotAvailableToWatchdogApps = 131, + Init_WatchdogDisabledInSettings = 132, + Init_VRDashboardNotFound = 133, + Init_VRDashboardStartupFailed = 134, + Init_VRHomeNotFound = 135, + Init_VRHomeStartupFailed = 136, + Init_RebootingBusy = 137, + Init_FirmwareUpdateBusy = 138, + Init_FirmwareRecoveryBusy = 139, + Init_USBServiceBusy = 140, + Init_VRWebHelperStartupFailed = 141, + Init_TrackerManagerInitFailed = 142, + Init_AlreadyRunning = 143, + Init_FailedForVrMonitor = 144, + Init_PropertyManagerInitFailed = 145, + Init_WebServerFailed = 146, + Init_IllegalTypeTransition = 147, + Init_MismatchedRuntimes = 148, + Init_InvalidProcessId = 149, + Init_VRServiceStartupFailed = 150, + Init_PrismNeedsNewDrivers = 151, + Init_PrismStartupTimedOut = 152, + Init_CouldNotStartPrism = 153, + Init_PrismClientInitFailed = 154, + Init_PrismClientStartFailed = 155, + Init_PrismExitedUnexpectedly = 156, + Init_BadLuid = 157, + Init_NoServerForAppContainer = 158, + Init_DuplicateBootstrapper = 159, + Init_VRDashboardServicePending = 160, + Init_VRDashboardServiceTimeout = 161, + Init_VRDashboardServiceStopped = 162, + Init_VRDashboardAlreadyStarted = 163, + Init_VRDashboardCopyFailed = 164, + Init_VRDashboardTokenFailure = 165, + Init_VRDashboardEnvironmentFailure = 166, + Init_VRDashboardPathFailure = 167, + Driver_Failed = 200, + Driver_Unknown = 201, + Driver_HmdUnknown = 202, + Driver_NotLoaded = 203, + Driver_RuntimeOutOfDate = 204, + Driver_HmdInUse = 205, + Driver_NotCalibrated = 206, + Driver_CalibrationInvalid = 207, + Driver_HmdDisplayNotFound = 208, + Driver_TrackedDeviceInterfaceUnknown = 209, + Driver_HmdDriverIdOutOfBounds = 211, + Driver_HmdDisplayMirrored = 212, + Driver_HmdDisplayNotFoundLaptop = 213, + Driver_PeerDriverNotInstalled = 214, + Driver_WirelessHmdNotConnected = 215, + IPC_ServerInitFailed = 300, + IPC_ConnectFailed = 301, + IPC_SharedStateInitFailed = 302, + IPC_CompositorInitFailed = 303, + IPC_MutexInitFailed = 304, + IPC_Failed = 305, + IPC_CompositorConnectFailed = 306, + IPC_CompositorInvalidConnectResponse = 307, + IPC_ConnectFailedAfterMultipleAttempts = 308, + IPC_ConnectFailedAfterTargetExited = 309, + IPC_NamespaceUnavailable = 310, + Compositor_Failed = 400, + Compositor_D3D11HardwareRequired = 401, + Compositor_FirmwareRequiresUpdate = 402, + Compositor_OverlayInitFailed = 403, + Compositor_ScreenshotsInitFailed = 404, + Compositor_UnableToCreateDevice = 405, + Compositor_SharedStateIsNull = 406, + Compositor_NotificationManagerIsNull = 407, + Compositor_ResourceManagerClientIsNull = 408, + Compositor_MessageOverlaySharedStateInitFailure = 409, + Compositor_PropertiesInterfaceIsNull = 410, + Compositor_CreateFullscreenWindowFailed = 411, + Compositor_SettingsInterfaceIsNull = 412, + Compositor_FailedToShowWindow = 413, + Compositor_DistortInterfaceIsNull = 414, + Compositor_DisplayFrequencyFailure = 415, + Compositor_RendererInitializationFailed = 416, + Compositor_DXGIFactoryInterfaceIsNull = 417, + Compositor_DXGIFactoryCreateFailed = 418, + Compositor_DXGIFactoryQueryFailed = 419, + Compositor_InvalidAdapterDesktop = 420, + Compositor_InvalidHmdAttachment = 421, + Compositor_InvalidOutputDesktop = 422, + Compositor_InvalidDeviceProvided = 423, + Compositor_D3D11RendererInitializationFailed = 424, + Compositor_FailedToFindDisplayMode = 425, + Compositor_FailedToCreateSwapChain = 426, + Compositor_FailedToGetBackBuffer = 427, + Compositor_FailedToCreateRenderTarget = 428, + Compositor_FailedToCreateDXGI2SwapChain = 429, + Compositor_FailedtoGetDXGI2BackBuffer = 430, + Compositor_FailedToCreateDXGI2RenderTarget = 431, + Compositor_FailedToGetDXGIDeviceInterface = 432, + Compositor_SelectDisplayMode = 433, + Compositor_FailedToCreateNvAPIRenderTargets = 434, + Compositor_NvAPISetDisplayMode = 435, + Compositor_FailedToCreateDirectModeDisplay = 436, + Compositor_InvalidHmdPropertyContainer = 437, + Compositor_UpdateDisplayFrequency = 438, + Compositor_CreateRasterizerState = 439, + Compositor_CreateWireframeRasterizerState = 440, + Compositor_CreateSamplerState = 441, + Compositor_CreateClampToBorderSamplerState = 442, + Compositor_CreateAnisoSamplerState = 443, + Compositor_CreateOverlaySamplerState = 444, + Compositor_CreatePanoramaSamplerState = 445, + Compositor_CreateFontSamplerState = 446, + Compositor_CreateNoBlendState = 447, + Compositor_CreateBlendState = 448, + Compositor_CreateAlphaBlendState = 449, + Compositor_CreateBlendStateMaskR = 450, + Compositor_CreateBlendStateMaskG = 451, + Compositor_CreateBlendStateMaskB = 452, + Compositor_CreateDepthStencilState = 453, + Compositor_CreateDepthStencilStateNoWrite = 454, + Compositor_CreateDepthStencilStateNoDepth = 455, + Compositor_CreateFlushTexture = 456, + Compositor_CreateDistortionSurfaces = 457, + Compositor_CreateConstantBuffer = 458, + Compositor_CreateHmdPoseConstantBuffer = 459, + Compositor_CreateHmdPoseStagingConstantBuffer = 460, + Compositor_CreateSharedFrameInfoConstantBuffer = 461, + Compositor_CreateOverlayConstantBuffer = 462, + Compositor_CreateSceneTextureIndexConstantBuffer = 463, + Compositor_CreateReadableSceneTextureIndexConstantBuffer = 464, + Compositor_CreateLayerGraphicsTextureIndexConstantBuffer = 465, + Compositor_CreateLayerComputeTextureIndexConstantBuffer = 466, + Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer = 467, + Compositor_CreateComputeHmdPoseConstantBuffer = 468, + Compositor_CreateGeomConstantBuffer = 469, + Compositor_CreatePanelMaskConstantBuffer = 470, + Compositor_CreatePixelSimUBO = 471, + Compositor_CreateMSAARenderTextures = 472, + Compositor_CreateResolveRenderTextures = 473, + Compositor_CreateComputeResolveRenderTextures = 474, + Compositor_CreateDriverDirectModeResolveTextures = 475, + Compositor_OpenDriverDirectModeResolveTextures = 476, + Compositor_CreateFallbackSyncTexture = 477, + Compositor_ShareFallbackSyncTexture = 478, + Compositor_CreateOverlayIndexBuffer = 479, + Compositor_CreateOverlayVertexBuffer = 480, + Compositor_CreateTextVertexBuffer = 481, + Compositor_CreateTextIndexBuffer = 482, + Compositor_CreateMirrorTextures = 483, + Compositor_CreateLastFrameRenderTexture = 484, + Compositor_CreateMirrorOverlay = 485, + Compositor_FailedToCreateVirtualDisplayBackbuffer = 486, + Compositor_DisplayModeNotSupported = 487, + Compositor_CreateOverlayInvalidCall = 488, + Compositor_CreateOverlayAlreadyInitialized = 489, + Compositor_FailedToCreateMailbox = 490, + Compositor_WindowInterfaceIsNull = 491, + Compositor_SystemLayerCreateInstance = 492, + Compositor_SystemLayerCreateSession = 493, + Compositor_CreateInverseDistortUVs = 494, + Compositor_CreateBackbufferDepth = 495, + Compositor_CannotDRMLeaseDisplay = 496, + Compositor_CannotConnectToDisplayServer = 497, + Compositor_GnomeNoDRMLeasing = 498, + Compositor_FailedToInitializeEncoder = 499, + Compositor_CreateBlurTexture = 500, + VendorSpecific_UnableToConnectToOculusRuntime = 1000, + VendorSpecific_WindowsNotInDevMode = 1001, + VendorSpecific_OculusLinkNotEnabled = 1002, + VendorSpecific_HmdFound_CantOpenDevice = 1101, + VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102, + VendorSpecific_HmdFound_NoStoredConfig = 1103, + VendorSpecific_HmdFound_ConfigTooBig = 1104, + VendorSpecific_HmdFound_ConfigTooSmall = 1105, + VendorSpecific_HmdFound_UnableToInitZLib = 1106, + VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107, + VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108, + VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109, + VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110, + VendorSpecific_HmdFound_UserDataAddressRange = 1111, + VendorSpecific_HmdFound_UserDataError = 1112, + VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113, + VendorSpecific_OculusRuntimeBadInstall = 1114, + VendorSpecific_HmdFound_UnexpectedConfiguration_1 = 1115, + Steam_SteamInstallationNotFound = 2000, + LastError = 2001, +} +public enum EVRScreenshotType +{ + None = 0, + Mono = 1, + Stereo = 2, + Cubemap = 3, + MonoPanorama = 4, + StereoPanorama = 5, +} +public enum EVRScreenshotPropertyFilenames +{ + Preview = 0, + VR = 1, +} +public enum EVRTrackedCameraError +{ + None = 0, + OperationFailed = 100, + InvalidHandle = 101, + InvalidFrameHeaderVersion = 102, + OutOfHandles = 103, + IPCFailure = 104, + NotSupportedForThisDevice = 105, + SharedMemoryFailure = 106, + FrameBufferingFailure = 107, + StreamSetupFailure = 108, + InvalidGLTextureId = 109, + InvalidSharedTextureHandle = 110, + FailedToGetGLTextureId = 111, + SharedTextureFailure = 112, + NoFrameAvailable = 113, + InvalidArgument = 114, + InvalidFrameBufferSize = 115, +} +public enum EVRTrackedCameraFrameLayout +{ + Mono = 1, + Stereo = 2, + VerticalLayout = 16, + HorizontalLayout = 32, +} +public enum EVRTrackedCameraFrameType +{ + Distorted = 0, + Undistorted = 1, + MaximumUndistorted = 2, + MAX_CAMERA_FRAME_TYPES = 3, +} +public enum EVRDistortionFunctionType +{ + None = 0, + FTheta = 1, + Extended_FTheta = 2, + MAX_DISTORTION_FUNCTION_TYPES = 3, +} +public enum EVSync +{ + None = 0, + WaitRender = 1, + NoWaitRender = 2, +} +public enum EVRMuraCorrectionMode +{ + Default = 0, + NoCorrection = 1, +} +public enum Imu_OffScaleFlags +{ + OffScale_AccelX = 1, + OffScale_AccelY = 2, + OffScale_AccelZ = 4, + OffScale_GyroX = 8, + OffScale_GyroY = 16, + OffScale_GyroZ = 32, +} +public enum EVRApplicationError +{ + None = 0, + AppKeyAlreadyExists = 100, + NoManifest = 101, + NoApplication = 102, + InvalidIndex = 103, + UnknownApplication = 104, + IPCFailed = 105, + ApplicationAlreadyRunning = 106, + InvalidManifest = 107, + InvalidApplication = 108, + LaunchFailed = 109, + ApplicationAlreadyStarting = 110, + LaunchInProgress = 111, + OldApplicationQuitting = 112, + TransitionAborted = 113, + IsTemplate = 114, + SteamVRIsExiting = 115, + BufferTooSmall = 200, + PropertyNotSet = 201, + UnknownProperty = 202, + InvalidParameter = 203, + NotImplemented = 300, +} +public enum EVRApplicationProperty +{ + Name_String = 0, + LaunchType_String = 11, + WorkingDirectory_String = 12, + BinaryPath_String = 13, + Arguments_String = 14, + URL_String = 15, + Description_String = 50, + NewsURL_String = 51, + ImagePath_String = 52, + ImagePathCapsule_String = 55, + Source_String = 53, + ActionManifestURL_String = 54, + IsDashboardOverlay_Bool = 60, + IsTemplate_Bool = 61, + IsInstanced_Bool = 62, + IsInternal_Bool = 63, + WantsCompositorPauseInStandby_Bool = 64, + IsHidden_Bool = 65, + LastLaunchTime_Uint64 = 70, +} +public enum EVRSceneApplicationState +{ + None = 0, + Starting = 1, + Quitting = 2, + Running = 3, + Waiting = 4, +} +public enum ChaperoneCalibrationState +{ + OK = 1, + Warning = 100, + Warning_BaseStationMayHaveMoved = 101, + Warning_BaseStationRemoved = 102, + Warning_SeatedBoundsInvalid = 103, + Error = 200, + Error_BaseStationUninitialized = 201, + Error_BaseStationConflict = 202, + Error_PlayAreaInvalid = 203, + Error_CollisionBoundsInvalid = 204, +} +public enum EChaperoneConfigFile +{ + Live = 1, + Temp = 2, +} +public enum EChaperoneImportFlags +{ + EChaperoneImport_BoundsOnly = 1, +} +public enum EVRCompositorError +{ + None = 0, + RequestFailed = 1, + IncompatibleVersion = 100, + DoNotHaveFocus = 101, + InvalidTexture = 102, + IsNotSceneApplication = 103, + TextureIsOnWrongDevice = 104, + TextureUsesUnsupportedFormat = 105, + SharedTexturesNotSupported = 106, + IndexOutOfRange = 107, + AlreadySubmitted = 108, + InvalidBounds = 109, + AlreadySet = 110, +} +public enum EVRCompositorTextureUsage +{ + Left = 0, + Right = 1, + Both = 2, +} +public enum EVRCompositorTimingMode +{ + Implicit = 0, + Explicit_RuntimePerformsPostPresentHandoff = 1, + Explicit_ApplicationPerformsPostPresentHandoff = 2, +} +public enum VROverlayInputMethod +{ + None = 0, + Mouse = 1, +} +public enum VROverlayTransformType +{ + VROverlayTransform_Invalid = -1, + VROverlayTransform_Absolute = 0, + VROverlayTransform_TrackedDeviceRelative = 1, + VROverlayTransform_TrackedComponent = 3, + VROverlayTransform_Cursor = 4, + VROverlayTransform_DashboardTab = 5, + VROverlayTransform_DashboardThumb = 6, + VROverlayTransform_Mountable = 7, + VROverlayTransform_Projection = 8, + VROverlayTransform_Subview = 9, +} +public enum VROverlayFlags +{ + NoDashboardTab = 8, + SendVRDiscreteScrollEvents = 64, + SendVRTouchpadEvents = 128, + ShowTouchPadScrollWheel = 256, + TransferOwnershipToInternalProcess = 512, + SideBySide_Parallel = 1024, + SideBySide_Crossed = 2048, + Panorama = 4096, + StereoPanorama = 8192, + SortWithNonSceneOverlays = 16384, + VisibleInDashboard = 32768, + MakeOverlaysInteractiveIfVisible = 65536, + SendVRSmoothScrollEvents = 131072, + ProtectedContent = 262144, + HideLaserIntersection = 524288, + WantsModalBehavior = 1048576, + IsPremultiplied = 2097152, + IgnoreTextureAlpha = 4194304, + EnableControlBar = 8388608, + EnableControlBarKeyboard = 16777216, + EnableControlBarClose = 33554432, + MinimalControlBar = 67108864, + EnableClickStabilization = 134217728, + MultiCursor = 268435456, +} +public enum VRMessageOverlayResponse +{ + ButtonPress_0 = 0, + ButtonPress_1 = 1, + ButtonPress_2 = 2, + ButtonPress_3 = 3, + CouldntFindSystemOverlay = 4, + CouldntFindOrCreateClientOverlay = 5, + ApplicationQuit = 6, +} +public enum EGamepadTextInputMode +{ + k_EGamepadTextInputModeNormal = 0, + k_EGamepadTextInputModePassword = 1, + k_EGamepadTextInputModeSubmit = 2, +} +public enum EGamepadTextInputLineMode +{ + k_EGamepadTextInputLineModeSingleLine = 0, + k_EGamepadTextInputLineModeMultipleLines = 1, +} +public enum EVROverlayIntersectionMaskPrimitiveType +{ + OverlayIntersectionPrimitiveType_Rectangle = 0, + OverlayIntersectionPrimitiveType_Circle = 1, +} +public enum EKeyboardFlags +{ + KeyboardFlag_Minimal = 1, + KeyboardFlag_Modal = 2, + KeyboardFlag_ShowArrowKeys = 4, + KeyboardFlag_HideDoneKey = 8, +} +public enum EDeviceType +{ + Invalid = -1, + DirectX11 = 0, + Vulkan = 1, +} +public enum HeadsetViewMode_t +{ + HeadsetViewMode_Left = 0, + HeadsetViewMode_Right = 1, + HeadsetViewMode_Both = 2, +} +public enum EVRRenderModelError +{ + None = 0, + Loading = 100, + NotSupported = 200, + InvalidArg = 300, + InvalidModel = 301, + NoShapes = 302, + MultipleShapes = 303, + TooManyVertices = 304, + MultipleTextures = 305, + BufferTooSmall = 306, + NotEnoughNormals = 307, + NotEnoughTexCoords = 308, + InvalidTexture = 400, +} +public enum EVRRenderModelTextureFormat +{ + RGBA8_SRGB = 0, + BC2 = 1, + BC4 = 2, + BC7 = 3, + BC7_SRGB = 4, + RGBA16_FLOAT = 5, +} +public enum EVRNotificationType +{ + Transient = 0, + Persistent = 1, + Transient_SystemWithUserValue = 2, +} +public enum EVRNotificationStyle +{ + None = 0, + Application = 100, + Contact_Disabled = 200, + Contact_Enabled = 201, + Contact_Active = 202, +} +public enum EVRSettingsError +{ + None = 0, + IPCFailed = 1, + WriteFailed = 2, + ReadFailed = 3, + JsonParseFailed = 4, + UnsetSettingHasNoDefault = 5, + AccessDenied = 6, +} +public enum EVRScreenshotError +{ + None = 0, + RequestFailed = 1, + IncompatibleVersion = 100, + NotFound = 101, + BufferTooSmall = 102, + ScreenshotAlreadyInProgress = 108, +} +public enum EVRSkeletalTransformSpace +{ + Model = 0, + Parent = 1, +} +public enum EVRSkeletalReferencePose +{ + BindPose = 0, + OpenHand = 1, + Fist = 2, + GripLimit = 3, +} +public enum EVRFinger +{ + Thumb = 0, + Index = 1, + Middle = 2, + Ring = 3, + Pinky = 4, + Count = 5, +} +public enum EVRFingerSplay +{ + Thumb_Index = 0, + Index_Middle = 1, + Middle_Ring = 2, + Ring_Pinky = 3, + Count = 4, +} +public enum EVRSummaryType +{ + FromAnimation = 0, + FromDevice = 1, +} +public enum EVRInputFilterCancelType +{ + VRInputFilterCancel_Timers = 0, + VRInputFilterCancel_Momentum = 1, +} +public enum EVRInputStringBits +{ + VRInputString_Hand = 1, + VRInputString_ControllerType = 2, + VRInputString_InputSource = 4, + VRInputString_All = -1, +} +public enum EIOBufferError +{ + IOBuffer_Success = 0, + IOBuffer_OperationFailed = 100, + IOBuffer_InvalidHandle = 101, + IOBuffer_InvalidArgument = 102, + IOBuffer_PathExists = 103, + IOBuffer_PathDoesNotExist = 104, + IOBuffer_Permission = 105, +} +public enum EIOBufferMode +{ + Read = 1, + Write = 2, + Create = 512, +} +public enum EVRDebugError +{ + Success = 0, + BadParameter = 1, +} +public enum EPropertyWriteType +{ + PropertyWrite_Set = 0, + PropertyWrite_Erase = 1, + PropertyWrite_SetError = 2, +} +public enum EBlockQueueError +{ + None = 0, + QueueAlreadyExists = 1, + QueueNotFound = 2, + BlockNotAvailable = 3, + InvalidHandle = 4, + InvalidParam = 5, + ParamMismatch = 6, + InternalError = 7, + AlreadyInitialized = 8, + OperationIsServerOnly = 9, + TooManyConnections = 10, +} +public enum EBlockQueueReadType +{ + BlockQueueRead_Latest = 0, + BlockQueueRead_New = 1, + BlockQueueRead_Next = 2, +} +public enum EBlockQueueCreationFlag +{ + BlockQueueFlag_OwnerIsReader = 1, +} + +[StructLayout(LayoutKind.Explicit)] public struct VREvent_Data_t +{ + [FieldOffset(0)] public VREvent_Reserved_t reserved; + [FieldOffset(0)] public VREvent_Controller_t controller; + [FieldOffset(0)] public VREvent_Mouse_t mouse; + [FieldOffset(0)] public VREvent_Scroll_t scroll; + [FieldOffset(0)] public VREvent_Process_t process; + [FieldOffset(0)] public VREvent_Notification_t notification; + [FieldOffset(0)] public VREvent_Overlay_t overlay; + [FieldOffset(0)] public VREvent_Status_t status; + [FieldOffset(0)] public VREvent_Ipd_t ipd; + [FieldOffset(0)] public VREvent_Chaperone_t chaperone; + [FieldOffset(0)] public VREvent_PerformanceTest_t performanceTest; + [FieldOffset(0)] public VREvent_TouchPadMove_t touchPadMove; + [FieldOffset(0)] public VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset; + [FieldOffset(0)] public VREvent_Screenshot_t screenshot; + [FieldOffset(0)] public VREvent_ScreenshotProgress_t screenshotProgress; + [FieldOffset(0)] public VREvent_ApplicationLaunch_t applicationLaunch; + [FieldOffset(0)] public VREvent_EditingCameraSurface_t cameraSurface; + [FieldOffset(0)] public VREvent_MessageOverlay_t messageOverlay; + [FieldOffset(0)] public VREvent_Property_t property; + [FieldOffset(0)] public VREvent_HapticVibration_t hapticVibration; + [FieldOffset(0)] public VREvent_WebConsole_t webConsole; + [FieldOffset(0)] public VREvent_InputBindingLoad_t inputBinding; + [FieldOffset(0)] public VREvent_SpatialAnchor_t spatialAnchor; + [FieldOffset(0)] public VREvent_InputActionManifestLoad_t actionManifest; + [FieldOffset(0)] public VREvent_ProgressUpdate_t progressUpdate; + [FieldOffset(0)] public VREvent_ShowUI_t showUi; + [FieldOffset(0)] public VREvent_ShowDevTools_t showDevTools; + [FieldOffset(0)] public VREvent_HDCPError_t hdcpError; + [FieldOffset(0)] public VREvent_AudioVolumeControl_t audioVolumeControl; + [FieldOffset(0)] public VREvent_AudioMuteControl_t audioMuteControl; + [FieldOffset(0)] public VREvent_Keyboard_t keyboard; // This has to be at the end due to a mono bug +} + + +[StructLayout(LayoutKind.Explicit)] public struct VROverlayIntersectionMaskPrimitive_Data_t +{ + [FieldOffset(0)] public IntersectionMaskRectangle_t m_Rectangle; + [FieldOffset(0)] public IntersectionMaskCircle_t m_Circle; +} + +[StructLayout(LayoutKind.Sequential)] public struct HmdMatrix34_t +{ + public float m0; //float[3][4] + public float m1; + public float m2; + public float m3; + public float m4; + public float m5; + public float m6; + public float m7; + public float m8; + public float m9; + public float m10; + public float m11; #if UNITY_5_3_OR_NEWER public Vector3 GetPosition() @@ -6229,304 +6310,281 @@ namespace Valve.VR sizeval = -sizeval; } #endif - } - [StructLayout(LayoutKind.Sequential)] - public struct HmdMatrix33_t +} +[StructLayout(LayoutKind.Sequential)] public struct HmdMatrix33_t +{ + public float m0; //float[3][3] + public float m1; + public float m2; + public float m3; + public float m4; + public float m5; + public float m6; + public float m7; + public float m8; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdMatrix44_t +{ + public float m0; //float[4][4] + public float m1; + public float m2; + public float m3; + public float m4; + public float m5; + public float m6; + public float m7; + public float m8; + public float m9; + public float m10; + public float m11; + public float m12; + public float m13; + public float m14; + public float m15; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdVector3_t +{ + public float v0; //float[3] + public float v1; + public float v2; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdVector4_t +{ + public float v0; //float[4] + public float v1; + public float v2; + public float v3; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdVector3d_t +{ + public double v0; //double[3] + public double v1; + public double v2; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdVector2_t +{ + public float v0; //float[2] + public float v1; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdQuaternion_t +{ + public double w; + public double x; + public double y; + public double z; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdQuaternionf_t +{ + public float w; + public float x; + public float y; + public float z; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdColor_t +{ + public float r; + public float g; + public float b; + public float a; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdQuad_t +{ + public HmdVector3_t vCorners0; //HmdVector3_t[4] + public HmdVector3_t vCorners1; + public HmdVector3_t vCorners2; + public HmdVector3_t vCorners3; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdRect2_t +{ + public HmdVector2_t vTopLeft; + public HmdVector2_t vBottomRight; +} +[StructLayout(LayoutKind.Sequential)] public struct VRBoneTransform_t +{ + public HmdVector4_t position; + public HmdQuaternionf_t orientation; +} +[StructLayout(LayoutKind.Sequential)] public struct VREyeTrackingData_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bActive; + [MarshalAs(UnmanagedType.I1)] + public bool bValid; + [MarshalAs(UnmanagedType.I1)] + public bool bTracked; + public HmdVector3_t vGazeOrigin; + public HmdVector3_t vGazeTarget; +} +[StructLayout(LayoutKind.Sequential)] public struct DistortionCoordinates_t +{ + public float rfRed0; //float[2] + public float rfRed1; + public float rfGreen0; //float[2] + public float rfGreen1; + public float rfBlue0; //float[2] + public float rfBlue1; +} +[StructLayout(LayoutKind.Sequential)] public struct Texture_t +{ + public IntPtr handle; // void * + public ETextureType eType; + public EColorSpace eColorSpace; +} +[StructLayout(LayoutKind.Sequential)] public struct VRTextureBounds_t +{ + public float uMin; + public float vMin; + public float uMax; + public float vMax; +} +[StructLayout(LayoutKind.Sequential)] public struct VRTextureWithPose_t +{ + public IntPtr handle; // void * + public ETextureType eType; + public EColorSpace eColorSpace; + public HmdMatrix34_t mDeviceToAbsoluteTracking; +} +[StructLayout(LayoutKind.Sequential)] public struct VRTextureDepthInfo_t +{ + public IntPtr handle; // void * + public HmdMatrix44_t mProjection; + public HmdVector2_t vRange; +} +[StructLayout(LayoutKind.Sequential)] public struct VRTextureWithDepth_t +{ + public IntPtr handle; // void * + public ETextureType eType; + public EColorSpace eColorSpace; + public VRTextureDepthInfo_t depth; +} +[StructLayout(LayoutKind.Sequential)] public struct VRTextureWithPoseAndDepth_t +{ + public IntPtr handle; // void * + public ETextureType eType; + public EColorSpace eColorSpace; + public HmdMatrix34_t mDeviceToAbsoluteTracking; + public VRTextureDepthInfo_t depth; +} +[StructLayout(LayoutKind.Sequential)] public struct DmabufPlane_t +{ + public uint unOffset; + public uint unStride; + public int nFd; +} +[StructLayout(LayoutKind.Sequential)] public struct DmabufAttributes_t +{ + public IntPtr pNext; // void * + public uint unWidth; + public uint unHeight; + public uint unDepth; + public uint unMipLevels; + public uint unArrayLayers; + public uint unSampleCount; + public uint unFormat; + public ulong ulModifier; + public uint unPlaneCount; + public DmabufPlane_t plane0; //DmabufPlane_t[4] + public DmabufPlane_t plane1; + public DmabufPlane_t plane2; + public DmabufPlane_t plane3; +} +[StructLayout(LayoutKind.Sequential)] public struct TrackedDevicePose_t +{ + public HmdMatrix34_t mDeviceToAbsoluteTracking; + public HmdVector3_t vVelocity; + public HmdVector3_t vAngularVelocity; + public ETrackingResult eTrackingResult; + [MarshalAs(UnmanagedType.I1)] + public bool bPoseIsValid; + [MarshalAs(UnmanagedType.I1)] + public bool bDeviceIsConnected; +} +[StructLayout(LayoutKind.Sequential)] public struct VRVulkanTextureData_t +{ + public ulong m_nImage; + public IntPtr m_pDevice; // struct VkDevice_T * + public IntPtr m_pPhysicalDevice; // struct VkPhysicalDevice_T * + public IntPtr m_pInstance; // struct VkInstance_T * + public IntPtr m_pQueue; // struct VkQueue_T * + public uint m_nQueueFamilyIndex; + public uint m_nWidth; + public uint m_nHeight; + public uint m_nFormat; + public uint m_nSampleCount; +} +[StructLayout(LayoutKind.Sequential)] public struct VRVulkanTextureArrayData_t +{ + public uint m_unArrayIndex; + public uint m_unArraySize; +} +[StructLayout(LayoutKind.Sequential)] public struct D3D12TextureData_t +{ + public IntPtr m_pResource; // struct ID3D12Resource * + public IntPtr m_pCommandQueue; // struct ID3D12CommandQueue * + public uint m_nNodeMask; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Controller_t +{ + public uint button; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Mouse_t +{ + public float x; + public float y; + public uint button; + public uint cursorIndex; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Scroll_t +{ + public float xdelta; + public float ydelta; + public uint unused; + public float viewportscale; + public uint cursorIndex; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_TouchPadMove_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bFingerDown; + public float flSecondsFingerDown; + public float fValueXFirst; + public float fValueYFirst; + public float fValueXRaw; + public float fValueYRaw; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Notification_t +{ + public ulong ulUserValue; + public uint notificationId; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Process_t +{ + public uint pid; + public uint oldPid; + [MarshalAs(UnmanagedType.I1)] + public bool bForced; + [MarshalAs(UnmanagedType.I1)] + public bool bConnectionLost; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Overlay_t +{ + public ulong overlayHandle; + public ulong devicePath; + public ulong memoryBlockId; + public uint cursorIndex; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Status_t +{ + public uint statusState; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Keyboard_t +{ + public byte cNewInput0,cNewInput1,cNewInput2,cNewInput3,cNewInput4,cNewInput5,cNewInput6,cNewInput7; + public string cNewInput { - public float m0; //float[3][3] - public float m1; - public float m2; - public float m3; - public float m4; - public float m5; - public float m6; - public float m7; - public float m8; - } - [StructLayout(LayoutKind.Sequential)] - public struct HmdMatrix44_t - { - public float m0; //float[4][4] - public float m1; - public float m2; - public float m3; - public float m4; - public float m5; - public float m6; - public float m7; - public float m8; - public float m9; - public float m10; - public float m11; - public float m12; - public float m13; - public float m14; - public float m15; - } - [StructLayout(LayoutKind.Sequential)] - public struct HmdVector3_t - { - public float v0; //float[3] - public float v1; - public float v2; - } - [StructLayout(LayoutKind.Sequential)] - public struct HmdVector4_t - { - public float v0; //float[4] - public float v1; - public float v2; - public float v3; - } - [StructLayout(LayoutKind.Sequential)] - public struct HmdVector3d_t - { - public double v0; //double[3] - public double v1; - public double v2; - } - [StructLayout(LayoutKind.Sequential)] - public struct HmdVector2_t - { - public float v0; //float[2] - public float v1; - } - [StructLayout(LayoutKind.Sequential)] - public struct HmdQuaternion_t - { - public double w; - public double x; - public double y; - public double z; - } - [StructLayout(LayoutKind.Sequential)] - public struct HmdQuaternionf_t - { - public float w; - public float x; - public float y; - public float z; - } - [StructLayout(LayoutKind.Sequential)] - public struct HmdColor_t - { - public float r; - public float g; - public float b; - public float a; - } - [StructLayout(LayoutKind.Sequential)] - public struct HmdQuad_t - { - public HmdVector3_t vCorners0; //HmdVector3_t[4] - public HmdVector3_t vCorners1; - public HmdVector3_t vCorners2; - public HmdVector3_t vCorners3; - } - [StructLayout(LayoutKind.Sequential)] - public struct HmdRect2_t - { - public HmdVector2_t vTopLeft; - public HmdVector2_t vBottomRight; - } - [StructLayout(LayoutKind.Sequential)] - public struct VRBoneTransform_t - { - public HmdVector4_t position; - public HmdQuaternionf_t orientation; - } - [StructLayout(LayoutKind.Sequential)] - public struct DistortionCoordinates_t - { - public float rfRed0; //float[2] - public float rfRed1; - public float rfGreen0; //float[2] - public float rfGreen1; - public float rfBlue0; //float[2] - public float rfBlue1; - } - [StructLayout(LayoutKind.Sequential)] - public struct Texture_t - { - public IntPtr handle; // void * - public ETextureType eType; - public EColorSpace eColorSpace; - } - [StructLayout(LayoutKind.Sequential)] - public struct VRTextureBounds_t - { - public float uMin; - public float vMin; - public float uMax; - public float vMax; - } - [StructLayout(LayoutKind.Sequential)] - public struct VRTextureWithPose_t - { - public IntPtr handle; // void * - public ETextureType eType; - public EColorSpace eColorSpace; - public HmdMatrix34_t mDeviceToAbsoluteTracking; - } - [StructLayout(LayoutKind.Sequential)] - public struct VRTextureDepthInfo_t - { - public IntPtr handle; // void * - public HmdMatrix44_t mProjection; - public HmdVector2_t vRange; - } - [StructLayout(LayoutKind.Sequential)] - public struct VRTextureWithDepth_t - { - public IntPtr handle; // void * - public ETextureType eType; - public EColorSpace eColorSpace; - public VRTextureDepthInfo_t depth; - } - [StructLayout(LayoutKind.Sequential)] - public struct VRTextureWithPoseAndDepth_t - { - public IntPtr handle; // void * - public ETextureType eType; - public EColorSpace eColorSpace; - public HmdMatrix34_t mDeviceToAbsoluteTracking; - public VRTextureDepthInfo_t depth; - } - [StructLayout(LayoutKind.Sequential)] - public struct DmabufPlane_t - { - public uint unOffset; - public uint unStride; - public int nFd; - } - [StructLayout(LayoutKind.Sequential)] - public struct DmabufAttributes_t - { - public IntPtr pNext; // void * - public uint unWidth; - public uint unHeight; - public uint unDepth; - public uint unMipLevels; - public uint unArrayLayers; - public uint unSampleCount; - public uint unFormat; - public ulong ulModifier; - public uint unPlaneCount; - public DmabufPlane_t plane0; //DmabufPlane_t[4] - public DmabufPlane_t plane1; - public DmabufPlane_t plane2; - public DmabufPlane_t plane3; - } - [StructLayout(LayoutKind.Sequential)] - public struct TrackedDevicePose_t - { - public HmdMatrix34_t mDeviceToAbsoluteTracking; - public HmdVector3_t vVelocity; - public HmdVector3_t vAngularVelocity; - public ETrackingResult eTrackingResult; - [MarshalAs(UnmanagedType.I1)] - public bool bPoseIsValid; - [MarshalAs(UnmanagedType.I1)] - public bool bDeviceIsConnected; - } - [StructLayout(LayoutKind.Sequential)] - public struct VRVulkanTextureData_t - { - public ulong m_nImage; - public IntPtr m_pDevice; // struct VkDevice_T * - public IntPtr m_pPhysicalDevice; // struct VkPhysicalDevice_T * - public IntPtr m_pInstance; // struct VkInstance_T * - public IntPtr m_pQueue; // struct VkQueue_T * - public uint m_nQueueFamilyIndex; - public uint m_nWidth; - public uint m_nHeight; - public uint m_nFormat; - public uint m_nSampleCount; - } - [StructLayout(LayoutKind.Sequential)] - public struct VRVulkanTextureArrayData_t - { - public uint m_unArrayIndex; - public uint m_unArraySize; - } - [StructLayout(LayoutKind.Sequential)] - public struct D3D12TextureData_t - { - public IntPtr m_pResource; // struct ID3D12Resource * - public IntPtr m_pCommandQueue; // struct ID3D12CommandQueue * - public uint m_nNodeMask; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Controller_t - { - public uint button; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Mouse_t - { - public float x; - public float y; - public uint button; - public uint cursorIndex; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Scroll_t - { - public float xdelta; - public float ydelta; - public uint unused; - public float viewportscale; - public uint cursorIndex; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_TouchPadMove_t - { - [MarshalAs(UnmanagedType.I1)] - public bool bFingerDown; - public float flSecondsFingerDown; - public float fValueXFirst; - public float fValueYFirst; - public float fValueXRaw; - public float fValueYRaw; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Notification_t - { - public ulong ulUserValue; - public uint notificationId; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Process_t - { - public uint pid; - public uint oldPid; - [MarshalAs(UnmanagedType.I1)] - public bool bForced; - [MarshalAs(UnmanagedType.I1)] - public bool bConnectionLost; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Overlay_t - { - public ulong overlayHandle; - public ulong devicePath; - public ulong memoryBlockId; - public uint cursorIndex; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Status_t - { - public uint statusState; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Keyboard_t - { - public byte cNewInput0, cNewInput1, cNewInput2, cNewInput3, cNewInput4, cNewInput5, cNewInput6, cNewInput7; - public string cNewInput + get { - get - { - return new string(new char[] { + return new string(new char[] { (char)cNewInput0, (char)cNewInput1, (char)cNewInput2, @@ -6536,572 +6594,513 @@ namespace Valve.VR (char)cNewInput6, (char)cNewInput7 }).TrimEnd('\0'); - } - } - public ulong uUserValue; - public ulong overlayHandle; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Ipd_t - { - public float ipdMeters; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Chaperone_t - { - public ulong m_nPreviousUniverse; - public ulong m_nCurrentUniverse; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Reserved_t - { - public ulong reserved0; - public ulong reserved1; - public ulong reserved2; - public ulong reserved3; - public ulong reserved4; - public ulong reserved5; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_PerformanceTest_t - { - public uint m_nFidelityLevel; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_SeatedZeroPoseReset_t - { - [MarshalAs(UnmanagedType.I1)] - public bool bResetBySystemMenu; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Screenshot_t - { - public uint handle; - public uint type; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_ScreenshotProgress_t - { - public float progress; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_ApplicationLaunch_t - { - public uint pid; - public uint unArgsHandle; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_EditingCameraSurface_t - { - public ulong overlayHandle; - public uint nVisualMode; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_MessageOverlay_t - { - public uint unVRMessageOverlayResponse; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_Property_t - { - public ulong container; - public ETrackedDeviceProperty prop; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_HapticVibration_t - { - public ulong containerHandle; - public ulong componentHandle; - public float fDurationSeconds; - public float fFrequency; - public float fAmplitude; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_WebConsole_t - { - public ulong webConsoleHandle; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_InputBindingLoad_t - { - public ulong ulAppContainer; - public ulong pathMessage; - public ulong pathUrl; - public ulong pathControllerType; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_InputActionManifestLoad_t - { - public ulong pathAppKey; - public ulong pathMessage; - public ulong pathMessageParam; - public ulong pathManifestPath; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_SpatialAnchor_t - { - public uint unHandle; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_ProgressUpdate_t - { - public ulong ulApplicationPropertyContainer; - public ulong pathDevice; - public ulong pathInputSource; - public ulong pathProgressAction; - public ulong pathIcon; - public float fProgress; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_ShowUI_t - { - public EShowUIType eType; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_ShowDevTools_t - { - public int nBrowserIdentifier; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_HDCPError_t - { - public EHDCPError eCode; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_AudioVolumeControl_t - { - public float fVolumeLevel; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_AudioMuteControl_t - { - [MarshalAs(UnmanagedType.I1)] - public bool bMute; - } - [StructLayout(LayoutKind.Sequential)] - public struct VREvent_t - { - public uint eventType; - public uint trackedDeviceIndex; - public float eventAgeSeconds; - public VREvent_Data_t data; - } - // This structure is for backwards binary compatibility on Linux and OSX only - [StructLayout(LayoutKind.Sequential, Pack = 4)] - public struct VREvent_t_Packed - { - public uint eventType; - public uint trackedDeviceIndex; - public float eventAgeSeconds; - public VREvent_Data_t data; - public VREvent_t_Packed(VREvent_t unpacked) - { - this.eventType = unpacked.eventType; - this.trackedDeviceIndex = unpacked.trackedDeviceIndex; - this.eventAgeSeconds = unpacked.eventAgeSeconds; - this.data = unpacked.data; - } - public void Unpack(ref VREvent_t unpacked) - { - unpacked.eventType = this.eventType; - unpacked.trackedDeviceIndex = this.trackedDeviceIndex; - unpacked.eventAgeSeconds = this.eventAgeSeconds; - unpacked.data = this.data; } } - [StructLayout(LayoutKind.Sequential)] - public struct RenderModel_ComponentState_t + public ulong uUserValue; + public ulong overlayHandle; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Ipd_t +{ + public float ipdMeters; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Chaperone_t +{ + public ulong m_nPreviousUniverse; + public ulong m_nCurrentUniverse; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Reserved_t +{ + public ulong reserved0; + public ulong reserved1; + public ulong reserved2; + public ulong reserved3; + public ulong reserved4; + public ulong reserved5; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_PerformanceTest_t +{ + public uint m_nFidelityLevel; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_SeatedZeroPoseReset_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bResetBySystemMenu; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Screenshot_t +{ + public uint handle; + public uint type; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_ScreenshotProgress_t +{ + public float progress; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_ApplicationLaunch_t +{ + public uint pid; + public uint unArgsHandle; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_EditingCameraSurface_t +{ + public ulong overlayHandle; + public uint nVisualMode; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_MessageOverlay_t +{ + public uint unVRMessageOverlayResponse; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Property_t +{ + public ulong container; + public ETrackedDeviceProperty prop; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_HapticVibration_t +{ + public ulong containerHandle; + public ulong componentHandle; + public float fDurationSeconds; + public float fFrequency; + public float fAmplitude; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_WebConsole_t +{ + public ulong webConsoleHandle; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_InputBindingLoad_t +{ + public ulong ulAppContainer; + public ulong pathMessage; + public ulong pathUrl; + public ulong pathControllerType; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_InputActionManifestLoad_t +{ + public ulong pathAppKey; + public ulong pathMessage; + public ulong pathMessageParam; + public ulong pathManifestPath; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_SpatialAnchor_t +{ + public uint unHandle; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_ProgressUpdate_t +{ + public ulong ulApplicationPropertyContainer; + public ulong pathDevice; + public ulong pathInputSource; + public ulong pathProgressAction; + public ulong pathIcon; + public float fProgress; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_ShowUI_t +{ + public EShowUIType eType; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_ShowDevTools_t +{ + public int nBrowserIdentifier; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_HDCPError_t +{ + public EHDCPError eCode; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_AudioVolumeControl_t +{ + public float fVolumeLevel; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_AudioMuteControl_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bMute; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_t +{ + public uint eventType; + public uint trackedDeviceIndex; + public float eventAgeSeconds; + public VREvent_Data_t data; +} +// This structure is for backwards binary compatibility on Linux and OSX only +[StructLayout(LayoutKind.Sequential, Pack = 4)] public struct VREvent_t_Packed +{ + public uint eventType; + public uint trackedDeviceIndex; + public float eventAgeSeconds; + public VREvent_Data_t data; + public VREvent_t_Packed(VREvent_t unpacked) { - public HmdMatrix34_t mTrackingToComponentRenderModel; - public HmdMatrix34_t mTrackingToComponentLocal; - public uint uProperties; + this.eventType = unpacked.eventType; + this.trackedDeviceIndex = unpacked.trackedDeviceIndex; + this.eventAgeSeconds = unpacked.eventAgeSeconds; + this.data = unpacked.data; } - [StructLayout(LayoutKind.Sequential)] - public struct HiddenAreaMesh_t + public void Unpack(ref VREvent_t unpacked) { - public IntPtr pVertexData; // const struct vr::HmdVector2_t * - public uint unTriangleCount; + unpacked.eventType = this.eventType; + unpacked.trackedDeviceIndex = this.trackedDeviceIndex; + unpacked.eventAgeSeconds = this.eventAgeSeconds; + unpacked.data = this.data; } - [StructLayout(LayoutKind.Sequential)] - public struct VRControllerAxis_t +} +[StructLayout(LayoutKind.Sequential)] public struct RenderModel_ComponentState_t +{ + public HmdMatrix34_t mTrackingToComponentRenderModel; + public HmdMatrix34_t mTrackingToComponentLocal; + public uint uProperties; +} +[StructLayout(LayoutKind.Sequential)] public struct HiddenAreaMesh_t +{ + public IntPtr pVertexData; // const struct vr::HmdVector2_t * + public uint unTriangleCount; +} +[StructLayout(LayoutKind.Sequential)] public struct VRControllerAxis_t +{ + public float x; + public float y; +} +[StructLayout(LayoutKind.Sequential)] public struct VRControllerState_t +{ + public uint unPacketNum; + public ulong ulButtonPressed; + public ulong ulButtonTouched; + public VRControllerAxis_t rAxis0; //VRControllerAxis_t[5] + public VRControllerAxis_t rAxis1; + public VRControllerAxis_t rAxis2; + public VRControllerAxis_t rAxis3; + public VRControllerAxis_t rAxis4; +} +// This structure is for backwards binary compatibility on Linux and OSX only +[StructLayout(LayoutKind.Sequential, Pack = 4)] public struct VRControllerState_t_Packed +{ + public uint unPacketNum; + public ulong ulButtonPressed; + public ulong ulButtonTouched; + public VRControllerAxis_t rAxis0; //VRControllerAxis_t[5] + public VRControllerAxis_t rAxis1; + public VRControllerAxis_t rAxis2; + public VRControllerAxis_t rAxis3; + public VRControllerAxis_t rAxis4; + public VRControllerState_t_Packed(VRControllerState_t unpacked) { - public float x; - public float y; + this.unPacketNum = unpacked.unPacketNum; + this.ulButtonPressed = unpacked.ulButtonPressed; + this.ulButtonTouched = unpacked.ulButtonTouched; + this.rAxis0 = unpacked.rAxis0; + this.rAxis1 = unpacked.rAxis1; + this.rAxis2 = unpacked.rAxis2; + this.rAxis3 = unpacked.rAxis3; + this.rAxis4 = unpacked.rAxis4; } - [StructLayout(LayoutKind.Sequential)] - public struct VRControllerState_t + public void Unpack(ref VRControllerState_t unpacked) { - public uint unPacketNum; - public ulong ulButtonPressed; - public ulong ulButtonTouched; - public VRControllerAxis_t rAxis0; //VRControllerAxis_t[5] - public VRControllerAxis_t rAxis1; - public VRControllerAxis_t rAxis2; - public VRControllerAxis_t rAxis3; - public VRControllerAxis_t rAxis4; + unpacked.unPacketNum = this.unPacketNum; + unpacked.ulButtonPressed = this.ulButtonPressed; + unpacked.ulButtonTouched = this.ulButtonTouched; + unpacked.rAxis0 = this.rAxis0; + unpacked.rAxis1 = this.rAxis1; + unpacked.rAxis2 = this.rAxis2; + unpacked.rAxis3 = this.rAxis3; + unpacked.rAxis4 = this.rAxis4; } - // This structure is for backwards binary compatibility on Linux and OSX only - [StructLayout(LayoutKind.Sequential, Pack = 4)] - public struct VRControllerState_t_Packed +} +[StructLayout(LayoutKind.Sequential)] public struct CameraVideoStreamFrameHeader_t +{ + public EVRTrackedCameraFrameType eFrameType; + public uint nWidth; + public uint nHeight; + public uint nBytesPerPixel; + public uint nFrameSequence; + public TrackedDevicePose_t trackedDevicePose; + public ulong ulFrameExposureTime; +} +[StructLayout(LayoutKind.Sequential)] public struct Compositor_FrameTiming +{ + public uint m_nSize; + public uint m_nFrameIndex; + public uint m_nNumFramePresents; + public uint m_nNumMisPresented; + public uint m_nNumDroppedFrames; + public uint m_nReprojectionFlags; + public double m_flSystemTimeInSeconds; + public float m_flPreSubmitGpuMs; + public float m_flPostSubmitGpuMs; + public float m_flTotalRenderGpuMs; + public float m_flCompositorRenderGpuMs; + public float m_flCompositorRenderCpuMs; + public float m_flCompositorIdleCpuMs; + public float m_flClientFrameIntervalMs; + public float m_flPresentCallCpuMs; + public float m_flWaitForPresentCpuMs; + public float m_flSubmitFrameMs; + public float m_flWaitGetPosesCalledMs; + public float m_flNewPosesReadyMs; + public float m_flNewFrameReadyMs; + public float m_flCompositorUpdateStartMs; + public float m_flCompositorUpdateEndMs; + public float m_flCompositorRenderStartMs; + public TrackedDevicePose_t m_HmdPose; + public uint m_nNumVSyncsReadyForUse; + public uint m_nNumVSyncsToFirstView; + public float m_flTransferLatencyMs; +} +[StructLayout(LayoutKind.Sequential)] public struct Compositor_BenchmarkResults +{ + public float m_flMegaPixelsPerSecond; + public float m_flHmdRecommendedMegaPixelsPerSecond; +} +[StructLayout(LayoutKind.Sequential)] public struct DriverDirectMode_FrameTiming +{ + public uint m_nSize; + public uint m_nNumFramePresents; + public uint m_nNumMisPresented; + public uint m_nNumDroppedFrames; + public uint m_nReprojectionFlags; +} +[StructLayout(LayoutKind.Sequential)] public struct ImuSample_t +{ + public double fSampleTime; + public HmdVector3d_t vAccel; + public HmdVector3d_t vGyro; + public uint unOffScaleFlags; +} +[StructLayout(LayoutKind.Sequential)] public struct AppOverrideKeys_t +{ + public IntPtr pchKey; // const char * + public IntPtr pchValue; // const char * +} +[StructLayout(LayoutKind.Sequential)] public struct Compositor_CumulativeStats +{ + public uint m_nPid; + public uint m_nNumFramePresents; + public uint m_nNumDroppedFrames; + public uint m_nNumReprojectedFrames; + public uint m_nNumFramePresentsOnStartup; + public uint m_nNumDroppedFramesOnStartup; + public uint m_nNumReprojectedFramesOnStartup; + public uint m_nNumLoading; + public uint m_nNumFramePresentsLoading; + public uint m_nNumDroppedFramesLoading; + public uint m_nNumReprojectedFramesLoading; + public uint m_nNumTimedOut; + public uint m_nNumFramePresentsTimedOut; + public uint m_nNumDroppedFramesTimedOut; + public uint m_nNumReprojectedFramesTimedOut; + public uint m_nNumFrameSubmits; + public double m_flSumCompositorCPUTimeMS; + public double m_flSumCompositorGPUTimeMS; + public double m_flSumTargetFrameTimes; + public double m_flSumApplicationCPUTimeMS; + public double m_flSumApplicationGPUTimeMS; + public uint m_nNumFramesWithDepth; +} +[StructLayout(LayoutKind.Sequential)] public struct Compositor_StageRenderSettings +{ + public HmdColor_t m_PrimaryColor; + public HmdColor_t m_SecondaryColor; + public float m_flVignetteInnerRadius; + public float m_flVignetteOuterRadius; + public float m_flFresnelStrength; + [MarshalAs(UnmanagedType.I1)] + public bool m_bBackfaceCulling; + [MarshalAs(UnmanagedType.I1)] + public bool m_bGreyscale; + [MarshalAs(UnmanagedType.I1)] + public bool m_bWireframe; +} +[StructLayout(LayoutKind.Sequential)] public struct VROverlayIntersectionParams_t +{ + public HmdVector3_t vSource; + public HmdVector3_t vDirection; + public ETrackingUniverseOrigin eOrigin; +} +[StructLayout(LayoutKind.Sequential)] public struct VROverlayIntersectionResults_t +{ + public HmdVector3_t vPoint; + public HmdVector3_t vNormal; + public HmdVector2_t vUVs; + public float fDistance; +} +[StructLayout(LayoutKind.Sequential)] public struct IntersectionMaskRectangle_t +{ + public float m_flTopLeftX; + public float m_flTopLeftY; + public float m_flWidth; + public float m_flHeight; +} +[StructLayout(LayoutKind.Sequential)] public struct IntersectionMaskCircle_t +{ + public float m_flCenterX; + public float m_flCenterY; + public float m_flRadius; +} +[StructLayout(LayoutKind.Sequential)] public struct VROverlayIntersectionMaskPrimitive_t +{ + public EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType; + public VROverlayIntersectionMaskPrimitive_Data_t m_Primitive; +} +[StructLayout(LayoutKind.Sequential)] public struct VROverlayProjection_t +{ + public float fLeft; + public float fRight; + public float fTop; + public float fBottom; +} +[StructLayout(LayoutKind.Sequential)] public struct VROverlayView_t +{ + public ulong overlayHandle; + public Texture_t texture; + public VRTextureBounds_t textureBounds; +} +[StructLayout(LayoutKind.Sequential)] public struct VRVulkanDevice_t +{ + public IntPtr m_pInstance; // struct VkInstance_T * + public IntPtr m_pDevice; // struct VkDevice_T * + public IntPtr m_pPhysicalDevice; // struct VkPhysicalDevice_T * + public IntPtr m_pQueue; // struct VkQueue_T * + public uint m_uQueueFamilyIndex; +} +[StructLayout(LayoutKind.Sequential)] public struct VRNativeDevice_t +{ + public IntPtr handle; // void * + public EDeviceType eType; +} +[StructLayout(LayoutKind.Sequential)] public struct RenderModel_Vertex_t +{ + public HmdVector3_t vPosition; + public HmdVector3_t vNormal; + public float rfTextureCoord0; //float[2] + public float rfTextureCoord1; +} +[StructLayout(LayoutKind.Sequential)] public struct RenderModel_TextureMap_t +{ + public ushort unWidth; + public ushort unHeight; + public IntPtr rubTextureMapData; // const uint8_t * + public EVRRenderModelTextureFormat format; + public ushort unMipLevels; +} +// This structure is for backwards binary compatibility on Linux and OSX only +[StructLayout(LayoutKind.Sequential, Pack = 4)] public struct RenderModel_TextureMap_t_Packed +{ + public ushort unWidth; + public ushort unHeight; + public IntPtr rubTextureMapData; // const uint8_t * + public EVRRenderModelTextureFormat format; + public ushort unMipLevels; + public RenderModel_TextureMap_t_Packed(RenderModel_TextureMap_t unpacked) { - public uint unPacketNum; - public ulong ulButtonPressed; - public ulong ulButtonTouched; - public VRControllerAxis_t rAxis0; //VRControllerAxis_t[5] - public VRControllerAxis_t rAxis1; - public VRControllerAxis_t rAxis2; - public VRControllerAxis_t rAxis3; - public VRControllerAxis_t rAxis4; - public VRControllerState_t_Packed(VRControllerState_t unpacked) + this.unWidth = unpacked.unWidth; + this.unHeight = unpacked.unHeight; + this.rubTextureMapData = unpacked.rubTextureMapData; + this.format = unpacked.format; + this.unMipLevels = unpacked.unMipLevels; + } + public void Unpack(ref RenderModel_TextureMap_t unpacked) + { + unpacked.unWidth = this.unWidth; + unpacked.unHeight = this.unHeight; + unpacked.rubTextureMapData = this.rubTextureMapData; + unpacked.format = this.format; + unpacked.unMipLevels = this.unMipLevels; + } +} +[StructLayout(LayoutKind.Sequential)] public struct RenderModel_t +{ + public IntPtr rVertexData; // const struct vr::RenderModel_Vertex_t * + public uint unVertexCount; + public IntPtr rIndexData; // const uint16_t * + public uint unTriangleCount; + public int diffuseTextureId; +} +// This structure is for backwards binary compatibility on Linux and OSX only +[StructLayout(LayoutKind.Sequential, Pack = 4)] public struct RenderModel_t_Packed +{ + public IntPtr rVertexData; // const struct vr::RenderModel_Vertex_t * + public uint unVertexCount; + public IntPtr rIndexData; // const uint16_t * + public uint unTriangleCount; + public int diffuseTextureId; + public RenderModel_t_Packed(RenderModel_t unpacked) + { + this.rVertexData = unpacked.rVertexData; + this.unVertexCount = unpacked.unVertexCount; + this.rIndexData = unpacked.rIndexData; + this.unTriangleCount = unpacked.unTriangleCount; + this.diffuseTextureId = unpacked.diffuseTextureId; + } + public void Unpack(ref RenderModel_t unpacked) + { + unpacked.rVertexData = this.rVertexData; + unpacked.unVertexCount = this.unVertexCount; + unpacked.rIndexData = this.rIndexData; + unpacked.unTriangleCount = this.unTriangleCount; + unpacked.diffuseTextureId = this.diffuseTextureId; + } +} +[StructLayout(LayoutKind.Sequential)] public struct RenderModel_ControllerMode_State_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bScrollWheelVisible; +} +[StructLayout(LayoutKind.Sequential)] public struct NotificationBitmap_t +{ + public IntPtr m_pImageData; // void * + public int m_nWidth; + public int m_nHeight; + public int m_nBytesPerPixel; +} +[StructLayout(LayoutKind.Sequential)] public struct CVRSettingHelper +{ + public IntPtr m_pSettings; // class vr::IVRSettings * +} +[StructLayout(LayoutKind.Sequential)] public struct InputAnalogActionData_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bActive; + public ulong activeOrigin; + public float x; + public float y; + public float z; + public float deltaX; + public float deltaY; + public float deltaZ; + public float fUpdateTime; +} +[StructLayout(LayoutKind.Sequential)] public struct InputDigitalActionData_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bActive; + public ulong activeOrigin; + [MarshalAs(UnmanagedType.I1)] + public bool bState; + [MarshalAs(UnmanagedType.I1)] + public bool bChanged; + public float fUpdateTime; +} +[StructLayout(LayoutKind.Sequential)] public struct InputPoseActionData_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bActive; + public ulong activeOrigin; + public TrackedDevicePose_t pose; +} +[StructLayout(LayoutKind.Sequential)] public struct InputSkeletalActionData_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bActive; + public ulong activeOrigin; +} +[StructLayout(LayoutKind.Sequential)] public struct InputOriginInfo_t +{ + public ulong devicePath; + public uint trackedDeviceIndex; + public byte rchRenderModelComponentName0,rchRenderModelComponentName1,rchRenderModelComponentName2,rchRenderModelComponentName3,rchRenderModelComponentName4,rchRenderModelComponentName5,rchRenderModelComponentName6,rchRenderModelComponentName7,rchRenderModelComponentName8,rchRenderModelComponentName9,rchRenderModelComponentName10,rchRenderModelComponentName11,rchRenderModelComponentName12,rchRenderModelComponentName13,rchRenderModelComponentName14,rchRenderModelComponentName15,rchRenderModelComponentName16,rchRenderModelComponentName17,rchRenderModelComponentName18,rchRenderModelComponentName19,rchRenderModelComponentName20,rchRenderModelComponentName21,rchRenderModelComponentName22,rchRenderModelComponentName23,rchRenderModelComponentName24,rchRenderModelComponentName25,rchRenderModelComponentName26,rchRenderModelComponentName27,rchRenderModelComponentName28,rchRenderModelComponentName29,rchRenderModelComponentName30,rchRenderModelComponentName31,rchRenderModelComponentName32,rchRenderModelComponentName33,rchRenderModelComponentName34,rchRenderModelComponentName35,rchRenderModelComponentName36,rchRenderModelComponentName37,rchRenderModelComponentName38,rchRenderModelComponentName39,rchRenderModelComponentName40,rchRenderModelComponentName41,rchRenderModelComponentName42,rchRenderModelComponentName43,rchRenderModelComponentName44,rchRenderModelComponentName45,rchRenderModelComponentName46,rchRenderModelComponentName47,rchRenderModelComponentName48,rchRenderModelComponentName49,rchRenderModelComponentName50,rchRenderModelComponentName51,rchRenderModelComponentName52,rchRenderModelComponentName53,rchRenderModelComponentName54,rchRenderModelComponentName55,rchRenderModelComponentName56,rchRenderModelComponentName57,rchRenderModelComponentName58,rchRenderModelComponentName59,rchRenderModelComponentName60,rchRenderModelComponentName61,rchRenderModelComponentName62,rchRenderModelComponentName63,rchRenderModelComponentName64,rchRenderModelComponentName65,rchRenderModelComponentName66,rchRenderModelComponentName67,rchRenderModelComponentName68,rchRenderModelComponentName69,rchRenderModelComponentName70,rchRenderModelComponentName71,rchRenderModelComponentName72,rchRenderModelComponentName73,rchRenderModelComponentName74,rchRenderModelComponentName75,rchRenderModelComponentName76,rchRenderModelComponentName77,rchRenderModelComponentName78,rchRenderModelComponentName79,rchRenderModelComponentName80,rchRenderModelComponentName81,rchRenderModelComponentName82,rchRenderModelComponentName83,rchRenderModelComponentName84,rchRenderModelComponentName85,rchRenderModelComponentName86,rchRenderModelComponentName87,rchRenderModelComponentName88,rchRenderModelComponentName89,rchRenderModelComponentName90,rchRenderModelComponentName91,rchRenderModelComponentName92,rchRenderModelComponentName93,rchRenderModelComponentName94,rchRenderModelComponentName95,rchRenderModelComponentName96,rchRenderModelComponentName97,rchRenderModelComponentName98,rchRenderModelComponentName99,rchRenderModelComponentName100,rchRenderModelComponentName101,rchRenderModelComponentName102,rchRenderModelComponentName103,rchRenderModelComponentName104,rchRenderModelComponentName105,rchRenderModelComponentName106,rchRenderModelComponentName107,rchRenderModelComponentName108,rchRenderModelComponentName109,rchRenderModelComponentName110,rchRenderModelComponentName111,rchRenderModelComponentName112,rchRenderModelComponentName113,rchRenderModelComponentName114,rchRenderModelComponentName115,rchRenderModelComponentName116,rchRenderModelComponentName117,rchRenderModelComponentName118,rchRenderModelComponentName119,rchRenderModelComponentName120,rchRenderModelComponentName121,rchRenderModelComponentName122,rchRenderModelComponentName123,rchRenderModelComponentName124,rchRenderModelComponentName125,rchRenderModelComponentName126,rchRenderModelComponentName127; + public string rchRenderModelComponentName + { + get { - this.unPacketNum = unpacked.unPacketNum; - this.ulButtonPressed = unpacked.ulButtonPressed; - this.ulButtonTouched = unpacked.ulButtonTouched; - this.rAxis0 = unpacked.rAxis0; - this.rAxis1 = unpacked.rAxis1; - this.rAxis2 = unpacked.rAxis2; - this.rAxis3 = unpacked.rAxis3; - this.rAxis4 = unpacked.rAxis4; - } - public void Unpack(ref VRControllerState_t unpacked) - { - unpacked.unPacketNum = this.unPacketNum; - unpacked.ulButtonPressed = this.ulButtonPressed; - unpacked.ulButtonTouched = this.ulButtonTouched; - unpacked.rAxis0 = this.rAxis0; - unpacked.rAxis1 = this.rAxis1; - unpacked.rAxis2 = this.rAxis2; - unpacked.rAxis3 = this.rAxis3; - unpacked.rAxis4 = this.rAxis4; - } - } - [StructLayout(LayoutKind.Sequential)] - public struct CameraVideoStreamFrameHeader_t - { - public EVRTrackedCameraFrameType eFrameType; - public uint nWidth; - public uint nHeight; - public uint nBytesPerPixel; - public uint nFrameSequence; - public TrackedDevicePose_t trackedDevicePose; - public ulong ulFrameExposureTime; - } - [StructLayout(LayoutKind.Sequential)] - public struct Compositor_FrameTiming - { - public uint m_nSize; - public uint m_nFrameIndex; - public uint m_nNumFramePresents; - public uint m_nNumMisPresented; - public uint m_nNumDroppedFrames; - public uint m_nReprojectionFlags; - public double m_flSystemTimeInSeconds; - public float m_flPreSubmitGpuMs; - public float m_flPostSubmitGpuMs; - public float m_flTotalRenderGpuMs; - public float m_flCompositorRenderGpuMs; - public float m_flCompositorRenderCpuMs; - public float m_flCompositorIdleCpuMs; - public float m_flClientFrameIntervalMs; - public float m_flPresentCallCpuMs; - public float m_flWaitForPresentCpuMs; - public float m_flSubmitFrameMs; - public float m_flWaitGetPosesCalledMs; - public float m_flNewPosesReadyMs; - public float m_flNewFrameReadyMs; - public float m_flCompositorUpdateStartMs; - public float m_flCompositorUpdateEndMs; - public float m_flCompositorRenderStartMs; - public TrackedDevicePose_t m_HmdPose; - public uint m_nNumVSyncsReadyForUse; - public uint m_nNumVSyncsToFirstView; - public float m_flTransferLatencyMs; - } - [StructLayout(LayoutKind.Sequential)] - public struct Compositor_BenchmarkResults - { - public float m_flMegaPixelsPerSecond; - public float m_flHmdRecommendedMegaPixelsPerSecond; - } - [StructLayout(LayoutKind.Sequential)] - public struct DriverDirectMode_FrameTiming - { - public uint m_nSize; - public uint m_nNumFramePresents; - public uint m_nNumMisPresented; - public uint m_nNumDroppedFrames; - public uint m_nReprojectionFlags; - } - [StructLayout(LayoutKind.Sequential)] - public struct ImuSample_t - { - public double fSampleTime; - public HmdVector3d_t vAccel; - public HmdVector3d_t vGyro; - public uint unOffScaleFlags; - } - [StructLayout(LayoutKind.Sequential)] - public struct AppOverrideKeys_t - { - public IntPtr pchKey; // const char * - public IntPtr pchValue; // const char * - } - [StructLayout(LayoutKind.Sequential)] - public struct Compositor_CumulativeStats - { - public uint m_nPid; - public uint m_nNumFramePresents; - public uint m_nNumDroppedFrames; - public uint m_nNumReprojectedFrames; - public uint m_nNumFramePresentsOnStartup; - public uint m_nNumDroppedFramesOnStartup; - public uint m_nNumReprojectedFramesOnStartup; - public uint m_nNumLoading; - public uint m_nNumFramePresentsLoading; - public uint m_nNumDroppedFramesLoading; - public uint m_nNumReprojectedFramesLoading; - public uint m_nNumTimedOut; - public uint m_nNumFramePresentsTimedOut; - public uint m_nNumDroppedFramesTimedOut; - public uint m_nNumReprojectedFramesTimedOut; - public uint m_nNumFrameSubmits; - public double m_flSumCompositorCPUTimeMS; - public double m_flSumCompositorGPUTimeMS; - public double m_flSumTargetFrameTimes; - public double m_flSumApplicationCPUTimeMS; - public double m_flSumApplicationGPUTimeMS; - public uint m_nNumFramesWithDepth; - } - [StructLayout(LayoutKind.Sequential)] - public struct Compositor_StageRenderSettings - { - public HmdColor_t m_PrimaryColor; - public HmdColor_t m_SecondaryColor; - public float m_flVignetteInnerRadius; - public float m_flVignetteOuterRadius; - public float m_flFresnelStrength; - [MarshalAs(UnmanagedType.I1)] - public bool m_bBackfaceCulling; - [MarshalAs(UnmanagedType.I1)] - public bool m_bGreyscale; - [MarshalAs(UnmanagedType.I1)] - public bool m_bWireframe; - } - [StructLayout(LayoutKind.Sequential)] - public struct VROverlayIntersectionParams_t - { - public HmdVector3_t vSource; - public HmdVector3_t vDirection; - public ETrackingUniverseOrigin eOrigin; - } - [StructLayout(LayoutKind.Sequential)] - public struct VROverlayIntersectionResults_t - { - public HmdVector3_t vPoint; - public HmdVector3_t vNormal; - public HmdVector2_t vUVs; - public float fDistance; - } - [StructLayout(LayoutKind.Sequential)] - public struct IntersectionMaskRectangle_t - { - public float m_flTopLeftX; - public float m_flTopLeftY; - public float m_flWidth; - public float m_flHeight; - } - [StructLayout(LayoutKind.Sequential)] - public struct IntersectionMaskCircle_t - { - public float m_flCenterX; - public float m_flCenterY; - public float m_flRadius; - } - [StructLayout(LayoutKind.Sequential)] - public struct VROverlayIntersectionMaskPrimitive_t - { - public EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType; - public VROverlayIntersectionMaskPrimitive_Data_t m_Primitive; - } - [StructLayout(LayoutKind.Sequential)] - public struct VROverlayProjection_t - { - public float fLeft; - public float fRight; - public float fTop; - public float fBottom; - } - [StructLayout(LayoutKind.Sequential)] - public struct VROverlayView_t - { - public ulong overlayHandle; - public Texture_t texture; - public VRTextureBounds_t textureBounds; - } - [StructLayout(LayoutKind.Sequential)] - public struct VRVulkanDevice_t - { - public IntPtr m_pInstance; // struct VkInstance_T * - public IntPtr m_pDevice; // struct VkDevice_T * - public IntPtr m_pPhysicalDevice; // struct VkPhysicalDevice_T * - public IntPtr m_pQueue; // struct VkQueue_T * - public uint m_uQueueFamilyIndex; - } - [StructLayout(LayoutKind.Sequential)] - public struct VRNativeDevice_t - { - public IntPtr handle; // void * - public EDeviceType eType; - } - [StructLayout(LayoutKind.Sequential)] - public struct RenderModel_Vertex_t - { - public HmdVector3_t vPosition; - public HmdVector3_t vNormal; - public float rfTextureCoord0; //float[2] - public float rfTextureCoord1; - } - [StructLayout(LayoutKind.Sequential)] - public struct RenderModel_TextureMap_t - { - public ushort unWidth; - public ushort unHeight; - public IntPtr rubTextureMapData; // const uint8_t * - public EVRRenderModelTextureFormat format; - public ushort unMipLevels; - } - // This structure is for backwards binary compatibility on Linux and OSX only - [StructLayout(LayoutKind.Sequential, Pack = 4)] - public struct RenderModel_TextureMap_t_Packed - { - public ushort unWidth; - public ushort unHeight; - public IntPtr rubTextureMapData; // const uint8_t * - public EVRRenderModelTextureFormat format; - public ushort unMipLevels; - public RenderModel_TextureMap_t_Packed(RenderModel_TextureMap_t unpacked) - { - this.unWidth = unpacked.unWidth; - this.unHeight = unpacked.unHeight; - this.rubTextureMapData = unpacked.rubTextureMapData; - this.format = unpacked.format; - this.unMipLevels = unpacked.unMipLevels; - } - public void Unpack(ref RenderModel_TextureMap_t unpacked) - { - unpacked.unWidth = this.unWidth; - unpacked.unHeight = this.unHeight; - unpacked.rubTextureMapData = this.rubTextureMapData; - unpacked.format = this.format; - unpacked.unMipLevels = this.unMipLevels; - } - } - [StructLayout(LayoutKind.Sequential)] - public struct RenderModel_t - { - public IntPtr rVertexData; // const struct vr::RenderModel_Vertex_t * - public uint unVertexCount; - public IntPtr rIndexData; // const uint16_t * - public uint unTriangleCount; - public int diffuseTextureId; - } - // This structure is for backwards binary compatibility on Linux and OSX only - [StructLayout(LayoutKind.Sequential, Pack = 4)] - public struct RenderModel_t_Packed - { - public IntPtr rVertexData; // const struct vr::RenderModel_Vertex_t * - public uint unVertexCount; - public IntPtr rIndexData; // const uint16_t * - public uint unTriangleCount; - public int diffuseTextureId; - public RenderModel_t_Packed(RenderModel_t unpacked) - { - this.rVertexData = unpacked.rVertexData; - this.unVertexCount = unpacked.unVertexCount; - this.rIndexData = unpacked.rIndexData; - this.unTriangleCount = unpacked.unTriangleCount; - this.diffuseTextureId = unpacked.diffuseTextureId; - } - public void Unpack(ref RenderModel_t unpacked) - { - unpacked.rVertexData = this.rVertexData; - unpacked.unVertexCount = this.unVertexCount; - unpacked.rIndexData = this.rIndexData; - unpacked.unTriangleCount = this.unTriangleCount; - unpacked.diffuseTextureId = this.diffuseTextureId; - } - } - [StructLayout(LayoutKind.Sequential)] - public struct RenderModel_ControllerMode_State_t - { - [MarshalAs(UnmanagedType.I1)] - public bool bScrollWheelVisible; - } - [StructLayout(LayoutKind.Sequential)] - public struct NotificationBitmap_t - { - public IntPtr m_pImageData; // void * - public int m_nWidth; - public int m_nHeight; - public int m_nBytesPerPixel; - } - [StructLayout(LayoutKind.Sequential)] - public struct CVRSettingHelper - { - public IntPtr m_pSettings; // class vr::IVRSettings * - } - [StructLayout(LayoutKind.Sequential)] - public struct InputAnalogActionData_t - { - [MarshalAs(UnmanagedType.I1)] - public bool bActive; - public ulong activeOrigin; - public float x; - public float y; - public float z; - public float deltaX; - public float deltaY; - public float deltaZ; - public float fUpdateTime; - } - [StructLayout(LayoutKind.Sequential)] - public struct InputDigitalActionData_t - { - [MarshalAs(UnmanagedType.I1)] - public bool bActive; - public ulong activeOrigin; - [MarshalAs(UnmanagedType.I1)] - public bool bState; - [MarshalAs(UnmanagedType.I1)] - public bool bChanged; - public float fUpdateTime; - } - [StructLayout(LayoutKind.Sequential)] - public struct InputPoseActionData_t - { - [MarshalAs(UnmanagedType.I1)] - public bool bActive; - public ulong activeOrigin; - public TrackedDevicePose_t pose; - } - [StructLayout(LayoutKind.Sequential)] - public struct InputSkeletalActionData_t - { - [MarshalAs(UnmanagedType.I1)] - public bool bActive; - public ulong activeOrigin; - } - [StructLayout(LayoutKind.Sequential)] - public struct InputOriginInfo_t - { - public ulong devicePath; - public uint trackedDeviceIndex; - public byte rchRenderModelComponentName0, rchRenderModelComponentName1, rchRenderModelComponentName2, rchRenderModelComponentName3, rchRenderModelComponentName4, rchRenderModelComponentName5, rchRenderModelComponentName6, rchRenderModelComponentName7, rchRenderModelComponentName8, rchRenderModelComponentName9, rchRenderModelComponentName10, rchRenderModelComponentName11, rchRenderModelComponentName12, rchRenderModelComponentName13, rchRenderModelComponentName14, rchRenderModelComponentName15, rchRenderModelComponentName16, rchRenderModelComponentName17, rchRenderModelComponentName18, rchRenderModelComponentName19, rchRenderModelComponentName20, rchRenderModelComponentName21, rchRenderModelComponentName22, rchRenderModelComponentName23, rchRenderModelComponentName24, rchRenderModelComponentName25, rchRenderModelComponentName26, rchRenderModelComponentName27, rchRenderModelComponentName28, rchRenderModelComponentName29, rchRenderModelComponentName30, rchRenderModelComponentName31, rchRenderModelComponentName32, rchRenderModelComponentName33, rchRenderModelComponentName34, rchRenderModelComponentName35, rchRenderModelComponentName36, rchRenderModelComponentName37, rchRenderModelComponentName38, rchRenderModelComponentName39, rchRenderModelComponentName40, rchRenderModelComponentName41, rchRenderModelComponentName42, rchRenderModelComponentName43, rchRenderModelComponentName44, rchRenderModelComponentName45, rchRenderModelComponentName46, rchRenderModelComponentName47, rchRenderModelComponentName48, rchRenderModelComponentName49, rchRenderModelComponentName50, rchRenderModelComponentName51, rchRenderModelComponentName52, rchRenderModelComponentName53, rchRenderModelComponentName54, rchRenderModelComponentName55, rchRenderModelComponentName56, rchRenderModelComponentName57, rchRenderModelComponentName58, rchRenderModelComponentName59, rchRenderModelComponentName60, rchRenderModelComponentName61, rchRenderModelComponentName62, rchRenderModelComponentName63, rchRenderModelComponentName64, rchRenderModelComponentName65, rchRenderModelComponentName66, rchRenderModelComponentName67, rchRenderModelComponentName68, rchRenderModelComponentName69, rchRenderModelComponentName70, rchRenderModelComponentName71, rchRenderModelComponentName72, rchRenderModelComponentName73, rchRenderModelComponentName74, rchRenderModelComponentName75, rchRenderModelComponentName76, rchRenderModelComponentName77, rchRenderModelComponentName78, rchRenderModelComponentName79, rchRenderModelComponentName80, rchRenderModelComponentName81, rchRenderModelComponentName82, rchRenderModelComponentName83, rchRenderModelComponentName84, rchRenderModelComponentName85, rchRenderModelComponentName86, rchRenderModelComponentName87, rchRenderModelComponentName88, rchRenderModelComponentName89, rchRenderModelComponentName90, rchRenderModelComponentName91, rchRenderModelComponentName92, rchRenderModelComponentName93, rchRenderModelComponentName94, rchRenderModelComponentName95, rchRenderModelComponentName96, rchRenderModelComponentName97, rchRenderModelComponentName98, rchRenderModelComponentName99, rchRenderModelComponentName100, rchRenderModelComponentName101, rchRenderModelComponentName102, rchRenderModelComponentName103, rchRenderModelComponentName104, rchRenderModelComponentName105, rchRenderModelComponentName106, rchRenderModelComponentName107, rchRenderModelComponentName108, rchRenderModelComponentName109, rchRenderModelComponentName110, rchRenderModelComponentName111, rchRenderModelComponentName112, rchRenderModelComponentName113, rchRenderModelComponentName114, rchRenderModelComponentName115, rchRenderModelComponentName116, rchRenderModelComponentName117, rchRenderModelComponentName118, rchRenderModelComponentName119, rchRenderModelComponentName120, rchRenderModelComponentName121, rchRenderModelComponentName122, rchRenderModelComponentName123, rchRenderModelComponentName124, rchRenderModelComponentName125, rchRenderModelComponentName126, rchRenderModelComponentName127; - public string rchRenderModelComponentName - { - get - { - return new string(new char[] { + return new string(new char[] { (char)rchRenderModelComponentName0, (char)rchRenderModelComponentName1, (char)rchRenderModelComponentName2, @@ -7231,18 +7230,17 @@ namespace Valve.VR (char)rchRenderModelComponentName126, (char)rchRenderModelComponentName127 }).TrimEnd('\0'); - } } } - [StructLayout(LayoutKind.Sequential)] - public struct InputBindingInfo_t +} +[StructLayout(LayoutKind.Sequential)] public struct InputBindingInfo_t +{ + public byte rchDevicePathName0,rchDevicePathName1,rchDevicePathName2,rchDevicePathName3,rchDevicePathName4,rchDevicePathName5,rchDevicePathName6,rchDevicePathName7,rchDevicePathName8,rchDevicePathName9,rchDevicePathName10,rchDevicePathName11,rchDevicePathName12,rchDevicePathName13,rchDevicePathName14,rchDevicePathName15,rchDevicePathName16,rchDevicePathName17,rchDevicePathName18,rchDevicePathName19,rchDevicePathName20,rchDevicePathName21,rchDevicePathName22,rchDevicePathName23,rchDevicePathName24,rchDevicePathName25,rchDevicePathName26,rchDevicePathName27,rchDevicePathName28,rchDevicePathName29,rchDevicePathName30,rchDevicePathName31,rchDevicePathName32,rchDevicePathName33,rchDevicePathName34,rchDevicePathName35,rchDevicePathName36,rchDevicePathName37,rchDevicePathName38,rchDevicePathName39,rchDevicePathName40,rchDevicePathName41,rchDevicePathName42,rchDevicePathName43,rchDevicePathName44,rchDevicePathName45,rchDevicePathName46,rchDevicePathName47,rchDevicePathName48,rchDevicePathName49,rchDevicePathName50,rchDevicePathName51,rchDevicePathName52,rchDevicePathName53,rchDevicePathName54,rchDevicePathName55,rchDevicePathName56,rchDevicePathName57,rchDevicePathName58,rchDevicePathName59,rchDevicePathName60,rchDevicePathName61,rchDevicePathName62,rchDevicePathName63,rchDevicePathName64,rchDevicePathName65,rchDevicePathName66,rchDevicePathName67,rchDevicePathName68,rchDevicePathName69,rchDevicePathName70,rchDevicePathName71,rchDevicePathName72,rchDevicePathName73,rchDevicePathName74,rchDevicePathName75,rchDevicePathName76,rchDevicePathName77,rchDevicePathName78,rchDevicePathName79,rchDevicePathName80,rchDevicePathName81,rchDevicePathName82,rchDevicePathName83,rchDevicePathName84,rchDevicePathName85,rchDevicePathName86,rchDevicePathName87,rchDevicePathName88,rchDevicePathName89,rchDevicePathName90,rchDevicePathName91,rchDevicePathName92,rchDevicePathName93,rchDevicePathName94,rchDevicePathName95,rchDevicePathName96,rchDevicePathName97,rchDevicePathName98,rchDevicePathName99,rchDevicePathName100,rchDevicePathName101,rchDevicePathName102,rchDevicePathName103,rchDevicePathName104,rchDevicePathName105,rchDevicePathName106,rchDevicePathName107,rchDevicePathName108,rchDevicePathName109,rchDevicePathName110,rchDevicePathName111,rchDevicePathName112,rchDevicePathName113,rchDevicePathName114,rchDevicePathName115,rchDevicePathName116,rchDevicePathName117,rchDevicePathName118,rchDevicePathName119,rchDevicePathName120,rchDevicePathName121,rchDevicePathName122,rchDevicePathName123,rchDevicePathName124,rchDevicePathName125,rchDevicePathName126,rchDevicePathName127; + public string rchDevicePathName { - public byte rchDevicePathName0, rchDevicePathName1, rchDevicePathName2, rchDevicePathName3, rchDevicePathName4, rchDevicePathName5, rchDevicePathName6, rchDevicePathName7, rchDevicePathName8, rchDevicePathName9, rchDevicePathName10, rchDevicePathName11, rchDevicePathName12, rchDevicePathName13, rchDevicePathName14, rchDevicePathName15, rchDevicePathName16, rchDevicePathName17, rchDevicePathName18, rchDevicePathName19, rchDevicePathName20, rchDevicePathName21, rchDevicePathName22, rchDevicePathName23, rchDevicePathName24, rchDevicePathName25, rchDevicePathName26, rchDevicePathName27, rchDevicePathName28, rchDevicePathName29, rchDevicePathName30, rchDevicePathName31, rchDevicePathName32, rchDevicePathName33, rchDevicePathName34, rchDevicePathName35, rchDevicePathName36, rchDevicePathName37, rchDevicePathName38, rchDevicePathName39, rchDevicePathName40, rchDevicePathName41, rchDevicePathName42, rchDevicePathName43, rchDevicePathName44, rchDevicePathName45, rchDevicePathName46, rchDevicePathName47, rchDevicePathName48, rchDevicePathName49, rchDevicePathName50, rchDevicePathName51, rchDevicePathName52, rchDevicePathName53, rchDevicePathName54, rchDevicePathName55, rchDevicePathName56, rchDevicePathName57, rchDevicePathName58, rchDevicePathName59, rchDevicePathName60, rchDevicePathName61, rchDevicePathName62, rchDevicePathName63, rchDevicePathName64, rchDevicePathName65, rchDevicePathName66, rchDevicePathName67, rchDevicePathName68, rchDevicePathName69, rchDevicePathName70, rchDevicePathName71, rchDevicePathName72, rchDevicePathName73, rchDevicePathName74, rchDevicePathName75, rchDevicePathName76, rchDevicePathName77, rchDevicePathName78, rchDevicePathName79, rchDevicePathName80, rchDevicePathName81, rchDevicePathName82, rchDevicePathName83, rchDevicePathName84, rchDevicePathName85, rchDevicePathName86, rchDevicePathName87, rchDevicePathName88, rchDevicePathName89, rchDevicePathName90, rchDevicePathName91, rchDevicePathName92, rchDevicePathName93, rchDevicePathName94, rchDevicePathName95, rchDevicePathName96, rchDevicePathName97, rchDevicePathName98, rchDevicePathName99, rchDevicePathName100, rchDevicePathName101, rchDevicePathName102, rchDevicePathName103, rchDevicePathName104, rchDevicePathName105, rchDevicePathName106, rchDevicePathName107, rchDevicePathName108, rchDevicePathName109, rchDevicePathName110, rchDevicePathName111, rchDevicePathName112, rchDevicePathName113, rchDevicePathName114, rchDevicePathName115, rchDevicePathName116, rchDevicePathName117, rchDevicePathName118, rchDevicePathName119, rchDevicePathName120, rchDevicePathName121, rchDevicePathName122, rchDevicePathName123, rchDevicePathName124, rchDevicePathName125, rchDevicePathName126, rchDevicePathName127; - public string rchDevicePathName + get { - get - { - return new string(new char[] { + return new string(new char[] { (char)rchDevicePathName0, (char)rchDevicePathName1, (char)rchDevicePathName2, @@ -7372,14 +7370,14 @@ namespace Valve.VR (char)rchDevicePathName126, (char)rchDevicePathName127 }).TrimEnd('\0'); - } } - public byte rchInputPathName0, rchInputPathName1, rchInputPathName2, rchInputPathName3, rchInputPathName4, rchInputPathName5, rchInputPathName6, rchInputPathName7, rchInputPathName8, rchInputPathName9, rchInputPathName10, rchInputPathName11, rchInputPathName12, rchInputPathName13, rchInputPathName14, rchInputPathName15, rchInputPathName16, rchInputPathName17, rchInputPathName18, rchInputPathName19, rchInputPathName20, rchInputPathName21, rchInputPathName22, rchInputPathName23, rchInputPathName24, rchInputPathName25, rchInputPathName26, rchInputPathName27, rchInputPathName28, rchInputPathName29, rchInputPathName30, rchInputPathName31, rchInputPathName32, rchInputPathName33, rchInputPathName34, rchInputPathName35, rchInputPathName36, rchInputPathName37, rchInputPathName38, rchInputPathName39, rchInputPathName40, rchInputPathName41, rchInputPathName42, rchInputPathName43, rchInputPathName44, rchInputPathName45, rchInputPathName46, rchInputPathName47, rchInputPathName48, rchInputPathName49, rchInputPathName50, rchInputPathName51, rchInputPathName52, rchInputPathName53, rchInputPathName54, rchInputPathName55, rchInputPathName56, rchInputPathName57, rchInputPathName58, rchInputPathName59, rchInputPathName60, rchInputPathName61, rchInputPathName62, rchInputPathName63, rchInputPathName64, rchInputPathName65, rchInputPathName66, rchInputPathName67, rchInputPathName68, rchInputPathName69, rchInputPathName70, rchInputPathName71, rchInputPathName72, rchInputPathName73, rchInputPathName74, rchInputPathName75, rchInputPathName76, rchInputPathName77, rchInputPathName78, rchInputPathName79, rchInputPathName80, rchInputPathName81, rchInputPathName82, rchInputPathName83, rchInputPathName84, rchInputPathName85, rchInputPathName86, rchInputPathName87, rchInputPathName88, rchInputPathName89, rchInputPathName90, rchInputPathName91, rchInputPathName92, rchInputPathName93, rchInputPathName94, rchInputPathName95, rchInputPathName96, rchInputPathName97, rchInputPathName98, rchInputPathName99, rchInputPathName100, rchInputPathName101, rchInputPathName102, rchInputPathName103, rchInputPathName104, rchInputPathName105, rchInputPathName106, rchInputPathName107, rchInputPathName108, rchInputPathName109, rchInputPathName110, rchInputPathName111, rchInputPathName112, rchInputPathName113, rchInputPathName114, rchInputPathName115, rchInputPathName116, rchInputPathName117, rchInputPathName118, rchInputPathName119, rchInputPathName120, rchInputPathName121, rchInputPathName122, rchInputPathName123, rchInputPathName124, rchInputPathName125, rchInputPathName126, rchInputPathName127; - public string rchInputPathName + } + public byte rchInputPathName0,rchInputPathName1,rchInputPathName2,rchInputPathName3,rchInputPathName4,rchInputPathName5,rchInputPathName6,rchInputPathName7,rchInputPathName8,rchInputPathName9,rchInputPathName10,rchInputPathName11,rchInputPathName12,rchInputPathName13,rchInputPathName14,rchInputPathName15,rchInputPathName16,rchInputPathName17,rchInputPathName18,rchInputPathName19,rchInputPathName20,rchInputPathName21,rchInputPathName22,rchInputPathName23,rchInputPathName24,rchInputPathName25,rchInputPathName26,rchInputPathName27,rchInputPathName28,rchInputPathName29,rchInputPathName30,rchInputPathName31,rchInputPathName32,rchInputPathName33,rchInputPathName34,rchInputPathName35,rchInputPathName36,rchInputPathName37,rchInputPathName38,rchInputPathName39,rchInputPathName40,rchInputPathName41,rchInputPathName42,rchInputPathName43,rchInputPathName44,rchInputPathName45,rchInputPathName46,rchInputPathName47,rchInputPathName48,rchInputPathName49,rchInputPathName50,rchInputPathName51,rchInputPathName52,rchInputPathName53,rchInputPathName54,rchInputPathName55,rchInputPathName56,rchInputPathName57,rchInputPathName58,rchInputPathName59,rchInputPathName60,rchInputPathName61,rchInputPathName62,rchInputPathName63,rchInputPathName64,rchInputPathName65,rchInputPathName66,rchInputPathName67,rchInputPathName68,rchInputPathName69,rchInputPathName70,rchInputPathName71,rchInputPathName72,rchInputPathName73,rchInputPathName74,rchInputPathName75,rchInputPathName76,rchInputPathName77,rchInputPathName78,rchInputPathName79,rchInputPathName80,rchInputPathName81,rchInputPathName82,rchInputPathName83,rchInputPathName84,rchInputPathName85,rchInputPathName86,rchInputPathName87,rchInputPathName88,rchInputPathName89,rchInputPathName90,rchInputPathName91,rchInputPathName92,rchInputPathName93,rchInputPathName94,rchInputPathName95,rchInputPathName96,rchInputPathName97,rchInputPathName98,rchInputPathName99,rchInputPathName100,rchInputPathName101,rchInputPathName102,rchInputPathName103,rchInputPathName104,rchInputPathName105,rchInputPathName106,rchInputPathName107,rchInputPathName108,rchInputPathName109,rchInputPathName110,rchInputPathName111,rchInputPathName112,rchInputPathName113,rchInputPathName114,rchInputPathName115,rchInputPathName116,rchInputPathName117,rchInputPathName118,rchInputPathName119,rchInputPathName120,rchInputPathName121,rchInputPathName122,rchInputPathName123,rchInputPathName124,rchInputPathName125,rchInputPathName126,rchInputPathName127; + public string rchInputPathName + { + get { - get - { - return new string(new char[] { + return new string(new char[] { (char)rchInputPathName0, (char)rchInputPathName1, (char)rchInputPathName2, @@ -7509,14 +7507,14 @@ namespace Valve.VR (char)rchInputPathName126, (char)rchInputPathName127 }).TrimEnd('\0'); - } } - public byte rchModeName0, rchModeName1, rchModeName2, rchModeName3, rchModeName4, rchModeName5, rchModeName6, rchModeName7, rchModeName8, rchModeName9, rchModeName10, rchModeName11, rchModeName12, rchModeName13, rchModeName14, rchModeName15, rchModeName16, rchModeName17, rchModeName18, rchModeName19, rchModeName20, rchModeName21, rchModeName22, rchModeName23, rchModeName24, rchModeName25, rchModeName26, rchModeName27, rchModeName28, rchModeName29, rchModeName30, rchModeName31, rchModeName32, rchModeName33, rchModeName34, rchModeName35, rchModeName36, rchModeName37, rchModeName38, rchModeName39, rchModeName40, rchModeName41, rchModeName42, rchModeName43, rchModeName44, rchModeName45, rchModeName46, rchModeName47, rchModeName48, rchModeName49, rchModeName50, rchModeName51, rchModeName52, rchModeName53, rchModeName54, rchModeName55, rchModeName56, rchModeName57, rchModeName58, rchModeName59, rchModeName60, rchModeName61, rchModeName62, rchModeName63, rchModeName64, rchModeName65, rchModeName66, rchModeName67, rchModeName68, rchModeName69, rchModeName70, rchModeName71, rchModeName72, rchModeName73, rchModeName74, rchModeName75, rchModeName76, rchModeName77, rchModeName78, rchModeName79, rchModeName80, rchModeName81, rchModeName82, rchModeName83, rchModeName84, rchModeName85, rchModeName86, rchModeName87, rchModeName88, rchModeName89, rchModeName90, rchModeName91, rchModeName92, rchModeName93, rchModeName94, rchModeName95, rchModeName96, rchModeName97, rchModeName98, rchModeName99, rchModeName100, rchModeName101, rchModeName102, rchModeName103, rchModeName104, rchModeName105, rchModeName106, rchModeName107, rchModeName108, rchModeName109, rchModeName110, rchModeName111, rchModeName112, rchModeName113, rchModeName114, rchModeName115, rchModeName116, rchModeName117, rchModeName118, rchModeName119, rchModeName120, rchModeName121, rchModeName122, rchModeName123, rchModeName124, rchModeName125, rchModeName126, rchModeName127; - public string rchModeName + } + public byte rchModeName0,rchModeName1,rchModeName2,rchModeName3,rchModeName4,rchModeName5,rchModeName6,rchModeName7,rchModeName8,rchModeName9,rchModeName10,rchModeName11,rchModeName12,rchModeName13,rchModeName14,rchModeName15,rchModeName16,rchModeName17,rchModeName18,rchModeName19,rchModeName20,rchModeName21,rchModeName22,rchModeName23,rchModeName24,rchModeName25,rchModeName26,rchModeName27,rchModeName28,rchModeName29,rchModeName30,rchModeName31,rchModeName32,rchModeName33,rchModeName34,rchModeName35,rchModeName36,rchModeName37,rchModeName38,rchModeName39,rchModeName40,rchModeName41,rchModeName42,rchModeName43,rchModeName44,rchModeName45,rchModeName46,rchModeName47,rchModeName48,rchModeName49,rchModeName50,rchModeName51,rchModeName52,rchModeName53,rchModeName54,rchModeName55,rchModeName56,rchModeName57,rchModeName58,rchModeName59,rchModeName60,rchModeName61,rchModeName62,rchModeName63,rchModeName64,rchModeName65,rchModeName66,rchModeName67,rchModeName68,rchModeName69,rchModeName70,rchModeName71,rchModeName72,rchModeName73,rchModeName74,rchModeName75,rchModeName76,rchModeName77,rchModeName78,rchModeName79,rchModeName80,rchModeName81,rchModeName82,rchModeName83,rchModeName84,rchModeName85,rchModeName86,rchModeName87,rchModeName88,rchModeName89,rchModeName90,rchModeName91,rchModeName92,rchModeName93,rchModeName94,rchModeName95,rchModeName96,rchModeName97,rchModeName98,rchModeName99,rchModeName100,rchModeName101,rchModeName102,rchModeName103,rchModeName104,rchModeName105,rchModeName106,rchModeName107,rchModeName108,rchModeName109,rchModeName110,rchModeName111,rchModeName112,rchModeName113,rchModeName114,rchModeName115,rchModeName116,rchModeName117,rchModeName118,rchModeName119,rchModeName120,rchModeName121,rchModeName122,rchModeName123,rchModeName124,rchModeName125,rchModeName126,rchModeName127; + public string rchModeName + { + get { - get - { - return new string(new char[] { + return new string(new char[] { (char)rchModeName0, (char)rchModeName1, (char)rchModeName2, @@ -7646,14 +7644,14 @@ namespace Valve.VR (char)rchModeName126, (char)rchModeName127 }).TrimEnd('\0'); - } } - public byte rchSlotName0, rchSlotName1, rchSlotName2, rchSlotName3, rchSlotName4, rchSlotName5, rchSlotName6, rchSlotName7, rchSlotName8, rchSlotName9, rchSlotName10, rchSlotName11, rchSlotName12, rchSlotName13, rchSlotName14, rchSlotName15, rchSlotName16, rchSlotName17, rchSlotName18, rchSlotName19, rchSlotName20, rchSlotName21, rchSlotName22, rchSlotName23, rchSlotName24, rchSlotName25, rchSlotName26, rchSlotName27, rchSlotName28, rchSlotName29, rchSlotName30, rchSlotName31, rchSlotName32, rchSlotName33, rchSlotName34, rchSlotName35, rchSlotName36, rchSlotName37, rchSlotName38, rchSlotName39, rchSlotName40, rchSlotName41, rchSlotName42, rchSlotName43, rchSlotName44, rchSlotName45, rchSlotName46, rchSlotName47, rchSlotName48, rchSlotName49, rchSlotName50, rchSlotName51, rchSlotName52, rchSlotName53, rchSlotName54, rchSlotName55, rchSlotName56, rchSlotName57, rchSlotName58, rchSlotName59, rchSlotName60, rchSlotName61, rchSlotName62, rchSlotName63, rchSlotName64, rchSlotName65, rchSlotName66, rchSlotName67, rchSlotName68, rchSlotName69, rchSlotName70, rchSlotName71, rchSlotName72, rchSlotName73, rchSlotName74, rchSlotName75, rchSlotName76, rchSlotName77, rchSlotName78, rchSlotName79, rchSlotName80, rchSlotName81, rchSlotName82, rchSlotName83, rchSlotName84, rchSlotName85, rchSlotName86, rchSlotName87, rchSlotName88, rchSlotName89, rchSlotName90, rchSlotName91, rchSlotName92, rchSlotName93, rchSlotName94, rchSlotName95, rchSlotName96, rchSlotName97, rchSlotName98, rchSlotName99, rchSlotName100, rchSlotName101, rchSlotName102, rchSlotName103, rchSlotName104, rchSlotName105, rchSlotName106, rchSlotName107, rchSlotName108, rchSlotName109, rchSlotName110, rchSlotName111, rchSlotName112, rchSlotName113, rchSlotName114, rchSlotName115, rchSlotName116, rchSlotName117, rchSlotName118, rchSlotName119, rchSlotName120, rchSlotName121, rchSlotName122, rchSlotName123, rchSlotName124, rchSlotName125, rchSlotName126, rchSlotName127; - public string rchSlotName + } + public byte rchSlotName0,rchSlotName1,rchSlotName2,rchSlotName3,rchSlotName4,rchSlotName5,rchSlotName6,rchSlotName7,rchSlotName8,rchSlotName9,rchSlotName10,rchSlotName11,rchSlotName12,rchSlotName13,rchSlotName14,rchSlotName15,rchSlotName16,rchSlotName17,rchSlotName18,rchSlotName19,rchSlotName20,rchSlotName21,rchSlotName22,rchSlotName23,rchSlotName24,rchSlotName25,rchSlotName26,rchSlotName27,rchSlotName28,rchSlotName29,rchSlotName30,rchSlotName31,rchSlotName32,rchSlotName33,rchSlotName34,rchSlotName35,rchSlotName36,rchSlotName37,rchSlotName38,rchSlotName39,rchSlotName40,rchSlotName41,rchSlotName42,rchSlotName43,rchSlotName44,rchSlotName45,rchSlotName46,rchSlotName47,rchSlotName48,rchSlotName49,rchSlotName50,rchSlotName51,rchSlotName52,rchSlotName53,rchSlotName54,rchSlotName55,rchSlotName56,rchSlotName57,rchSlotName58,rchSlotName59,rchSlotName60,rchSlotName61,rchSlotName62,rchSlotName63,rchSlotName64,rchSlotName65,rchSlotName66,rchSlotName67,rchSlotName68,rchSlotName69,rchSlotName70,rchSlotName71,rchSlotName72,rchSlotName73,rchSlotName74,rchSlotName75,rchSlotName76,rchSlotName77,rchSlotName78,rchSlotName79,rchSlotName80,rchSlotName81,rchSlotName82,rchSlotName83,rchSlotName84,rchSlotName85,rchSlotName86,rchSlotName87,rchSlotName88,rchSlotName89,rchSlotName90,rchSlotName91,rchSlotName92,rchSlotName93,rchSlotName94,rchSlotName95,rchSlotName96,rchSlotName97,rchSlotName98,rchSlotName99,rchSlotName100,rchSlotName101,rchSlotName102,rchSlotName103,rchSlotName104,rchSlotName105,rchSlotName106,rchSlotName107,rchSlotName108,rchSlotName109,rchSlotName110,rchSlotName111,rchSlotName112,rchSlotName113,rchSlotName114,rchSlotName115,rchSlotName116,rchSlotName117,rchSlotName118,rchSlotName119,rchSlotName120,rchSlotName121,rchSlotName122,rchSlotName123,rchSlotName124,rchSlotName125,rchSlotName126,rchSlotName127; + public string rchSlotName + { + get { - get - { - return new string(new char[] { + return new string(new char[] { (char)rchSlotName0, (char)rchSlotName1, (char)rchSlotName2, @@ -7783,14 +7781,14 @@ namespace Valve.VR (char)rchSlotName126, (char)rchSlotName127 }).TrimEnd('\0'); - } } - public byte rchInputSourceType0, rchInputSourceType1, rchInputSourceType2, rchInputSourceType3, rchInputSourceType4, rchInputSourceType5, rchInputSourceType6, rchInputSourceType7, rchInputSourceType8, rchInputSourceType9, rchInputSourceType10, rchInputSourceType11, rchInputSourceType12, rchInputSourceType13, rchInputSourceType14, rchInputSourceType15, rchInputSourceType16, rchInputSourceType17, rchInputSourceType18, rchInputSourceType19, rchInputSourceType20, rchInputSourceType21, rchInputSourceType22, rchInputSourceType23, rchInputSourceType24, rchInputSourceType25, rchInputSourceType26, rchInputSourceType27, rchInputSourceType28, rchInputSourceType29, rchInputSourceType30, rchInputSourceType31; - public string rchInputSourceType + } + public byte rchInputSourceType0,rchInputSourceType1,rchInputSourceType2,rchInputSourceType3,rchInputSourceType4,rchInputSourceType5,rchInputSourceType6,rchInputSourceType7,rchInputSourceType8,rchInputSourceType9,rchInputSourceType10,rchInputSourceType11,rchInputSourceType12,rchInputSourceType13,rchInputSourceType14,rchInputSourceType15,rchInputSourceType16,rchInputSourceType17,rchInputSourceType18,rchInputSourceType19,rchInputSourceType20,rchInputSourceType21,rchInputSourceType22,rchInputSourceType23,rchInputSourceType24,rchInputSourceType25,rchInputSourceType26,rchInputSourceType27,rchInputSourceType28,rchInputSourceType29,rchInputSourceType30,rchInputSourceType31; + public string rchInputSourceType + { + get { - get - { - return new string(new char[] { + return new string(new char[] { (char)rchInputSourceType0, (char)rchInputSourceType1, (char)rchInputSourceType2, @@ -7824,908 +7822,911 @@ namespace Valve.VR (char)rchInputSourceType30, (char)rchInputSourceType31 }).TrimEnd('\0'); - } } } - [StructLayout(LayoutKind.Sequential)] - public struct VRActiveActionSet_t +} +[StructLayout(LayoutKind.Sequential)] public struct VRActiveActionSet_t +{ + public ulong ulActionSet; + public ulong ulRestrictedToDevice; + public ulong ulSecondaryActionSet; + public uint unPadding; + public int nPriority; +} +[StructLayout(LayoutKind.Sequential)] public struct VRSkeletalSummaryData_t +{ + public float flFingerCurl0; //float[5] + public float flFingerCurl1; + public float flFingerCurl2; + public float flFingerCurl3; + public float flFingerCurl4; + public float flFingerSplay0; //float[4] + public float flFingerSplay1; + public float flFingerSplay2; + public float flFingerSplay3; +} +[StructLayout(LayoutKind.Sequential)] public struct SpatialAnchorPose_t +{ + public HmdMatrix34_t mAnchorToAbsoluteTracking; +} +[StructLayout(LayoutKind.Sequential)] public struct COpenVRContext +{ + public IntPtr m_pVRSystem; // class vr::IVRSystem * + public IntPtr m_pVRChaperone; // class vr::IVRChaperone * + public IntPtr m_pVRChaperoneSetup; // class vr::IVRChaperoneSetup * + public IntPtr m_pVRCompositor; // class vr::IVRCompositor * + public IntPtr m_pVRHeadsetView; // class vr::IVRHeadsetView * + public IntPtr m_pVROverlay; // class vr::IVROverlay * + public IntPtr m_pVROverlayView; // class vr::IVROverlayView * + public IntPtr m_pVRResources; // class vr::IVRResources * + public IntPtr m_pVRRenderModels; // class vr::IVRRenderModels * + public IntPtr m_pVRExtendedDisplay; // class vr::IVRExtendedDisplay * + public IntPtr m_pVRSettings; // class vr::IVRSettings * + public IntPtr m_pVRApplications; // class vr::IVRApplications * + public IntPtr m_pVRTrackedCamera; // class vr::IVRTrackedCamera * + public IntPtr m_pVRScreenshots; // class vr::IVRScreenshots * + public IntPtr m_pVRDriverManager; // class vr::IVRDriverManager * + public IntPtr m_pVRInput; // class vr::IVRInput * + public IntPtr m_pVRIOBuffer; // class vr::IVRIOBuffer * + public IntPtr m_pVRSpatialAnchors; // class vr::IVRSpatialAnchors * + public IntPtr m_pVRDebug; // class vr::IVRDebug * + public IntPtr m_pVRNotifications; // class vr::IVRNotifications * + public IntPtr m_pVRIPCResourceManagerClient; // class vr::IVRIPCResourceManagerClient * +} +[StructLayout(LayoutKind.Sequential)] public struct PropertyWrite_t +{ + public ETrackedDeviceProperty prop; + public EPropertyWriteType writeType; + public ETrackedPropertyError eSetError; + public IntPtr pvBuffer; // void * + public uint unBufferSize; + public uint unTag; + public ETrackedPropertyError eError; +} +[StructLayout(LayoutKind.Sequential)] public struct PropertyRead_t +{ + public ETrackedDeviceProperty prop; + public IntPtr pvBuffer; // void * + public uint unBufferSize; + public uint unTag; + public uint unRequiredBufferSize; + public ETrackedPropertyError eError; +} +[StructLayout(LayoutKind.Sequential)] public struct CVRPropertyHelpers +{ + public IntPtr m_pProperties; // class vr::IVRProperties * +} +[StructLayout(LayoutKind.Sequential)] public struct PathWrite_t +{ + public ulong ulPath; + public EPropertyWriteType writeType; + public ETrackedPropertyError eSetError; + public IntPtr pvBuffer; // void * + public uint unBufferSize; + public uint unTag; + public ETrackedPropertyError eError; + public IntPtr pszPath; // const char * +} +[StructLayout(LayoutKind.Sequential)] public struct PathRead_t +{ + public ulong ulPath; + public IntPtr pvBuffer; // void * + public uint unBufferSize; + public uint unTag; + public uint unRequiredBufferSize; + public ETrackedPropertyError eError; + public IntPtr pszPath; // const char * +} + +public class OpenVR +{ + + public static uint InitInternal(ref EVRInitError peError, EVRApplicationType eApplicationType) { - public ulong ulActionSet; - public ulong ulRestrictedToDevice; - public ulong ulSecondaryActionSet; - public uint unPadding; - public int nPriority; - } - [StructLayout(LayoutKind.Sequential)] - public struct VRSkeletalSummaryData_t - { - public float flFingerCurl0; //float[5] - public float flFingerCurl1; - public float flFingerCurl2; - public float flFingerCurl3; - public float flFingerCurl4; - public float flFingerSplay0; //float[4] - public float flFingerSplay1; - public float flFingerSplay2; - public float flFingerSplay3; - } - [StructLayout(LayoutKind.Sequential)] - public struct SpatialAnchorPose_t - { - public HmdMatrix34_t mAnchorToAbsoluteTracking; - } - [StructLayout(LayoutKind.Sequential)] - public struct COpenVRContext - { - public IntPtr m_pVRSystem; // class vr::IVRSystem * - public IntPtr m_pVRChaperone; // class vr::IVRChaperone * - public IntPtr m_pVRChaperoneSetup; // class vr::IVRChaperoneSetup * - public IntPtr m_pVRCompositor; // class vr::IVRCompositor * - public IntPtr m_pVRHeadsetView; // class vr::IVRHeadsetView * - public IntPtr m_pVROverlay; // class vr::IVROverlay * - public IntPtr m_pVROverlayView; // class vr::IVROverlayView * - public IntPtr m_pVRResources; // class vr::IVRResources * - public IntPtr m_pVRRenderModels; // class vr::IVRRenderModels * - public IntPtr m_pVRExtendedDisplay; // class vr::IVRExtendedDisplay * - public IntPtr m_pVRSettings; // class vr::IVRSettings * - public IntPtr m_pVRApplications; // class vr::IVRApplications * - public IntPtr m_pVRTrackedCamera; // class vr::IVRTrackedCamera * - public IntPtr m_pVRScreenshots; // class vr::IVRScreenshots * - public IntPtr m_pVRDriverManager; // class vr::IVRDriverManager * - public IntPtr m_pVRInput; // class vr::IVRInput * - public IntPtr m_pVRIOBuffer; // class vr::IVRIOBuffer * - public IntPtr m_pVRSpatialAnchors; // class vr::IVRSpatialAnchors * - public IntPtr m_pVRDebug; // class vr::IVRDebug * - public IntPtr m_pVRNotifications; // class vr::IVRNotifications * - public IntPtr m_pVRIPCResourceManagerClient; // class vr::IVRIPCResourceManagerClient * - } - [StructLayout(LayoutKind.Sequential)] - public struct PropertyWrite_t - { - public ETrackedDeviceProperty prop; - public EPropertyWriteType writeType; - public ETrackedPropertyError eSetError; - public IntPtr pvBuffer; // void * - public uint unBufferSize; - public uint unTag; - public ETrackedPropertyError eError; - } - [StructLayout(LayoutKind.Sequential)] - public struct PropertyRead_t - { - public ETrackedDeviceProperty prop; - public IntPtr pvBuffer; // void * - public uint unBufferSize; - public uint unTag; - public uint unRequiredBufferSize; - public ETrackedPropertyError eError; - } - [StructLayout(LayoutKind.Sequential)] - public struct CVRPropertyHelpers - { - public IntPtr m_pProperties; // class vr::IVRProperties * - } - [StructLayout(LayoutKind.Sequential)] - public struct PathWrite_t - { - public ulong ulPath; - public EPropertyWriteType writeType; - public ETrackedPropertyError eSetError; - public IntPtr pvBuffer; // void * - public uint unBufferSize; - public uint unTag; - public ETrackedPropertyError eError; - public IntPtr pszPath; // const char * - } - [StructLayout(LayoutKind.Sequential)] - public struct PathRead_t - { - public ulong ulPath; - public IntPtr pvBuffer; // void * - public uint unBufferSize; - public uint unTag; - public uint unRequiredBufferSize; - public ETrackedPropertyError eError; - public IntPtr pszPath; // const char * + return OpenVRInterop.InitInternal(ref peError, eApplicationType); } - public class OpenVR + public static uint InitInternal2(ref EVRInitError peError, EVRApplicationType eApplicationType, string pchStartupInfo) { + return OpenVRInterop.InitInternal2(ref peError, eApplicationType, pchStartupInfo); + } - public static uint InitInternal(ref EVRInitError peError, EVRApplicationType eApplicationType) + public static void ShutdownInternal() + { + OpenVRInterop.ShutdownInternal(); + } + + public static bool IsHmdPresent() + { + return OpenVRInterop.IsHmdPresent(); + } + + public static bool IsRuntimeInstalled() + { + return OpenVRInterop.IsRuntimeInstalled(); + } + + public static string RuntimePath() + { + try { - return OpenVRInterop.InitInternal(ref peError, eApplicationType); - } - - public static uint InitInternal2(ref EVRInitError peError, EVRApplicationType eApplicationType, string pchStartupInfo) - { - return OpenVRInterop.InitInternal2(ref peError, eApplicationType, pchStartupInfo); - } - - public static void ShutdownInternal() - { - OpenVRInterop.ShutdownInternal(); - } - - public static bool IsHmdPresent() - { - return OpenVRInterop.IsHmdPresent(); - } - - public static bool IsRuntimeInstalled() - { - return OpenVRInterop.IsRuntimeInstalled(); - } - - public static string RuntimePath() - { - try + uint pathSize = 512; + uint requiredPathSize = 512; + System.Text.StringBuilder path = new System.Text.StringBuilder((int)pathSize); + bool success = OpenVRInterop.GetRuntimePath(path, pathSize, ref requiredPathSize); + if (success == false) { - uint pathSize = 512; - uint requiredPathSize = 512; - System.Text.StringBuilder path = new System.Text.StringBuilder((int)pathSize); - bool success = OpenVRInterop.GetRuntimePath(path, pathSize, ref requiredPathSize); - if (success == false) - { - return null; - } - - return path.ToString(); - } - catch - { - return OpenVRInterop.RuntimePath(); //this api is deprecated but here to support older unity versions - } - } - - public static string GetStringForHmdError(EVRInitError error) - { - return Marshal.PtrToStringAnsi(OpenVRInterop.GetStringForHmdError(error)); - } - - public static IntPtr GetGenericInterface(string pchInterfaceVersion, ref EVRInitError peError) - { - return OpenVRInterop.GetGenericInterface(pchInterfaceVersion, ref peError); - } - - public static bool IsInterfaceVersionValid(string pchInterfaceVersion) - { - return OpenVRInterop.IsInterfaceVersionValid(pchInterfaceVersion); - } - - public static uint GetInitToken() - { - return OpenVRInterop.GetInitToken(); - } - - public const uint MaxDmabufPlaneCount = 4; - public const uint k_nDriverNone = 4294967295; - public const uint k_unMaxDriverDebugResponseSize = 32768; - public const uint k_unTrackedDeviceIndex_Hmd = 0; - public const uint k_unMaxTrackedDeviceCount = 64; - public const uint k_unTrackedDeviceIndexOther = 4294967294; - public const uint k_unTrackedDeviceIndexInvalid = 4294967295; - public const ulong k_ulInvalidPropertyContainer = 0; - public const uint k_unInvalidPropertyTag = 0; - public const ulong k_ulInvalidDriverHandle = 0; - public const uint k_unFloatPropertyTag = 1; - public const uint k_unInt32PropertyTag = 2; - public const uint k_unUint64PropertyTag = 3; - public const uint k_unBoolPropertyTag = 4; - public const uint k_unStringPropertyTag = 5; - public const uint k_unErrorPropertyTag = 6; - public const uint k_unDoublePropertyTag = 7; - public const uint k_unHmdMatrix34PropertyTag = 20; - public const uint k_unHmdMatrix44PropertyTag = 21; - public const uint k_unHmdVector3PropertyTag = 22; - public const uint k_unHmdVector4PropertyTag = 23; - public const uint k_unHmdVector2PropertyTag = 24; - public const uint k_unHmdQuadPropertyTag = 25; - public const uint k_unHiddenAreaPropertyTag = 30; - public const uint k_unPathHandleInfoTag = 31; - public const uint k_unActionPropertyTag = 32; - public const uint k_unInputValuePropertyTag = 33; - public const uint k_unWildcardPropertyTag = 34; - public const uint k_unHapticVibrationPropertyTag = 35; - public const uint k_unSkeletonPropertyTag = 36; - public const uint k_unSpatialAnchorPosePropertyTag = 40; - public const uint k_unJsonPropertyTag = 41; - public const uint k_unActiveActionSetPropertyTag = 42; - public const uint k_unOpenVRInternalReserved_Start = 1000; - public const uint k_unOpenVRInternalReserved_End = 10000; - public const uint k_unMaxPropertyStringSize = 32768; - public const ulong k_ulInvalidActionHandle = 0; - public const ulong k_ulInvalidActionSetHandle = 0; - public const ulong k_ulInvalidInputValueHandle = 0; - public const uint k_unControllerStateAxisCount = 5; - public const ulong k_ulOverlayHandleInvalid = 0; - public const uint k_unMaxDistortionFunctionParameters = 8; - public const uint k_unScreenshotHandleInvalid = 0; - public const string IVRSystem_Version = "IVRSystem_022"; - public const string IVRExtendedDisplay_Version = "IVRExtendedDisplay_001"; - public const string IVRTrackedCamera_Version = "IVRTrackedCamera_006"; - public const uint k_unMaxApplicationKeyLength = 128; - public const string k_pch_MimeType_HomeApp = "vr/home"; - public const string k_pch_MimeType_GameTheater = "vr/game_theater"; - public const string IVRApplications_Version = "IVRApplications_007"; - public const string IVRChaperone_Version = "IVRChaperone_004"; - public const string IVRChaperoneSetup_Version = "IVRChaperoneSetup_006"; - public const string IVRCompositor_Version = "IVRCompositor_028"; - public const uint k_unVROverlayMaxKeyLength = 128; - public const uint k_unVROverlayMaxNameLength = 128; - public const uint k_unMaxOverlayCount = 128; - public const uint k_unMaxOverlayIntersectionMaskPrimitivesCount = 32; - public const string IVROverlay_Version = "IVROverlay_028"; - public const string IVROverlayView_Version = "IVROverlayView_003"; - public const uint k_unHeadsetViewMaxWidth = 3840; - public const uint k_unHeadsetViewMaxHeight = 2160; - public const string k_pchHeadsetViewOverlayKey = "system.HeadsetView"; - public const string IVRHeadsetView_Version = "IVRHeadsetView_001"; - public const string k_pch_Controller_Component_GDC2015 = "gdc2015"; - public const string k_pch_Controller_Component_Base = "base"; - public const string k_pch_Controller_Component_Tip = "tip"; - public const string k_pch_Controller_Component_OpenXR_Aim = "openxr_aim"; - public const string k_pch_Controller_Component_HandGrip = "handgrip"; - public const string k_pch_Controller_Component_OpenXR_Grip = "openxr_grip"; - public const string k_pch_Controller_Component_OpenXR_HandModel = "openxr_handmodel"; - public const string k_pch_Controller_Component_Status = "status"; - public const string IVRRenderModels_Version = "IVRRenderModels_006"; - public const uint k_unNotificationTextMaxSize = 256; - public const string IVRNotifications_Version = "IVRNotifications_002"; - public const uint k_unMaxSettingsKeyLength = 128; - public const string IVRSettings_Version = "IVRSettings_003"; - public const string k_pch_SteamVR_Section = "steamvr"; - public const string k_pch_SteamVR_RequireHmd_String = "requireHmd"; - public const string k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver"; - public const string k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd"; - public const string k_pch_SteamVR_DisplayDebug_Bool = "displayDebug"; - public const string k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe"; - public const string k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX"; - public const string k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY"; - public const string k_pch_SteamVR_SendSystemButtonToAllApps_Bool = "sendSystemButtonToAllApps"; - public const string k_pch_SteamVR_LogLevel_Int32 = "loglevel"; - public const string k_pch_SteamVR_IPD_Float = "ipd"; - public const string k_pch_SteamVR_Background_String = "background"; - public const string k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection"; - public const string k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight"; - public const string k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius"; - public const string k_pch_SteamVR_GridColor_String = "gridColor"; - public const string k_pch_SteamVR_PlayAreaColor_String = "playAreaColor"; - public const string k_pch_SteamVR_TrackingLossColor_String = "trackingLossColor"; - public const string k_pch_SteamVR_ShowStage_Bool = "showStage"; - public const string k_pch_SteamVR_DrawTrackingReferences_Bool = "drawTrackingReferences"; - public const string k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers"; - public const string k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers"; - public const string k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees"; - public const string k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement"; - public const string k_pch_SteamVR_ShowBaseStationPowerManagementTip_Int32 = "ShowBaseStationPowerManagementTip"; - public const string k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses"; - public const string k_pch_SteamVR_SupersampleScale_Float = "supersampleScale"; - public const string k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution"; - public const string k_pch_SteamVR_MotionSmoothing_Bool = "motionSmoothing"; - public const string k_pch_SteamVR_MotionSmoothingOverride_Int32 = "motionSmoothingOverride"; - public const string k_pch_SteamVR_FramesToThrottle_Int32 = "framesToThrottle"; - public const string k_pch_SteamVR_AdditionalFramesToPredict_Int32 = "additionalFramesToPredict"; - public const string k_pch_SteamVR_WorldScale_Float = "worldScale"; - public const string k_pch_SteamVR_FovScale_Int32 = "fovScale"; - public const string k_pch_SteamVR_FovScaleLetterboxed_Bool = "fovScaleLetterboxed"; - public const string k_pch_SteamVR_DisableAsyncReprojection_Bool = "disableAsync"; - public const string k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking"; - public const string k_pch_SteamVR_DefaultMirrorView_Int32 = "mirrorView"; - public const string k_pch_SteamVR_ShowLegacyMirrorView_Bool = "showLegacyMirrorView"; - public const string k_pch_SteamVR_MirrorViewVisibility_Bool = "showMirrorView"; - public const string k_pch_SteamVR_MirrorViewDisplayMode_Int32 = "mirrorViewDisplayMode"; - public const string k_pch_SteamVR_MirrorViewEye_Int32 = "mirrorViewEye"; - public const string k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry"; - public const string k_pch_SteamVR_MirrorViewGeometryMaximized_String = "mirrorViewGeometryMaximized"; - public const string k_pch_SteamVR_PerfGraphVisibility_Bool = "showPerfGraph"; - public const string k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch"; - public const string k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch"; - public const string k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch"; - public const string k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard"; - public const string k_pch_SteamVR_EnableHomeApp = "enableHomeApp"; - public const string k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec"; - public const string k_pch_SteamVR_RetailDemo_Bool = "retailDemo"; - public const string k_pch_SteamVR_IpdOffset_Float = "ipdOffset"; - public const string k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering"; - public const string k_pch_SteamVR_SupersampleManualOverride_Bool = "supersampleManualOverride"; - public const string k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync"; - public const string k_pch_SteamVR_AllowDisplayLockedMode_Bool = "allowDisplayLockedMode"; - public const string k_pch_SteamVR_HaveStartedTutorialForNativeChaperoneDriver_Bool = "haveStartedTutorialForNativeChaperoneDriver"; - public const string k_pch_SteamVR_ForceWindows32bitVRMonitor = "forceWindows32BitVRMonitor"; - public const string k_pch_SteamVR_DebugInputBinding = "debugInputBinding"; - public const string k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid"; - public const string k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling"; - public const string k_pch_SteamVR_EnableSafeMode = "enableSafeMode"; - public const string k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate"; - public const string k_pch_SteamVR_LastVersionNotice = "lastVersionNotice"; - public const string k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate"; - public const string k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR"; - public const string k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG"; - public const string k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB"; - public const string k_pch_SteamVR_CustomIconStyle_String = "customIconStyle"; - public const string k_pch_SteamVR_CustomOffIconStyle_String = "customOffIconStyle"; - public const string k_pch_SteamVR_CustomIconForceUpdate_String = "customIconForceUpdate"; - public const string k_pch_SteamVR_AllowGlobalActionSetPriority = "globalActionSetPriority"; - public const string k_pch_SteamVR_OverlayRenderQuality = "overlayRenderQuality_2"; - public const string k_pch_SteamVR_BlockOculusSDKOnOpenVRLaunchOption_Bool = "blockOculusSDKOnOpenVRLaunchOption"; - public const string k_pch_SteamVR_BlockOculusSDKOnAllLaunches_Bool = "blockOculusSDKOnAllLaunches"; - public const string k_pch_SteamVR_HDCPLegacyCompatibility_Bool = "hdcp14legacyCompatibility"; - public const string k_pch_SteamVR_DisplayPortTrainingMode_Int = "displayPortTrainingMode"; - public const string k_pch_SteamVR_UsePrism_Bool = "usePrism"; - public const string k_pch_SteamVR_AllowFallbackMirrorWindowLinux_Bool = "allowFallbackMirrorWindowLinux"; - public const string k_pch_OpenXR_Section = "openxr"; - public const string k_pch_OpenXR_MetaUnityPluginCompatibility_Int32 = "metaUnityPluginCompatibility"; - public const string k_pch_DirectMode_Section = "direct_mode"; - public const string k_pch_DirectMode_Enable_Bool = "enable"; - public const string k_pch_DirectMode_Count_Int32 = "count"; - public const string k_pch_DirectMode_EdidVid_Int32 = "edidVid"; - public const string k_pch_DirectMode_EdidPid_Int32 = "edidPid"; - public const string k_pch_Lighthouse_Section = "driver_lighthouse"; - public const string k_pch_Lighthouse_DisableIMU_Bool = "disableimu"; - public const string k_pch_Lighthouse_DisableIMUExceptHMD_Bool = "disableimuexcepthmd"; - public const string k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation"; - public const string k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug"; - public const string k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation"; - public const string k_pch_Lighthouse_DBHistory_Bool = "dbhistory"; - public const string k_pch_Lighthouse_EnableBluetooth_Bool = "enableBluetooth"; - public const string k_pch_Lighthouse_PowerManagedBaseStations_String = "PowerManagedBaseStations"; - public const string k_pch_Lighthouse_PowerManagedBaseStations2_String = "PowerManagedBaseStations2"; - public const string k_pch_Lighthouse_InactivityTimeoutForBaseStations_Int32 = "InactivityTimeoutForBaseStations"; - public const string k_pch_Lighthouse_EnableImuFallback_Bool = "enableImuFallback"; - public const string k_pch_Null_Section = "driver_null"; - public const string k_pch_Null_SerialNumber_String = "serialNumber"; - public const string k_pch_Null_ModelNumber_String = "modelNumber"; - public const string k_pch_Null_WindowX_Int32 = "windowX"; - public const string k_pch_Null_WindowY_Int32 = "windowY"; - public const string k_pch_Null_WindowWidth_Int32 = "windowWidth"; - public const string k_pch_Null_WindowHeight_Int32 = "windowHeight"; - public const string k_pch_Null_RenderWidth_Int32 = "renderWidth"; - public const string k_pch_Null_RenderHeight_Int32 = "renderHeight"; - public const string k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons"; - public const string k_pch_Null_DisplayFrequency_Float = "displayFrequency"; - public const string k_pch_WindowsMR_Section = "driver_holographic"; - public const string k_pch_UserInterface_Section = "userinterface"; - public const string k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop"; - public const string k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray"; - public const string k_pch_UserInterface_HidePopupsWhenStatusMinimized_Bool = "HidePopupsWhenStatusMinimized"; - public const string k_pch_UserInterface_Screenshots_Bool = "screenshots"; - public const string k_pch_UserInterface_ScreenshotType_Int = "screenshotType"; - public const string k_pch_Notifications_Section = "notifications"; - public const string k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb"; - public const string k_pch_Keyboard_Section = "keyboard"; - public const string k_pch_Keyboard_TutorialCompletions = "TutorialCompletions"; - public const string k_pch_Keyboard_ScaleX = "ScaleX"; - public const string k_pch_Keyboard_ScaleY = "ScaleY"; - public const string k_pch_Keyboard_OffsetLeftX = "OffsetLeftX"; - public const string k_pch_Keyboard_OffsetRightX = "OffsetRightX"; - public const string k_pch_Keyboard_OffsetY = "OffsetY"; - public const string k_pch_Keyboard_Smoothing = "Smoothing"; - public const string k_pch_Perf_Section = "perfcheck"; - public const string k_pch_Perf_PerfGraphInHMD_Bool = "perfGraphInHMD"; - public const string k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore"; - public const string k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit"; - public const string k_pch_Perf_TestData_Float = "perfTestData"; - public const string k_pch_Perf_GPUProfiling_Bool = "GPUProfiling"; - public const string k_pch_Perf_GpuBusMonitoring_Bool = "gpuBusMonitoring"; - public const string k_pch_CollisionBounds_Section = "collisionBounds"; - public const string k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle"; - public const string k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn"; - public const string k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn"; - public const string k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn"; - public const string k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance"; - public const string k_pch_CollisionBounds_WallHeight_Float = "CollisionBoundsWallHeight"; - public const string k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR"; - public const string k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG"; - public const string k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB"; - public const string k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA"; - public const string k_pch_CollisionBounds_EnableDriverImport = "enableDriverBoundsImport"; - public const string k_pch_Camera_Section = "camera"; - public const string k_pch_Camera_EnableCamera_Bool = "enableCamera"; - public const string k_pch_Camera_ShowOnController_Bool = "showOnController"; - public const string k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds"; - public const string k_pch_Camera_RoomView_Int32 = "roomView"; - public const string k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR"; - public const string k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG"; - public const string k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB"; - public const string k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA"; - public const string k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength"; - public const string k_pch_Camera_RoomViewStyle_Int32 = "roomViewStyle"; - public const string k_pch_audio_Section = "audio"; - public const string k_pch_audio_SetOsDefaultPlaybackDevice_Bool = "setOsDefaultPlaybackDevice"; - public const string k_pch_audio_EnablePlaybackDeviceOverride_Bool = "enablePlaybackDeviceOverride"; - public const string k_pch_audio_PlaybackDeviceOverride_String = "playbackDeviceOverride"; - public const string k_pch_audio_PlaybackDeviceOverrideName_String = "playbackDeviceOverrideName"; - public const string k_pch_audio_SetOsDefaultRecordingDevice_Bool = "setOsDefaultRecordingDevice"; - public const string k_pch_audio_EnableRecordingDeviceOverride_Bool = "enableRecordingDeviceOverride"; - public const string k_pch_audio_RecordingDeviceOverride_String = "recordingDeviceOverride"; - public const string k_pch_audio_RecordingDeviceOverrideName_String = "recordingDeviceOverrideName"; - public const string k_pch_audio_EnablePlaybackMirror_Bool = "enablePlaybackMirror"; - public const string k_pch_audio_PlaybackMirrorDevice_String = "playbackMirrorDevice"; - public const string k_pch_audio_PlaybackMirrorDeviceName_String = "playbackMirrorDeviceName"; - public const string k_pch_audio_OldPlaybackMirrorDevice_String = "onPlaybackMirrorDevice"; - public const string k_pch_audio_ActiveMirrorDevice_String = "activePlaybackMirrorDevice"; - public const string k_pch_audio_EnablePlaybackMirrorIndependentVolume_Bool = "enablePlaybackMirrorIndependentVolume"; - public const string k_pch_audio_LastHmdPlaybackDeviceId_String = "lastHmdPlaybackDeviceId"; - public const string k_pch_audio_VIVEHDMIGain = "viveHDMIGain"; - public const string k_pch_audio_DualSpeakerAndJackOutput_Bool = "dualSpeakerAndJackOutput"; - public const string k_pch_audio_MuteMicMonitor_Bool = "muteMicMonitor"; - public const string k_pch_Power_Section = "power"; - public const string k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit"; - public const string k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout"; - public const string k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout"; - public const string k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout"; - public const string k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress"; - public const string k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby"; - public const string k_pch_Dashboard_Section = "dashboard"; - public const string k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard"; - public const string k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode"; - public const string k_pch_Dashboard_Position = "position"; - public const string k_pch_Dashboard_DesktopScale = "desktopScale"; - public const string k_pch_Dashboard_DashboardScale = "dashboardScale"; - public const string k_pch_Dashboard_UseStandaloneSystemLayer = "standaloneSystemLayer"; - public const string k_pch_Dashboard_StickyDashboard = "stickyDashboard"; - public const string k_pch_Dashboard_AllowSteamOverlays_Bool = "allowSteamOverlays"; - public const string k_pch_Dashboard_AllowVRGamepadUI_Bool = "allowVRGamepadUI"; - public const string k_pch_Dashboard_AllowVRGamepadUIViaGamescope_Bool = "allowVRGamepadUIViaGamescope"; - public const string k_pch_Dashboard_SteamMatchesHMDFramerate = "steamMatchesHMDFramerate"; - public const string k_pch_modelskin_Section = "modelskins"; - public const string k_pch_Driver_Enable_Bool = "enable"; - public const string k_pch_Driver_BlockedBySafemode_Bool = "blocked_by_safe_mode"; - public const string k_pch_Driver_LoadPriority_Int32 = "loadPriority"; - public const string k_pch_WebInterface_Section = "WebInterface"; - public const string k_pch_VRWebHelper_Section = "VRWebHelper"; - public const string k_pch_VRWebHelper_DebuggerEnabled_Bool = "DebuggerEnabled"; - public const string k_pch_VRWebHelper_DebuggerPort_Int32 = "DebuggerPort"; - public const string k_pch_TrackingOverride_Section = "TrackingOverrides"; - public const string k_pch_App_BindingAutosaveURLSuffix_String = "AutosaveURL"; - public const string k_pch_App_BindingLegacyAPISuffix_String = "_legacy"; - public const string k_pch_App_BindingSteamVRInputAPISuffix_String = "_steamvrinput"; - public const string k_pch_App_BindingOpenXRAPISuffix_String = "_openxr"; - public const string k_pch_App_BindingCurrentURLSuffix_String = "CurrentURL"; - public const string k_pch_App_BindingPreviousURLSuffix_String = "PreviousURL"; - public const string k_pch_App_NeedToUpdateAutosaveSuffix_Bool = "NeedToUpdateAutosave"; - public const string k_pch_App_DominantHand_Int32 = "DominantHand"; - public const string k_pch_App_BlockOculusSDK_Bool = "blockOculusSDK"; - public const string k_pch_Trackers_Section = "trackers"; - public const string k_pch_DesktopUI_Section = "DesktopUI"; - public const string k_pch_LastKnown_Section = "LastKnown"; - public const string k_pch_LastKnown_HMDManufacturer_String = "HMDManufacturer"; - public const string k_pch_LastKnown_HMDModel_String = "HMDModel"; - public const string k_pch_LastKnown_ActualHMDDriver_String = "ActualHMDDriver"; - public const string k_pch_DismissedWarnings_Section = "DismissedWarnings"; - public const string k_pch_Input_Section = "input"; - public const string k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation"; - public const string k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation"; - public const string k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone"; - public const string k_pch_GpuSpeed_Section = "GpuSpeed"; - public const string IVRScreenshots_Version = "IVRScreenshots_001"; - public const string IVRResources_Version = "IVRResources_001"; - public const string IVRDriverManager_Version = "IVRDriverManager_001"; - public const uint k_unMaxActionNameLength = 64; - public const uint k_unMaxActionSetNameLength = 64; - public const uint k_unMaxActionOriginCount = 16; - public const uint k_unMaxBoneNameLength = 32; - public const int k_nActionSetOverlayGlobalPriorityMin = 16777216; - public const int k_nActionSetOverlayGlobalPriorityMax = 33554431; - public const int k_nActionSetPriorityReservedMin = 33554432; - public const string IVRInput_Version = "IVRInput_010"; - public const ulong k_ulInvalidIOBufferHandle = 0; - public const string IVRIOBuffer_Version = "IVRIOBuffer_002"; - public const uint k_ulInvalidSpatialAnchorHandle = 0; - public const string IVRSpatialAnchors_Version = "IVRSpatialAnchors_001"; - public const string IVRDebug_Version = "IVRDebug_001"; - public const string IVRIPCResourceManagerClient_Version = "IVRIPCResourceManagerClient_001"; - public const ulong k_ulDisplayRedirectContainer = 25769803779; - public const string IVRProperties_Version = "IVRProperties_001"; - public const string k_pchPathUserHandRight = "/user/hand/right"; - public const string k_pchPathUserHandLeft = "/user/hand/left"; - public const string k_pchPathUserHandPrimary = "/user/hand/primary"; - public const string k_pchPathUserHandSecondary = "/user/hand/secondary"; - public const string k_pchPathUserHead = "/user/head"; - public const string k_pchPathUserGamepad = "/user/gamepad"; - public const string k_pchPathUserTreadmill = "/user/treadmill"; - public const string k_pchPathUserStylus = "/user/stylus"; - public const string k_pchPathDevices = "/devices"; - public const string k_pchPathDevicePath = "/device_path"; - public const string k_pchPathBestAliasPath = "/best_alias_path"; - public const string k_pchPathBoundTrackerAliasPath = "/bound_tracker_path"; - public const string k_pchPathBoundTrackerRole = "/bound_tracker_role"; - public const string k_pchPathPoseRaw = "/pose/raw"; - public const string k_pchPathPoseTip = "/pose/tip"; - public const string k_pchPathPoseGrip = "/pose/grip"; - public const string k_pchPathSystemButtonClick = "/input/system/click"; - public const string k_pchPathProximity = "/proximity"; - public const string k_pchPathControllerTypePrefix = "/controller_type/"; - public const string k_pchPathInputProfileSuffix = "/input_profile"; - public const string k_pchPathBindingNameSuffix = "/binding_name"; - public const string k_pchPathBindingUrlSuffix = "/binding_url"; - public const string k_pchPathBindingErrorSuffix = "/binding_error"; - public const string k_pchPathActiveActionSets = "/active_action_sets"; - public const string k_pchPathComponentUpdates = "/total_component_updates"; - public const string k_pchPathUserFootLeft = "/user/foot/left"; - public const string k_pchPathUserFootRight = "/user/foot/right"; - public const string k_pchPathUserShoulderLeft = "/user/shoulder/left"; - public const string k_pchPathUserShoulderRight = "/user/shoulder/right"; - public const string k_pchPathUserElbowLeft = "/user/elbow/left"; - public const string k_pchPathUserElbowRight = "/user/elbow/right"; - public const string k_pchPathUserKneeLeft = "/user/knee/left"; - public const string k_pchPathUserKneeRight = "/user/knee/right"; - public const string k_pchPathUserWristLeft = "/user/wrist/left"; - public const string k_pchPathUserWristRight = "/user/wrist/right"; - public const string k_pchPathUserAnkleLeft = "/user/ankle/left"; - public const string k_pchPathUserAnkleRight = "/user/ankle/right"; - public const string k_pchPathUserWaist = "/user/waist"; - public const string k_pchPathUserChest = "/user/chest"; - public const string k_pchPathUserCamera = "/user/camera"; - public const string k_pchPathUserKeyboard = "/user/keyboard"; - public const string k_pchPathClientAppKey = "/client_info/app_key"; - public const ulong k_ulInvalidPathHandle = 0; - public const string IVRPaths_Version = "IVRPaths_001"; - public const string IVRBlockQueue_Version = "IVRBlockQueue_005"; - - static uint VRToken { get; set; } - - const string FnTable_Prefix = "FnTable:"; - - class COpenVRContext - { - public COpenVRContext() { Clear(); } - - public void Clear() - { - m_pVRSystem = null; - m_pVRChaperone = null; - m_pVRChaperoneSetup = null; - m_pVRCompositor = null; - m_pVRHeadsetView = null; - m_pVROverlay = null; - m_pVROverlayView = null; - m_pVRRenderModels = null; - m_pVRExtendedDisplay = null; - m_pVRSettings = null; - m_pVRApplications = null; - m_pVRScreenshots = null; - m_pVRTrackedCamera = null; - m_pVRInput = null; - m_pVRIOBuffer = null; - m_pVRSpatialAnchors = null; - m_pVRNotifications = null; - m_pVRDebug = null; - } - - void CheckClear() - { - if (VRToken != GetInitToken()) - { - Clear(); - VRToken = GetInitToken(); - } - } - - public CVRSystem VRSystem() - { - CheckClear(); - if (m_pVRSystem == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRSystem_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRSystem = new CVRSystem(pInterface); - } - return m_pVRSystem; - } - - public CVRChaperone VRChaperone() - { - CheckClear(); - if (m_pVRChaperone == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRChaperone_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRChaperone = new CVRChaperone(pInterface); - } - return m_pVRChaperone; - } - - public CVRChaperoneSetup VRChaperoneSetup() - { - CheckClear(); - if (m_pVRChaperoneSetup == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRChaperoneSetup_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRChaperoneSetup = new CVRChaperoneSetup(pInterface); - } - return m_pVRChaperoneSetup; - } - - public CVRCompositor VRCompositor() - { - CheckClear(); - if (m_pVRCompositor == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRCompositor_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRCompositor = new CVRCompositor(pInterface); - } - return m_pVRCompositor; - } - - public CVRHeadsetView VRHeadsetView() - { - CheckClear(); - if (m_pVRHeadsetView == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRHeadsetView_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRHeadsetView = new CVRHeadsetView(pInterface); - } - return m_pVRHeadsetView; - } - - public CVROverlay VROverlay() - { - CheckClear(); - if (m_pVROverlay == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVROverlay_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVROverlay = new CVROverlay(pInterface); - } - return m_pVROverlay; - } - - public CVROverlayView VROverlayView() - { - CheckClear(); - if (m_pVROverlayView == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVROverlayView_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVROverlayView = new CVROverlayView(pInterface); - } - return m_pVROverlayView; - } - - public CVRRenderModels VRRenderModels() - { - CheckClear(); - if (m_pVRRenderModels == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRRenderModels_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRRenderModels = new CVRRenderModels(pInterface); - } - return m_pVRRenderModels; - } - - public CVRExtendedDisplay VRExtendedDisplay() - { - CheckClear(); - if (m_pVRExtendedDisplay == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRExtendedDisplay_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRExtendedDisplay = new CVRExtendedDisplay(pInterface); - } - return m_pVRExtendedDisplay; - } - - public CVRSettings VRSettings() - { - CheckClear(); - if (m_pVRSettings == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRSettings_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRSettings = new CVRSettings(pInterface); - } - return m_pVRSettings; - } - - public CVRApplications VRApplications() - { - CheckClear(); - if (m_pVRApplications == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRApplications_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRApplications = new CVRApplications(pInterface); - } - return m_pVRApplications; - } - - public CVRScreenshots VRScreenshots() - { - CheckClear(); - if (m_pVRScreenshots == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRScreenshots_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRScreenshots = new CVRScreenshots(pInterface); - } - return m_pVRScreenshots; - } - - public CVRTrackedCamera VRTrackedCamera() - { - CheckClear(); - if (m_pVRTrackedCamera == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRTrackedCamera_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRTrackedCamera = new CVRTrackedCamera(pInterface); - } - return m_pVRTrackedCamera; - } - - public CVRInput VRInput() - { - CheckClear(); - if (m_pVRInput == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRInput_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRInput = new CVRInput(pInterface); - } - return m_pVRInput; - } - - public CVRIOBuffer VRIOBuffer() - { - CheckClear(); - if (m_pVRIOBuffer == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRIOBuffer_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRIOBuffer = new CVRIOBuffer(pInterface); - } - return m_pVRIOBuffer; - } - - public CVRSpatialAnchors VRSpatialAnchors() - { - CheckClear(); - if (m_pVRSpatialAnchors == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRSpatialAnchors_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRSpatialAnchors = new CVRSpatialAnchors(pInterface); - } - return m_pVRSpatialAnchors; - } - - public CVRDebug VRDebug() - { - CheckClear(); - if (m_pVRDebug == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRDebug_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRDebug = new CVRDebug(pInterface); - } - return m_pVRDebug; - } - - public CVRNotifications VRNotifications() - { - CheckClear(); - if (m_pVRNotifications == null) - { - var eError = EVRInitError.None; - var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRNotifications_Version, ref eError); - if (pInterface != IntPtr.Zero && eError == EVRInitError.None) - m_pVRNotifications = new CVRNotifications(pInterface); - } - return m_pVRNotifications; - } - - private CVRSystem m_pVRSystem; - private CVRChaperone m_pVRChaperone; - private CVRChaperoneSetup m_pVRChaperoneSetup; - private CVRCompositor m_pVRCompositor; - private CVRHeadsetView m_pVRHeadsetView; - private CVROverlay m_pVROverlay; - private CVROverlayView m_pVROverlayView; - private CVRRenderModels m_pVRRenderModels; - private CVRExtendedDisplay m_pVRExtendedDisplay; - private CVRSettings m_pVRSettings; - private CVRApplications m_pVRApplications; - private CVRScreenshots m_pVRScreenshots; - private CVRTrackedCamera m_pVRTrackedCamera; - private CVRInput m_pVRInput; - private CVRIOBuffer m_pVRIOBuffer; - private CVRSpatialAnchors m_pVRSpatialAnchors; - private CVRNotifications m_pVRNotifications; - private CVRDebug m_pVRDebug; - }; - - private static COpenVRContext _OpenVRInternal_ModuleContext = null; - static COpenVRContext OpenVRInternal_ModuleContext - { - get - { - if (_OpenVRInternal_ModuleContext == null) - _OpenVRInternal_ModuleContext = new COpenVRContext(); - return _OpenVRInternal_ModuleContext; - } - } - - public static CVRSystem System { get { return OpenVRInternal_ModuleContext.VRSystem(); } } - public static CVRChaperone Chaperone { get { return OpenVRInternal_ModuleContext.VRChaperone(); } } - public static CVRChaperoneSetup ChaperoneSetup { get { return OpenVRInternal_ModuleContext.VRChaperoneSetup(); } } - public static CVRCompositor Compositor { get { return OpenVRInternal_ModuleContext.VRCompositor(); } } - public static CVRHeadsetView HeadsetView { get { return OpenVRInternal_ModuleContext.VRHeadsetView(); } } - public static CVROverlay Overlay { get { return OpenVRInternal_ModuleContext.VROverlay(); } } - public static CVROverlayView OverlayView { get { return OpenVRInternal_ModuleContext.VROverlayView(); } } - public static CVRRenderModels RenderModels { get { return OpenVRInternal_ModuleContext.VRRenderModels(); } } - public static CVRExtendedDisplay ExtendedDisplay { get { return OpenVRInternal_ModuleContext.VRExtendedDisplay(); } } - public static CVRSettings Settings { get { return OpenVRInternal_ModuleContext.VRSettings(); } } - public static CVRApplications Applications { get { return OpenVRInternal_ModuleContext.VRApplications(); } } - public static CVRScreenshots Screenshots { get { return OpenVRInternal_ModuleContext.VRScreenshots(); } } - public static CVRTrackedCamera TrackedCamera { get { return OpenVRInternal_ModuleContext.VRTrackedCamera(); } } - public static CVRInput Input { get { return OpenVRInternal_ModuleContext.VRInput(); } } - public static CVRIOBuffer IOBuffer { get { return OpenVRInternal_ModuleContext.VRIOBuffer(); } } - public static CVRSpatialAnchors SpatialAnchors { get { return OpenVRInternal_ModuleContext.VRSpatialAnchors(); } } - public static CVRNotifications Notifications { get { return OpenVRInternal_ModuleContext.VRNotifications(); } } - public static CVRDebug Debug { get { return OpenVRInternal_ModuleContext.VRDebug(); } } - - - /** Finds the active installation of vrclient.dll and initializes it */ - public static CVRSystem Init(ref EVRInitError peError, EVRApplicationType eApplicationType = EVRApplicationType.VRApplication_Scene, string pchStartupInfo = "") - { - try - { - VRToken = InitInternal2(ref peError, eApplicationType, pchStartupInfo); - } - catch (EntryPointNotFoundException) - { - VRToken = InitInternal(ref peError, eApplicationType); - } - - OpenVRInternal_ModuleContext.Clear(); - - if (peError != EVRInitError.None) - return null; - - bool bInterfaceValid = IsInterfaceVersionValid(IVRSystem_Version); - if (!bInterfaceValid) - { - ShutdownInternal(); - peError = EVRInitError.Init_InterfaceNotFound; return null; } - return OpenVR.System; + return path.ToString(); + } catch + { + return OpenVRInterop.RuntimePath(); //this api is deprecated but here to support older unity versions + } + } + + public static string GetStringForHmdError(EVRInitError error) + { + return Marshal.PtrToStringAnsi(OpenVRInterop.GetStringForHmdError(error)); + } + + public static IntPtr GetGenericInterface(string pchInterfaceVersion, ref EVRInitError peError) + { + return OpenVRInterop.GetGenericInterface(pchInterfaceVersion, ref peError); + } + + public static bool IsInterfaceVersionValid(string pchInterfaceVersion) + { + return OpenVRInterop.IsInterfaceVersionValid(pchInterfaceVersion); + } + + public static uint GetInitToken() + { + return OpenVRInterop.GetInitToken(); + } + + public const uint MaxDmabufPlaneCount = 4; + public const uint k_nDriverNone = 4294967295; + public const uint k_unMaxDriverDebugResponseSize = 32768; + public const uint k_unTrackedDeviceIndex_Hmd = 0; + public const uint k_unMaxTrackedDeviceCount = 64; + public const uint k_unTrackedDeviceIndexOther = 4294967294; + public const uint k_unTrackedDeviceIndexInvalid = 4294967295; + public const ulong k_ulInvalidPropertyContainer = 0; + public const uint k_unInvalidPropertyTag = 0; + public const ulong k_ulInvalidDriverHandle = 0; + public const uint k_unFloatPropertyTag = 1; + public const uint k_unInt32PropertyTag = 2; + public const uint k_unUint64PropertyTag = 3; + public const uint k_unBoolPropertyTag = 4; + public const uint k_unStringPropertyTag = 5; + public const uint k_unErrorPropertyTag = 6; + public const uint k_unDoublePropertyTag = 7; + public const uint k_unHmdMatrix34PropertyTag = 20; + public const uint k_unHmdMatrix44PropertyTag = 21; + public const uint k_unHmdVector3PropertyTag = 22; + public const uint k_unHmdVector4PropertyTag = 23; + public const uint k_unHmdVector2PropertyTag = 24; + public const uint k_unHmdQuadPropertyTag = 25; + public const uint k_unHiddenAreaPropertyTag = 30; + public const uint k_unPathHandleInfoTag = 31; + public const uint k_unActionPropertyTag = 32; + public const uint k_unInputValuePropertyTag = 33; + public const uint k_unWildcardPropertyTag = 34; + public const uint k_unHapticVibrationPropertyTag = 35; + public const uint k_unSkeletonPropertyTag = 36; + public const uint k_unSpatialAnchorPosePropertyTag = 40; + public const uint k_unJsonPropertyTag = 41; + public const uint k_unActiveActionSetPropertyTag = 42; + public const uint k_unOpenVRInternalReserved_Start = 1000; + public const uint k_unOpenVRInternalReserved_End = 10000; + public const uint k_unMaxPropertyStringSize = 32768; + public const ulong k_ulInvalidActionHandle = 0; + public const ulong k_ulInvalidActionSetHandle = 0; + public const ulong k_ulInvalidInputValueHandle = 0; + public const ulong k_ulInvalidInputComponentHandle = 0; + public const uint k_unControllerStateAxisCount = 5; + public const ulong k_ulOverlayHandleInvalid = 0; + public const uint k_unMaxDistortionFunctionParameters = 8; + public const uint k_unScreenshotHandleInvalid = 0; + public const string IVRSystem_Version = "IVRSystem_023"; + public const string IVRExtendedDisplay_Version = "IVRExtendedDisplay_001"; + public const string IVRTrackedCamera_Version = "IVRTrackedCamera_006"; + public const uint k_unMaxApplicationKeyLength = 128; + public const string k_pch_MimeType_HomeApp = "vr/home"; + public const string k_pch_MimeType_GameTheater = "vr/game_theater"; + public const string IVRApplications_Version = "IVRApplications_007"; + public const string IVRChaperone_Version = "IVRChaperone_004"; + public const string IVRChaperoneSetup_Version = "IVRChaperoneSetup_006"; + public const string IVRCompositor_Version = "IVRCompositor_029"; + public const uint k_unVROverlayMaxKeyLength = 128; + public const uint k_unVROverlayMaxNameLength = 128; + public const uint k_unMaxOverlayCount = 128; + public const uint k_unMaxOverlayIntersectionMaskPrimitivesCount = 32; + public const string IVROverlay_Version = "IVROverlay_028"; + public const string IVROverlayView_Version = "IVROverlayView_003"; + public const uint k_unHeadsetViewMaxWidth = 3840; + public const uint k_unHeadsetViewMaxHeight = 2160; + public const string k_pchHeadsetViewOverlayKey = "system.HeadsetView"; + public const string IVRHeadsetView_Version = "IVRHeadsetView_001"; + public const string k_pch_Controller_Component_GDC2015 = "gdc2015"; + public const string k_pch_Controller_Component_Base = "base"; + public const string k_pch_Controller_Component_Tip = "tip"; + public const string k_pch_Controller_Component_OpenXR_Aim = "openxr_aim"; + public const string k_pch_Controller_Component_HandGrip = "handgrip"; + public const string k_pch_Controller_Component_OpenXR_Grip = "openxr_grip"; + public const string k_pch_Controller_Component_OpenXR_HandModel = "openxr_handmodel"; + public const string k_pch_Controller_Component_Status = "status"; + public const string IVRRenderModels_Version = "IVRRenderModels_006"; + public const uint k_unNotificationTextMaxSize = 256; + public const string IVRNotifications_Version = "IVRNotifications_002"; + public const uint k_unMaxSettingsKeyLength = 128; + public const string IVRSettings_Version = "IVRSettings_003"; + public const string k_pch_SteamVR_Section = "steamvr"; + public const string k_pch_SteamVR_RequireHmd_String = "requireHmd"; + public const string k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver"; + public const string k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd"; + public const string k_pch_SteamVR_DisplayDebug_Bool = "displayDebug"; + public const string k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe"; + public const string k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX"; + public const string k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY"; + public const string k_pch_SteamVR_SendSystemButtonToAllApps_Bool = "sendSystemButtonToAllApps"; + public const string k_pch_SteamVR_LogLevel_Int32 = "loglevel"; + public const string k_pch_SteamVR_IPD_Float = "ipd"; + public const string k_pch_SteamVR_Background_String = "background"; + public const string k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection"; + public const string k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight"; + public const string k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius"; + public const string k_pch_SteamVR_GridColor_String = "gridColor"; + public const string k_pch_SteamVR_PlayAreaColor_String = "playAreaColor"; + public const string k_pch_SteamVR_TrackingLossColor_String = "trackingLossColor"; + public const string k_pch_SteamVR_ShowStage_Bool = "showStage"; + public const string k_pch_SteamVR_DrawTrackingReferences_Bool = "drawTrackingReferences"; + public const string k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers"; + public const string k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers"; + public const string k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees"; + public const string k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement"; + public const string k_pch_SteamVR_ShowBaseStationPowerManagementTip_Int32 = "ShowBaseStationPowerManagementTip"; + public const string k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses"; + public const string k_pch_SteamVR_SupersampleScale_Float = "supersampleScale"; + public const string k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution"; + public const string k_pch_SteamVR_MotionSmoothing_Bool = "motionSmoothing"; + public const string k_pch_SteamVR_MotionSmoothingOverride_Int32 = "motionSmoothingOverride"; + public const string k_pch_SteamVR_FramesToThrottle_Int32 = "framesToThrottle"; + public const string k_pch_SteamVR_AdditionalFramesToPredict_Int32 = "additionalFramesToPredict"; + public const string k_pch_SteamVR_WorldScale_Float = "worldScale"; + public const string k_pch_SteamVR_FovScale_Int32 = "fovScale"; + public const string k_pch_SteamVR_FovScaleInner_Int32 = "fovScaleInner"; + public const string k_pch_SteamVR_FovScaleUpper_Int32 = "fovScaleUpper"; + public const string k_pch_SteamVR_FovScaleLower_Int32 = "fovScaleLower"; + public const string k_pch_SteamVR_FovScaleFormat_Int32 = "fovScaleFormat"; + public const string k_pch_SteamVR_FovScaleLetterboxed_Bool = "fovScaleLetterboxed"; + public const string k_pch_SteamVR_DisableAsyncReprojection_Bool = "disableAsync"; + public const string k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking"; + public const string k_pch_SteamVR_DefaultMirrorView_Int32 = "mirrorView"; + public const string k_pch_SteamVR_ShowLegacyMirrorView_Bool = "showLegacyMirrorView"; + public const string k_pch_SteamVR_MirrorViewVisibility_Bool = "showMirrorView"; + public const string k_pch_SteamVR_MirrorViewDisplayMode_Int32 = "mirrorViewDisplayMode"; + public const string k_pch_SteamVR_MirrorViewEye_Int32 = "mirrorViewEye"; + public const string k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry"; + public const string k_pch_SteamVR_MirrorViewGeometryMaximized_String = "mirrorViewGeometryMaximized"; + public const string k_pch_SteamVR_PerfGraphVisibility_Bool = "showPerfGraph"; + public const string k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch"; + public const string k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch"; + public const string k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch"; + public const string k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard"; + public const string k_pch_SteamVR_EnableHomeApp = "enableHomeApp"; + public const string k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec"; + public const string k_pch_SteamVR_RetailDemo_Bool = "retailDemo"; + public const string k_pch_SteamVR_IpdOffset_Float = "ipdOffset"; + public const string k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering"; + public const string k_pch_SteamVR_SupersampleManualOverride_Bool = "supersampleManualOverride"; + public const string k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync"; + public const string k_pch_SteamVR_AllowDisplayLockedMode_Bool = "allowDisplayLockedMode"; + public const string k_pch_SteamVR_HaveStartedTutorialForNativeChaperoneDriver_Bool = "haveStartedTutorialForNativeChaperoneDriver"; + public const string k_pch_SteamVR_DebugInputBinding = "debugInputBinding"; + public const string k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid"; + public const string k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling"; + public const string k_pch_SteamVR_EnableSafeMode = "enableSafeMode"; + public const string k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate"; + public const string k_pch_SteamVR_LastVersionNotice = "lastVersionNotice"; + public const string k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate"; + public const string k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR"; + public const string k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG"; + public const string k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB"; + public const string k_pch_SteamVR_CustomIconStyle_String = "customIconStyle"; + public const string k_pch_SteamVR_CustomOffIconStyle_String = "customOffIconStyle"; + public const string k_pch_SteamVR_CustomIconForceUpdate_String = "customIconForceUpdate"; + public const string k_pch_SteamVR_AllowGlobalActionSetPriority = "globalActionSetPriority"; + public const string k_pch_SteamVR_OverlayRenderQuality = "overlayRenderQuality_2"; + public const string k_pch_SteamVR_BlockOculusSDKOnOpenVRLaunchOption_Bool = "blockOculusSDKOnOpenVRLaunchOption"; + public const string k_pch_SteamVR_BlockOculusSDKOnAllLaunches_Bool = "blockOculusSDKOnAllLaunches"; + public const string k_pch_SteamVR_HDCPLegacyCompatibility_Bool = "hdcp14legacyCompatibility"; + public const string k_pch_SteamVR_DisplayPortTrainingMode_Int = "displayPortTrainingMode"; + public const string k_pch_SteamVR_UsePrism_Bool = "usePrism"; + public const string k_pch_SteamVR_AllowFallbackMirrorWindowLinux_Bool = "allowFallbackMirrorWindowLinux"; + public const string k_pch_SteamVR_DisableKeyboardPrivacy_Bool = "disableKeyboardPrivacy"; + public const string k_pch_OpenXR_Section = "openxr"; + public const string k_pch_OpenXR_MetaUnityPluginCompatibility_Int32 = "metaUnityPluginCompatibility"; + public const string k_pch_DirectMode_Section = "direct_mode"; + public const string k_pch_DirectMode_Enable_Bool = "enable"; + public const string k_pch_DirectMode_Count_Int32 = "count"; + public const string k_pch_DirectMode_EdidVid_Int32 = "edidVid"; + public const string k_pch_DirectMode_EdidPid_Int32 = "edidPid"; + public const string k_pch_Lighthouse_Section = "driver_lighthouse"; + public const string k_pch_Lighthouse_DisableIMU_Bool = "disableimu"; + public const string k_pch_Lighthouse_DisableIMUExceptHMD_Bool = "disableimuexcepthmd"; + public const string k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation"; + public const string k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug"; + public const string k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation"; + public const string k_pch_Lighthouse_DBHistory_Bool = "dbhistory"; + public const string k_pch_Lighthouse_EnableBluetooth_Bool = "enableBluetooth"; + public const string k_pch_Lighthouse_PowerManagedBaseStations_String = "PowerManagedBaseStations"; + public const string k_pch_Lighthouse_PowerManagedBaseStations2_String = "PowerManagedBaseStations2"; + public const string k_pch_Lighthouse_InactivityTimeoutForBaseStations_Int32 = "InactivityTimeoutForBaseStations"; + public const string k_pch_Lighthouse_EnableImuFallback_Bool = "enableImuFallback"; + public const string k_pch_Null_Section = "driver_null"; + public const string k_pch_Null_SerialNumber_String = "serialNumber"; + public const string k_pch_Null_ModelNumber_String = "modelNumber"; + public const string k_pch_Null_WindowX_Int32 = "windowX"; + public const string k_pch_Null_WindowY_Int32 = "windowY"; + public const string k_pch_Null_WindowWidth_Int32 = "windowWidth"; + public const string k_pch_Null_WindowHeight_Int32 = "windowHeight"; + public const string k_pch_Null_RenderWidth_Int32 = "renderWidth"; + public const string k_pch_Null_RenderHeight_Int32 = "renderHeight"; + public const string k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons"; + public const string k_pch_Null_DisplayFrequency_Float = "displayFrequency"; + public const string k_pch_WindowsMR_Section = "driver_holographic"; + public const string k_pch_UserInterface_Section = "userinterface"; + public const string k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop"; + public const string k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray"; + public const string k_pch_UserInterface_HidePopupsWhenStatusMinimized_Bool = "HidePopupsWhenStatusMinimized"; + public const string k_pch_UserInterface_Screenshots_Bool = "screenshots"; + public const string k_pch_UserInterface_ScreenshotType_Int = "screenshotType"; + public const string k_pch_UserInterface_CheckStatusInterval_Int = "vrmStatusCheckInterval"; + public const string k_pch_UserInterface_CheckForSteam_Bool = "vrmCheckForSteam"; + public const string k_pch_Notifications_Section = "notifications"; + public const string k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb"; + public const string k_pch_Keyboard_Section = "keyboard"; + public const string k_pch_Keyboard_TutorialCompletions = "TutorialCompletions"; + public const string k_pch_Keyboard_ScaleX = "ScaleX"; + public const string k_pch_Keyboard_ScaleY = "ScaleY"; + public const string k_pch_Keyboard_OffsetLeftX = "OffsetLeftX"; + public const string k_pch_Keyboard_OffsetRightX = "OffsetRightX"; + public const string k_pch_Keyboard_OffsetY = "OffsetY"; + public const string k_pch_Keyboard_Smoothing = "Smoothing"; + public const string k_pch_Perf_Section = "perfcheck"; + public const string k_pch_Perf_PerfGraphInHMD_Bool = "perfGraphInHMD"; + public const string k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore"; + public const string k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit"; + public const string k_pch_Perf_TestData_Float = "perfTestData"; + public const string k_pch_Perf_GPUProfiling_Bool = "GPUProfiling"; + public const string k_pch_Perf_GpuBusMonitoring_Bool = "gpuBusMonitoring"; + public const string k_pch_CollisionBounds_Section = "collisionBounds"; + public const string k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle"; + public const string k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn"; + public const string k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn"; + public const string k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn"; + public const string k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance"; + public const string k_pch_CollisionBounds_WallHeight_Float = "CollisionBoundsWallHeight"; + public const string k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR"; + public const string k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG"; + public const string k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB"; + public const string k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA"; + public const string k_pch_CollisionBounds_EnableDriverImport = "enableDriverBoundsImport"; + public const string k_pch_Camera_Section = "camera"; + public const string k_pch_Camera_EnableCamera_Bool = "enableCamera"; + public const string k_pch_Camera_ShowOnController_Bool = "showOnController"; + public const string k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds"; + public const string k_pch_Camera_RoomView_Int32 = "roomView"; + public const string k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR"; + public const string k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG"; + public const string k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB"; + public const string k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA"; + public const string k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength"; + public const string k_pch_Camera_RoomViewStyle_Int32 = "roomViewStyle"; + public const string k_pch_audio_Section = "audio"; + public const string k_pch_audio_SetOsDefaultPlaybackDevice_Bool = "setOsDefaultPlaybackDevice"; + public const string k_pch_audio_EnablePlaybackDeviceOverride_Bool = "enablePlaybackDeviceOverride"; + public const string k_pch_audio_PlaybackDeviceOverride_String = "playbackDeviceOverride"; + public const string k_pch_audio_PlaybackDeviceOverrideName_String = "playbackDeviceOverrideName"; + public const string k_pch_audio_SetOsDefaultRecordingDevice_Bool = "setOsDefaultRecordingDevice"; + public const string k_pch_audio_EnableRecordingDeviceOverride_Bool = "enableRecordingDeviceOverride"; + public const string k_pch_audio_RecordingDeviceOverride_String = "recordingDeviceOverride"; + public const string k_pch_audio_RecordingDeviceOverrideName_String = "recordingDeviceOverrideName"; + public const string k_pch_audio_EnablePlaybackMirror_Bool = "enablePlaybackMirror"; + public const string k_pch_audio_PlaybackMirrorDevice_String = "playbackMirrorDevice"; + public const string k_pch_audio_PlaybackMirrorDeviceName_String = "playbackMirrorDeviceName"; + public const string k_pch_audio_OldPlaybackMirrorDevice_String = "onPlaybackMirrorDevice"; + public const string k_pch_audio_ActiveMirrorDevice_String = "activePlaybackMirrorDevice"; + public const string k_pch_audio_EnablePlaybackMirrorIndependentVolume_Bool = "enablePlaybackMirrorIndependentVolume"; + public const string k_pch_audio_LastHmdPlaybackDeviceId_String = "lastHmdPlaybackDeviceId"; + public const string k_pch_audio_VIVEHDMIGain = "viveHDMIGain"; + public const string k_pch_audio_DualSpeakerAndJackOutput_Bool = "dualSpeakerAndJackOutput"; + public const string k_pch_audio_MuteMicMonitor_Bool = "muteMicMonitor"; + public const string k_pch_Power_Section = "power"; + public const string k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit"; + public const string k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout"; + public const string k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout"; + public const string k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout"; + public const string k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress"; + public const string k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby"; + public const string k_pch_Dashboard_Section = "dashboard"; + public const string k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard"; + public const string k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode"; + public const string k_pch_Dashboard_Position = "position"; + public const string k_pch_Dashboard_DesktopScale = "desktopScale"; + public const string k_pch_Dashboard_DashboardScale = "dashboardScale"; + public const string k_pch_Dashboard_UseStandaloneSystemLayer = "standaloneSystemLayer"; + public const string k_pch_Dashboard_AllowSteamOverlays_Bool = "allowSteamOverlays"; + public const string k_pch_Dashboard_AllowVRGamepadUI_Bool = "allowVRGamepadUI"; + public const string k_pch_Dashboard_AllowVRGamepadUIViaGamescope_Bool = "allowVRGamepadUIViaGamescope"; + public const string k_pch_Dashboard_SteamMatchesHMDFramerate = "steamMatchesHMDFramerate"; + public const string k_pch_Dashboard_GrabHandleAcceleration = "grabHandleAcceleration"; + public const string k_pch_modelskin_Section = "modelskins"; + public const string k_pch_Driver_Enable_Bool = "enable"; + public const string k_pch_Driver_BlockedBySafemode_Bool = "blocked_by_safe_mode"; + public const string k_pch_Driver_LoadPriority_Int32 = "loadPriority"; + public const string k_pch_Driver_Hmd_AllowsClientToControlTextureIndex_Bool = "hmdAllowsClientToControlTextureIndex"; + public const string k_pch_Driver_ForceSystemLayerUseAppPoses_Bool = "forceSystemLayerUseAppPoses"; + public const string k_pch_WebInterface_Section = "WebInterface"; + public const string k_pch_VRWebHelper_Section = "VRWebHelper"; + public const string k_pch_VRWebHelper_DebuggerEnabled_Bool = "DebuggerEnabled"; + public const string k_pch_VRWebHelper_DebuggerPort_Int32 = "DebuggerPort"; + public const string k_pch_TrackingOverride_Section = "TrackingOverrides"; + public const string k_pch_App_BindingAutosaveURLSuffix_String = "AutosaveURL"; + public const string k_pch_App_BindingLegacyAPISuffix_String = "_legacy"; + public const string k_pch_App_BindingSteamVRInputAPISuffix_String = "_steamvrinput"; + public const string k_pch_App_BindingOpenXRAPISuffix_String = "_openxr"; + public const string k_pch_App_BindingCurrentURLSuffix_String = "CurrentURL"; + public const string k_pch_App_BindingPreviousURLSuffix_String = "PreviousURL"; + public const string k_pch_App_NeedToUpdateAutosaveSuffix_Bool = "NeedToUpdateAutosave"; + public const string k_pch_App_DominantHand_Int32 = "DominantHand"; + public const string k_pch_App_BlockOculusSDK_Bool = "blockOculusSDK"; + public const string k_pch_Trackers_Section = "trackers"; + public const string k_pch_DesktopUI_Section = "DesktopUI"; + public const string k_pch_LastKnown_Section = "LastKnown"; + public const string k_pch_LastKnown_HMDManufacturer_String = "HMDManufacturer"; + public const string k_pch_LastKnown_HMDModel_String = "HMDModel"; + public const string k_pch_LastKnown_ActualHMDDriver_String = "ActualHMDDriver"; + public const string k_pch_LastKnown_HMDSerialNumber_String = "HMDSerialNumber"; + public const string k_pch_LastKnown_HMDRemoteClientID_String = "RemoteClientID"; + public const string k_pch_DismissedWarnings_Section = "DismissedWarnings"; + public const string k_pch_Input_Section = "input"; + public const string k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation"; + public const string k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation"; + public const string k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone"; + public const string k_pch_GpuSpeed_Section = "GpuSpeed"; + public const string k_pch_XRRenderModelCache_Section = "XRRenderModelUuidCache"; + public const string IVRScreenshots_Version = "IVRScreenshots_001"; + public const string IVRResources_Version = "IVRResources_001"; + public const string IVRDriverManager_Version = "IVRDriverManager_001"; + public const uint k_unMaxActionNameLength = 64; + public const uint k_unMaxActionSetNameLength = 64; + public const uint k_unMaxActionOriginCount = 16; + public const uint k_unMaxBoneNameLength = 32; + public const int k_nActionSetOverlayGlobalPriorityMin = 16777216; + public const int k_nActionSetOverlayGlobalPriorityMax = 33554431; + public const int k_nActionSetPriorityReservedMin = 33554432; + public const string IVRInput_Version = "IVRInput_010"; + public const ulong k_ulInvalidIOBufferHandle = 0; + public const string IVRIOBuffer_Version = "IVRIOBuffer_002"; + public const uint k_ulInvalidSpatialAnchorHandle = 0; + public const string IVRSpatialAnchors_Version = "IVRSpatialAnchors_001"; + public const string IVRDebug_Version = "IVRDebug_001"; + public const string IVRIPCResourceManagerClient_Version = "IVRIPCResourceManagerClient_002"; + public const ulong k_ulDisplayRedirectContainer = 25769803779; + public const string IVRProperties_Version = "IVRProperties_001"; + public const string k_pchPathUserHandRight = "/user/hand/right"; + public const string k_pchPathUserHandLeft = "/user/hand/left"; + public const string k_pchPathUserHandPrimary = "/user/hand/primary"; + public const string k_pchPathUserHandSecondary = "/user/hand/secondary"; + public const string k_pchPathUserHead = "/user/head"; + public const string k_pchPathUserGamepad = "/user/gamepad"; + public const string k_pchPathUserTreadmill = "/user/treadmill"; + public const string k_pchPathUserStylus = "/user/stylus"; + public const string k_pchPathDevices = "/devices"; + public const string k_pchPathDevicePath = "/device_path"; + public const string k_pchPathBestAliasPath = "/best_alias_path"; + public const string k_pchPathBoundTrackerAliasPath = "/bound_tracker_path"; + public const string k_pchPathBoundTrackerRole = "/bound_tracker_role"; + public const string k_pchPathPoseRaw = "/pose/raw"; + public const string k_pchPathPoseTip = "/pose/tip"; + public const string k_pchPathPoseGrip = "/pose/grip"; + public const string k_pchPathSystemButtonClick = "/input/system/click"; + public const string k_pchPathProximity = "/proximity"; + public const string k_pchPathControllerTypePrefix = "/controller_type/"; + public const string k_pchPathInputProfileSuffix = "/input_profile"; + public const string k_pchPathBindingNameSuffix = "/binding_name"; + public const string k_pchPathBindingUrlSuffix = "/binding_url"; + public const string k_pchPathBindingErrorSuffix = "/binding_error"; + public const string k_pchPathActiveActionSets = "/active_action_sets"; + public const string k_pchPathComponentUpdates = "/total_component_updates"; + public const string k_pchPathUserFootLeft = "/user/foot/left"; + public const string k_pchPathUserFootRight = "/user/foot/right"; + public const string k_pchPathUserShoulderLeft = "/user/shoulder/left"; + public const string k_pchPathUserShoulderRight = "/user/shoulder/right"; + public const string k_pchPathUserElbowLeft = "/user/elbow/left"; + public const string k_pchPathUserElbowRight = "/user/elbow/right"; + public const string k_pchPathUserKneeLeft = "/user/knee/left"; + public const string k_pchPathUserKneeRight = "/user/knee/right"; + public const string k_pchPathUserWristLeft = "/user/wrist/left"; + public const string k_pchPathUserWristRight = "/user/wrist/right"; + public const string k_pchPathUserAnkleLeft = "/user/ankle/left"; + public const string k_pchPathUserAnkleRight = "/user/ankle/right"; + public const string k_pchPathUserWaist = "/user/waist"; + public const string k_pchPathUserChest = "/user/chest"; + public const string k_pchPathUserCamera = "/user/camera"; + public const string k_pchPathUserKeyboard = "/user/keyboard"; + public const string k_pchPathClientAppKey = "/client_info/app_key"; + public const ulong k_ulInvalidPathHandle = 0; + public const string IVRPaths_Version = "IVRPaths_001"; + public const string IVRBlockQueue_Version = "IVRBlockQueue_005"; + + static uint VRToken { get; set; } + + const string FnTable_Prefix = "FnTable:"; + + class COpenVRContext + { + public COpenVRContext() { Clear(); } + + public void Clear() + { + m_pVRSystem = null; + m_pVRChaperone = null; + m_pVRChaperoneSetup = null; + m_pVRCompositor = null; + m_pVRHeadsetView = null; + m_pVROverlay = null; + m_pVROverlayView = null; + m_pVRRenderModels = null; + m_pVRExtendedDisplay = null; + m_pVRSettings = null; + m_pVRApplications = null; + m_pVRScreenshots = null; + m_pVRTrackedCamera = null; + m_pVRInput = null; + m_pVRIOBuffer = null; + m_pVRSpatialAnchors = null; + m_pVRNotifications = null; + m_pVRDebug = null; } - /** unloads vrclient.dll. Any interface pointers from the interface are - * invalid after this point */ - public static void Shutdown() + void CheckClear() + { + if (VRToken != GetInitToken()) + { + Clear(); + VRToken = GetInitToken(); + } + } + + public CVRSystem VRSystem() + { + CheckClear(); + if (m_pVRSystem == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRSystem_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRSystem = new CVRSystem(pInterface); + } + return m_pVRSystem; + } + + public CVRChaperone VRChaperone() + { + CheckClear(); + if (m_pVRChaperone == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRChaperone_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRChaperone = new CVRChaperone(pInterface); + } + return m_pVRChaperone; + } + + public CVRChaperoneSetup VRChaperoneSetup() + { + CheckClear(); + if (m_pVRChaperoneSetup == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRChaperoneSetup_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRChaperoneSetup = new CVRChaperoneSetup(pInterface); + } + return m_pVRChaperoneSetup; + } + + public CVRCompositor VRCompositor() + { + CheckClear(); + if (m_pVRCompositor == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRCompositor_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRCompositor = new CVRCompositor(pInterface); + } + return m_pVRCompositor; + } + + public CVRHeadsetView VRHeadsetView() + { + CheckClear(); + if (m_pVRHeadsetView == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRHeadsetView_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRHeadsetView = new CVRHeadsetView(pInterface); + } + return m_pVRHeadsetView; + } + + public CVROverlay VROverlay() + { + CheckClear(); + if (m_pVROverlay == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVROverlay_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVROverlay = new CVROverlay(pInterface); + } + return m_pVROverlay; + } + + public CVROverlayView VROverlayView() + { + CheckClear(); + if (m_pVROverlayView == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVROverlayView_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVROverlayView = new CVROverlayView(pInterface); + } + return m_pVROverlayView; + } + + public CVRRenderModels VRRenderModels() + { + CheckClear(); + if (m_pVRRenderModels == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRRenderModels_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRRenderModels = new CVRRenderModels(pInterface); + } + return m_pVRRenderModels; + } + + public CVRExtendedDisplay VRExtendedDisplay() + { + CheckClear(); + if (m_pVRExtendedDisplay == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRExtendedDisplay_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRExtendedDisplay = new CVRExtendedDisplay(pInterface); + } + return m_pVRExtendedDisplay; + } + + public CVRSettings VRSettings() + { + CheckClear(); + if (m_pVRSettings == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRSettings_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRSettings = new CVRSettings(pInterface); + } + return m_pVRSettings; + } + + public CVRApplications VRApplications() + { + CheckClear(); + if (m_pVRApplications == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRApplications_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRApplications = new CVRApplications(pInterface); + } + return m_pVRApplications; + } + + public CVRScreenshots VRScreenshots() + { + CheckClear(); + if (m_pVRScreenshots == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRScreenshots_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRScreenshots = new CVRScreenshots(pInterface); + } + return m_pVRScreenshots; + } + + public CVRTrackedCamera VRTrackedCamera() + { + CheckClear(); + if (m_pVRTrackedCamera == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRTrackedCamera_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRTrackedCamera = new CVRTrackedCamera(pInterface); + } + return m_pVRTrackedCamera; + } + + public CVRInput VRInput() + { + CheckClear(); + if (m_pVRInput == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRInput_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRInput = new CVRInput(pInterface); + } + return m_pVRInput; + } + + public CVRIOBuffer VRIOBuffer() + { + CheckClear(); + if (m_pVRIOBuffer == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRIOBuffer_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRIOBuffer = new CVRIOBuffer(pInterface); + } + return m_pVRIOBuffer; + } + + public CVRSpatialAnchors VRSpatialAnchors() + { + CheckClear(); + if (m_pVRSpatialAnchors == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRSpatialAnchors_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRSpatialAnchors = new CVRSpatialAnchors(pInterface); + } + return m_pVRSpatialAnchors; + } + + public CVRDebug VRDebug() + { + CheckClear(); + if (m_pVRDebug == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRDebug_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRDebug = new CVRDebug(pInterface); + } + return m_pVRDebug; + } + + public CVRNotifications VRNotifications() + { + CheckClear(); + if (m_pVRNotifications == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRNotifications_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRNotifications = new CVRNotifications(pInterface); + } + return m_pVRNotifications; + } + + private CVRSystem m_pVRSystem; + private CVRChaperone m_pVRChaperone; + private CVRChaperoneSetup m_pVRChaperoneSetup; + private CVRCompositor m_pVRCompositor; + private CVRHeadsetView m_pVRHeadsetView; + private CVROverlay m_pVROverlay; + private CVROverlayView m_pVROverlayView; + private CVRRenderModels m_pVRRenderModels; + private CVRExtendedDisplay m_pVRExtendedDisplay; + private CVRSettings m_pVRSettings; + private CVRApplications m_pVRApplications; + private CVRScreenshots m_pVRScreenshots; + private CVRTrackedCamera m_pVRTrackedCamera; + private CVRInput m_pVRInput; + private CVRIOBuffer m_pVRIOBuffer; + private CVRSpatialAnchors m_pVRSpatialAnchors; + private CVRNotifications m_pVRNotifications; + private CVRDebug m_pVRDebug; + }; + + private static COpenVRContext _OpenVRInternal_ModuleContext = null; + static COpenVRContext OpenVRInternal_ModuleContext + { + get + { + if (_OpenVRInternal_ModuleContext == null) + _OpenVRInternal_ModuleContext = new COpenVRContext(); + return _OpenVRInternal_ModuleContext; + } + } + + public static CVRSystem System { get { return OpenVRInternal_ModuleContext.VRSystem(); } } + public static CVRChaperone Chaperone { get { return OpenVRInternal_ModuleContext.VRChaperone(); } } + public static CVRChaperoneSetup ChaperoneSetup { get { return OpenVRInternal_ModuleContext.VRChaperoneSetup(); } } + public static CVRCompositor Compositor { get { return OpenVRInternal_ModuleContext.VRCompositor(); } } + public static CVRHeadsetView HeadsetView { get { return OpenVRInternal_ModuleContext.VRHeadsetView(); } } + public static CVROverlay Overlay { get { return OpenVRInternal_ModuleContext.VROverlay(); } } + public static CVROverlayView OverlayView { get { return OpenVRInternal_ModuleContext.VROverlayView(); } } + public static CVRRenderModels RenderModels { get { return OpenVRInternal_ModuleContext.VRRenderModels(); } } + public static CVRExtendedDisplay ExtendedDisplay { get { return OpenVRInternal_ModuleContext.VRExtendedDisplay(); } } + public static CVRSettings Settings { get { return OpenVRInternal_ModuleContext.VRSettings(); } } + public static CVRApplications Applications { get { return OpenVRInternal_ModuleContext.VRApplications(); } } + public static CVRScreenshots Screenshots { get { return OpenVRInternal_ModuleContext.VRScreenshots(); } } + public static CVRTrackedCamera TrackedCamera { get { return OpenVRInternal_ModuleContext.VRTrackedCamera(); } } + public static CVRInput Input { get { return OpenVRInternal_ModuleContext.VRInput(); } } + public static CVRIOBuffer IOBuffer { get { return OpenVRInternal_ModuleContext.VRIOBuffer(); } } + public static CVRSpatialAnchors SpatialAnchors { get { return OpenVRInternal_ModuleContext.VRSpatialAnchors(); } } + public static CVRNotifications Notifications { get { return OpenVRInternal_ModuleContext.VRNotifications(); } } + public static CVRDebug Debug { get { return OpenVRInternal_ModuleContext.VRDebug(); } } + + + /** Finds the active installation of vrclient.dll and initializes it */ + public static CVRSystem Init(ref EVRInitError peError, EVRApplicationType eApplicationType = EVRApplicationType.VRApplication_Scene, string pchStartupInfo= "") + { + try + { + VRToken = InitInternal2(ref peError, eApplicationType, pchStartupInfo); + } + catch (EntryPointNotFoundException) + { + VRToken = InitInternal(ref peError, eApplicationType); + } + + OpenVRInternal_ModuleContext.Clear(); + + if (peError != EVRInitError.None) + return null; + + bool bInterfaceValid = IsInterfaceVersionValid(IVRSystem_Version); + if (!bInterfaceValid) { ShutdownInternal(); + peError = EVRInitError.Init_InterfaceNotFound; + return null; } + return OpenVR.System; } + /** unloads vrclient.dll. Any interface pointers from the interface are + * invalid after this point */ + public static void Shutdown() + { + ShutdownInternal(); + } + +} + } #endif + diff --git a/Dotnet/Overlay/Cef/SystemMonitorCef.cs b/Dotnet/Overlay/Cef/SystemMonitorCef.cs index 6bbdd24f..98d40b27 100644 --- a/Dotnet/Overlay/Cef/SystemMonitorCef.cs +++ b/Dotnet/Overlay/Cef/SystemMonitorCef.cs @@ -140,6 +140,9 @@ namespace VRCX Thread.Sleep(1000); } } + catch (ThreadInterruptedException) + { + } catch (Exception ex) { logger.Warn($"SystemMonitor thread exception: {ex}"); diff --git a/Dotnet/libs/openvr_api.dll b/Dotnet/libs/openvr_api.dll index 5c70fd194ab4560f0b0a60b5318f08bf474fcfcc..ab53dc64919a4bb9101671ee5c12768cb10f33c1 100644 GIT binary patch delta 253702 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

2S`#|6kT+}RqnRQi)X>3 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

ewTY)mAQn2CA9d$w5%TW$f!d`6;0(@{i+6+ zt^eB4r*7JX3YEUxY0&kdJ1hTM9V!pB*u|*BNrT9n$q3U*h8r!z}H&~a4E-|uF=)V%e#(00U}TTbedm;>5m*Im4P>va{ALC)MTX- zQ%|56y$i8Q`{bP;?->m)kKQGX-dPLvo#dWc^kI5sF;wzkhF6E#D?Iq8yS$WwuXM?d zH=2d&6uNS!s#8Qz%j$3ih-WJNE)!jq3|BoYQvLIg(9q&)B?F4@VaS*XCY zD@O^KQ4+dqDp*}R8>?)j-{oFcC4m*fvH?YSw-!Cd->%y(Ym6%cd>*LMUQ=kbKZnYp z29*xnsRDYT!Yk-8D(!GnU z$SjH`<+yleQQb-InUre3TnKMDC@zNy-pb`H(id7)E*G`ri*aX$oP))ZLYe)t%&S zZ-xEE477IyiUTFsp-3QHcJvS9iGz^oq%*nP|1|O>1{5Jw=6; zCAz7sVbX4w4IR6av)1$JHFvr-WxB)$wGz?au?!wWNJ7q)9N$!61(n~uV zi&f-BaOxyh;!e)xfAj7QdHD}Rzx_J40Ct~iEw4|RhT(NQnX`-q^(wpyDH%azG#~@7 zHZmAC9rvswlW%McA{%_DiRVqEai|-d4fca`Fscl}aw;giQU4rf!K4Zf@irL`n(C!E zfw}6c2cK}0K0zRyb1R`8YUt>}o$8?%>Zs1XNwm*Z!bV0_A*uJ0;FQPG| z@?{u!mu@ZiCSfHe(jwHzueUeP!|!cec}uuH+OgL;6TSo{IV<(8nd{`-&7k56k>#Wk z@HNHu+{spN8n%}e#idZ=;%T%SKAq&ASQYm2Ai_{LVMVzaD~k5UC#_gz>>y-0DF=KF zi`&}E^YLQ_)y;)LKCH_jF19b3-xzRgmCL%uv2NqZ*Y^0W1q+U$QU=l<&UhO(*QtC1(7n8YH>RNtaE#8|^3$pQYmt)f1yUJAy_)vF|y!LWj zu%Tk@rIr;_bCvcYw-8)jD!>QC6OMsFR1b9w(1nw7#|$5{a#&^L(p5$0{QFq(i`^f$k&&-bbT%$&S#85wwV(yJ=*#c;`6tjezRs#H`d^0fuJ zmY`Sv+sE`71ydGI={A6Qc&AK1+MJ$|apm-@@bDvKzCDqCZtmD_dFP%3wpe8#Gqo}E zT(Bz7F%(69Xjl~@kKgez#{4v|DsSqL-+WdTP4X^aCD_1v_4ftD_5xi;oz}w}#U@i5 zA8ulNkv6Vxny2*|n&jnZJ$1FabveUWu@`wZET zjn$Q8G;yf^>#@p4UfB+hN-tv9<8|NDu#B)$EqCLmx%qCM+KbN>o4g|C@l8S-i(0$l z+p&*8Mtaf0E4y8AjQl$@MglBaP;_Ot4E_H`vQuJI-6rTrUM7G0>t}bq**d>Fn%o7I z1`+QsplmIpeFwd+JbTs6)>W}awHmK^j)=z?-(iQ9T4Q3%j0ek|rbRPUP&9{$~S{*!PcGN9a=h!t8 zh=NsTkavwe@D}SIXD}OIXo@@@ql(h;!YZiHs5X^R>B2abk8V)b^sW}}xL z09CEAkKJPRbFzaNiTgpv*Vx~cS@DA#Wz;&_t48mNQRm?|u2#n*RODFP%SgfZ$3e$U z1dXz`w_Nf=tE_(g*Gik}yDQbH2j2YGG7glz=nc45aIN6BvD^;3715ba&Yq*xl^~4C zuv@L({qLkVG_wE;?2Ssz0u9%B_#(UaQm-po4eXNvo~X z2dtCW%5Yq41!YiXM~{U!sPzEpJWlG9vb}P(H6+%UX3SD*7^r-my=S#GvPHtX;i_

@ahYxu|TFoD@<9LQ8~s~CE_qk$ck20Zd8zY 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
0sV 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 Hla~JrQs47F delta 261086 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 Yjt+g2VcoV}ZjY0dPs~4h@4$EeA6ofOr~m)} diff --git a/src-electron/libs/linux/libopenvr_api.so b/src-electron/libs/linux/libopenvr_api.so index 39ec4d5e04928690d490676aa69ad864fc05f2c1..198da6225c0d2be75786ae415286a33911321c94 100644 GIT binary patch delta 476034 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�N|Ff>vX1N~Z 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

!GgSIInSVm4 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ⅆ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

-eH)CXGdKA2mhj5)h zg=JDWjO$U*VHs~uA_R0LhSDL5>kJm-F{k}zJdW#8(BuUvoWk`z$VGS|Ng&R)yn{gG zPMO(Z__KHn_ddDvUYqa)-cQ(6dQl3y-V!g;KB+SvNuWevK8aq&vvksO^jACrg3J40M!rZ}F>kk|W4IiSb_(eXnPlv2r2&A>R)(^WKsb z_0xFgh`0Q};id=QyVN85I||gHfcjr}ea8=eO$OA^@uTpt#{=U?QyAZ+7O8C z3CKo^;XNF`4)5joo%j`w&&1=7FHRB|-~`s-gB<@Fzus}PTxOPVye>Z6@#c7Pq!T!c zz-Y&N;VH+j$HzK;CqCZs8TcgeBaLqRoDFz)2C*q}n4QF7^Kz#BVfH+=%Ijy}DAvDE zjvjqyvyN_|v~)Y0ZlB|3YA{{3Jb9)B^ThB$j!(C4hh={?g+yB5O$nH&Q(zaKW*%oS zpz14Reg$WKhv6ymX#0!sxIZzwpPoyi0R(c)Sg*Uo@z6Axv9@2JiEwRS)I4}a^6$4& z2Aano^4z;7pGY8nzZCeB4g)jW8`>>2M8gkASpN!e1fIiZ(rpYLn=b8t#P7wUGsHi@ zGk7Q?el+LdIpRqZeNY0g(P0rC%uMl@@z?P@t`jff1>B#w?bGZHS&+m-l4m~(C#-vy z$dbRy*e#@wA7;@Z^{{l%l~{upa9xQ%wZJTCuTR>KeUrkEh;L>Bm*cTV#ZUDHbe{dc z$pq4~CGZLzmTQNs_>1^&*1bzunuAnV;;+oQBkaSR{oayrmT)t=we;P-spksU7VnJ@ z;uux$muc0=KCPK-!`=}ddQ3*4PfRnJem0zZlyHi$K8v2G-5w8i`-E!ErUsAX3ag|{ ziuRi41UyQ9J;AgWxBCwrG%$h=c{=EkKS7=L>dW!a92w}bEX#I0itB^cqu!Q*mVCGS zkKPcsAP{;&675H#c6b=KAIkf$p?K8siFh2>Z#q1LC-6JHEVjORhJble3ODi78?y|L z;E&^Zyol>F>i6)}Qe2?$ta? z#r>tWQ<#b8@w|SNyp}*}nRK{`rQYuynX!36yb6VD;-MGCf2aKs>Mw~`rhN-M{IdA* zcr-~M_KE~fAP~b-uZoB9K6v&u@oy+R7*D@0{tJGq=2pN$vZ5Z9yNR=g;l-1E;(=LnRX4&UMC&0wM<*03|;`W9*+ zp2cgj63^m!Tuxv1_}fXKNI=h@r@to!!f#1o>0r!QJnHzHcpTRcP>XnKRd517dG0-} zNfXcxRo<7vxwnHIYT-rn>c~64R|l@FdC1p2^P2q zkKx*W4xV@~*#22Oh1>St`Op3s4}t9a!44neIa~{D#|vwN?RVovT-(=QD=TUW!S+Y3 zwdX(oj7C5^oJEJox?qQ{cof(6*WmFFgYAdm3H(@py2iYWXOje;B~al58BlD!B+`r1 z33vkML}v!#DO@j3&)`|df5P*4Qn!7hf)p+g=*)n6;^B{EKuz$w@EHCyz8E(jOZ!Lg zt#}r1BqySzsl84L=Rc7Suh5|*p88Z=@192D(GBAJu@sBT_>XvOqqNtHQ-cq^y7r^w z{O1zr#i_B2AF#j0@P)WuoTlK3FU6bFemS1qEZ!Y2;iaOuT>$@e)OsfTm343b-?P*N zLSIvW4zuy-x8j{xq3`iD-jKqFeIx~P-%0yFXn&si_u}5E+CTo11oA&f;4~5~!_80P z5&TCy^0Rm=yy3@EII&Iq8w#I~$A1ymi&OGrK1z=LDgnJZt&59T zJd5k)c%=G&q`iI%cPXCR!2|9ROI^|qze|UH%%JV3QaJR7xL#CJcm&sL#JhM5*K10R z4NO4W%lXfkO9xxDJFKEZ9@h?4K9>T;e}e5##!I-iAAyHV zHGeI2g`UF0zT5TJ4&M=oRtR>eyGaViaBY7np4czg{%$;lYx}qHY{h-rd)xna0yzTO zq3st^xUl~|9c=qS*1h+StDX0cLw&Dj2Bl>;)HjZ|(7s6fW7xMIvwn#GF|pI(z08d* z>|4Y2U}X=Aj=D+>M7EUo4(9VJEPO4iQ`n zSKBOwqmH-5V@{p{c--+Rc*6I=d;doNWdbQW=wbe)b#DP94~h(8W&bVH{-~l1H0$K) zoY~&eF8H7_;YoO&ZaVKJc){_Fc+n}d)4Dg@`qO2&T^MfdE&i~28@EF%2^dpZwwykx z7=wrKV@dQl9>sN?zR7Gk!OpMAR<@H99)!moUtrx|-kFjpLYbe+v~T&9vTThYZ=4_7A?*ohFJHG0=NCMc;3mgR`O)3w6cTvsZ68l-$>G; z)A@Ys-b%z-2|ctYm1(~gH&tZA>4vEPt)IWSaRdD&V8Tv^Co(Hq*)8`~nQ)WuWV}(Q z+t4!p5+0|0n8o}8PdQ%Udq2PZ1y?7~Q359K_&s>h@h5RpRTe}Ge~X75KjsG}=DR&h z>*rOS3B;Wa6Y!Md>+!7Phx{l7@{ae#i+B@ng}kf8cmkmVWCnh~`cgdV_*OjOc<3i7 zoOS$Eyx{oN)|1|jZmIc?#n8&V@j43jAmT-a*=Hh8%8Tyuvn_ zpxgd1JanK8RClqH@CdFCvb$OL@^{I2`RzWTca?q0bQq4OoB|W^EUssVc@&5}B%=A> z_+Rb4eR2zdJc)G1|KdfbK=WTXm-;i<`;%rDS@-WKoc6clriQGL=AUQX-zW0~9^)Oz zdO9QymJWw=U;ihbt|>mw4&Hk;_*DvrYl)8#HtovzRd}{mwRV0}?J$0CAm9r%QEe&E zodWM>TAgC|;jhbtE7&(A-hw3Prn|ryWqbslciPV{qy2`dAk&jI^GIT z;2mjy37&U6iH8o6{M!C$Jnp-_#nQmX1afrH0sVs)9dG&{8EB|(Z~_gdfM#bkha@qKwzyA?1rs`>thtw7C7^MZMs7=h7kW_=k8J*LC_s3pgJBO$HRH zA6)Qmc*=Ks&}yPv2o&g`3qBh+4T1xGTMIb;D;~!;vuD)(uM8;Q-bv$30?|XIfOfdL zj8DeHhXva&E#sf#reUys#ozTp<^+zj0sriSAIc1FDC3K9bGQ_!LHmY(NS=`6j-l1KNIo7Iy}-~|Fj{3r%gtD+PL z9UDy4*SdELJl=U9{8X9tJMaj3k~*UH`%3{0s87LTPT_TBymlqYlc2pGmT^24^rR^e zNCyKZT3Hfh9bby)9B*Dl+UFgA2ru9|vG1(ge>ini)}oAe5V!xB7#)_dxo@C@>of82aZ*56cLg57Ta)K!Jb~-Er+PIRXxevs z5Ne{P1hRD4pF|hoIb7eG-GLYIe`r6ujOW#lmkCt$+IuH~t^X@vegEn*(&D}ytRGdz z&&Er%pJdy5uS6Mt)Oympl&4zAh_u7|bZ~t)9%?D=^~0)~2eR!QZ;Hq9(_}p6{JnmI zPZ}6bAWH|`G!NrBT({-xc)@AE2`}RBQh0Y}aYuXOU$+Je>x56nb0^6BwA-a+d?cQV zNPF)KVBTvEUcmGFiSKuiU)TQNY#ZsYmWQaLBw*sFi0eNv{0m-aE8d0$x%OZd{4DWB zm88HnJl|1V2h=P?`%a$QcUl_gX#?Ib(Z1;X;Ouq2+n?CwaesZuZ$^_S?kC!t=V|hk zoILqVt8?tv*w)i6N4HxTZ^fE2u1L4wc(1VT4Xfy+dn7Z}rb~WKx0KWE#9Gqrd#BsY zzT1Du(V5K>>)!rfaPoXlo~k?L*4IB$?Fv+??d7l6+q9h)d??b$2E0V!^JE^InO{%b zTojz&L_d-J0cxkf+{~EHcDYv2Ek-v@_Xi&76-;+g9hvt|XWr8@TWq@I$2ROA=1#ZB zA=1q_qZsD9eZYLb%u+Z066^kQIeESz&jzRbzmg|2qKkdXUAHbvbeW7j&h5i+Jk?vg z701d?c>W6Ub@+gKk|*0YxCXCV_jZ|rGYC`P-)8ohb7pgv4S2IDIf-Wa9S%3EokX8Y zB9kYNJ`g*!f#iwCg9GYf-5XHe&r^Nx2S|M~Q_rDQG*Y$jfGd>tO?Cv~*_ zUwF##riaS73XYE!x1Xr>4<`DM4hhHiKTHzk9lrt(T@}o;6puUp6`u3mUifqdr!|xU zWttY=X1JGSobfyW|VYjMTa$Xh~hmskDM50KuKwTAnotP zbNI!y{|yg~llJoGF~)RjEP2A?c>16>U1JCo>2NM1{SJ>zkVN`vW4j|IQ4~Lt0Zqdb zxP8m+zjmrm(mdY!+gJCaBvFdM1;S3B;F3hu=wb?Xk@4dGV{*_#5%U z>*6hWBz0kP3V$H3|Ca2lc&V_j+wFhManhmq;l2U;50m1BkHi<+lc)EpalEuo6~)=v z%}6|r>)V_np2M%>j=oz9o5y?l5dKCIjibOSFJL`a3KnS9Qaq1qfth#_*F1GjkoJk) z!8}PkW!>NZHPLqjvUC{5fci%yQMjsr&iH*if)A7hGN-nZ_E}u>KZfUVyP|UZHEhjD z>jVqjgQsv!^edjlb)eU^VW8n)o{#Yeu6fQpF)1Bl1m<#zdg(-Q6OlyfC!HjoJ4;-@ z7c&PhM8!L@Q`b6KuD&_vD&7j8=l;_lF#=hq!*u*X$2a0>$Nz(mcl@MNWI!o=@1MpJ z80mC)08co+0UzXe!?sc&?)Zs#ub?MQH$QNYiFTH?mk(C$qc1#$>+d#<@ZJ8+iE|e{ zmG*;ZuNRvq@D#3JM_ulFX2wN_)H-(~ZL+jEjUBoEsorGlzwhAqC3v`tRB1r_VVUh0 z*?X!q;V5Cbe>G+<9>;Y`EAW)#pW_eWI;CImJgy%nH#*H5ZoTHF=)5tA`2oAK=SqsB z8Slu<;*0Iy<75d(2p>*(MP`c)C$|!gIpK<@`{hg*=a%+p-|au9L3{l}wgGtF@h5Q8 zRYrF@<-Zc|ZK4D^5NLje6rSf4zR`F4SI|zP9A0$t{E=DL!%n~5nX;85-K4(mA(v$; z^t9pOgkywtb*5)pdEsS#*#7gx8QILe802@Eem0z}+D?)Wp*L4G(-ObI@gDe4$A{qw z$ER8ME*6mva^`7D`B{GZdYM0Z+IKy3Xq2W=8yYRdLmh*iKbOvC^}{kJeTr83EGd?t zz2-R)kCR__$aBP#CQ1hljHW|@4tl`dhv#Uo{w7|+^?>^w4|S3W=-(YRi*la!-Cks5 z9`@H=2o&hRdD?Wqi@5Fs!*O$t6i}anhw*N#=o~zOulC%#$So!i?JSADrNeSO(nY+0 zZ^g~IK{xGXW(8c|6<5Pc_(SBWW8J^WPj{6>x)NbJm zea_eokKwv0r{f7+p9yThlR2kDzA~@EdLK_+gzSf2fz= zK53sn$m>D^5ee-12LvbJX~$RKCC7K+vCCvYOF6C9I)}oSi_1#e{jVW`Fo6gIYKq5j z{UUM%PvKhNTs(T^z6I>R46S)^eO7m+=iW_zoPh2W*U%w>Yk?FV=_>{Ft?ooTifj8h zxak)h&_X<9-9P@c!zu!W{=p6fyokTblKy~a2L#*iz;n0`^lv>?h+^;&Qm9>?{ZpTbj) zFUPZZHwyoOmy!hhi-8RuYaa`E*X;atG9bMcT#n}ki|e)EaXfW>(7(oGL&Wu3P^+ut zPvFVN8Bvr#_y*~qD{(g-#fQ-TJv@iYhP3}E10ESFdH$q*%WkZ6LY#|G()1-zATXT{ z_v48hrGs7z)|Byz=ShJg?e$vFwu}$)-Tp;Y>?SGDlD&E<9a6)@L-^Ntdbqe=3mVvm zX5J=C-z=`zf*78~_1^Vfyy&^NY!q(DDbs4Jep^;$3uPvg2N zH{m(lyB7GHtx0=SNHXoAB_3QXqPVxUSp9;X0s(7fa#9UBLl$#Z$Pp zACH@H!S=~z1VRM#pTGGHPv0HvaAXfDoW*sZF+7KBp8N2~_+Xw_#qIq+0UhaXI^-t= zI~?Cr-Ywn8yBzj8)5drEuaWSEq#66rX|zw#UN`a8w2%1hGr#mdq*{YC){7h=a%3_! zud;8{R@$(4gclgn8p1p9>_i#rB)r}w(mryp_;qaL^YQE?aoF68=WsoPtQ5DuD?>mY z*4ZxtU&??SzZoy$x<>QxlH*0(OqKyvW&-tlN&b-U_8g&s7=f_U;T}AK>&)K5qqxp& zHy*=vVi#W~h2#6WcaB;_AVEN9wiQn~erRt=l*V-e7vWjQC*nEBS6IK&zaSIP3+Z+n z@V?vAc9xtKQ!L#PmrLQi)BXay==dF(F<0ANY(bgu=eW5~wontwRKG&XL>xaIkK=kZ z9fq4JlIKbCED*PU9zdWQfz8?>EgjTrUnzxS_`9_4iif94`_J$(xS1xd_YW)agzt6} z>-W%h5=hhGP!hH7BZYJLk@#f1==e4~biWkVJV*6q<#0cbw~O^A5GU{r1*YJ!2PDxr z{7t-w>(_dA;^FDiUU$8g_A=@1NfBJ{2L@XA--ag$=v8nQ9rAc53K#Iuj9`H({iHw` z??U@i%J?;SVg_%+E74&VffR|<3wYY`O8up97T2rbsdx^rLH=QQeor26{q1WWfx@1E z_$IvQc+IP%a0%DKop6(p71F|^@eqEEq&JI`1X2Wa#@q0;(%*cDIA(9?e%aPkEd`wnqJ4VxE=*N@w|A_=;3tnK$esa z>PztOLsD21{eVYtJqp6tNS+k_9TV$`CmxnOV|};Vey=jA^g?P=7q__zXO2-QWMU z!x{oPI_PKV|KfRE_v%xxlfnh3zzulO@yGGfUYFzVQv&8uSqUv%eXtY=;ad1?JdEq% zGy+fKdXKmS&pQ6=;G`7D5zxcwsO$f?Uy7UAGEm(#_u?^JkERvcJ}d3@XsR(p?kV$0 zZW51`eaM{V2khS-b9L7n!fWVY&XdmrwEY9LZ|1aLVck3DhbgT0Kl|Mv9>Mqgut`S( zQK!Q=JcjGO@*W;{yv|T5kZ}AmJcYA~?Vqd?NE48Svj1isp2e?Vg_>Z6t$ z@G!2YK)2*QHD2MaMtKOSqo6!Z%5t@Z&PjFcY`|k9zLy z|FT8x<9GrwI_Lw+U3daNf<*0xNrANEci}nwDB7>ai~F?qkH6D~v!rumq*~w^JnZ=qYi%*vu&71w7)k zKWK#Hk37ZOa7}a`ffyZh(@ZMk@8NOUcVnOjjASJoKL^j@z2*F8|7_U}kmy}JG*@P< zd;9*kN&(l~;St*F`C~L5#q;D(zC^&xlLET8|DgpOKY5fC4&!>5-GoORUxY_-{V4qx zar-ZIJAszBv2?h;LmP}I9G{P;aGk&pcpBG%9y40F6e!}duEt!0mvH}+c5nO7ClH!1O%LTw><@V4Y4LN|W|2FjKnmBL^aebQ>(y@| zp2e$>=X>k^{eR909LZHNk2j)2AH3-JOx!F8?n9sAA;;^cWCGy@-2dx!{bB+UI;c;@ zqxc90vzn~a|$MF+MG!M_>x-GxMbNC^&KW41tFW|Z<`{BtF zfe0NQClJobfYhswlSDCG-$Zu9)41-8%kV7TlKh9?&49#{X5M}h8Au?tL<&dgumI2F z`mlK$Uc~j8@0s^V0kc%{X!~h+7?+9J<8M8I7=cqLTz|YIN(VX^(*w`rC(u5Fm+*G@ z7kK1(8BiO%@dTUS|4Tmty3<|l1?;_B5s%SfE*@DXi8|nQCQADhuIGt6@q**q@$d`W z|92%(-+Lud!UnvT7TApEaV>DcBxxUdQQE7o!sGaj_fhy|X|IRh3wRvAm-f5y63)%1IctiZxn7Y(8n}H51@JRTv=WcuP4NBG z(msWsi+92cj*r2^$ycSYCR#@z=6KVo6u|Wz&oy`nug-~OE^c0z{CZXV77yV`4IDj9 z3WS{w*W(fVLuU3Y9$Fq;x$T+;#l!hvft`2+*8-nhxhY!qUAX9dr{sSH_QcRN6;quX&!v^SHi`NNy_=h|HEmMLNu8Kp8yst_(;M zeO$(CXC+UT_I=3{7q|0Y6P(#RI=EiKL$ucc^?FPSX>+4l6{J12N zz+R8z(f4Ga+WyHh{v)2Iz1|TWKS%Nh+}1ZY5XjQuES6|d886{Qr$DDCq=4%W;U(JZ zKJ=A!|Nh?%9RH*wGVjZbyEC96cnsIKW*hOi<6WMTr(6*pTIpM`vDUpCob>zL|5v8K z%LK9{Iu7577jXTOa;v$LsD$g|wR5d|pOK{=6=_DEKL4-1xBm8Z3xUvDnX%r6--k!= zF4Ek*ju&vQx@J=u{}YdX5X@gcIZtK~C!kAo5}t7UV!YCCQgSW>8fx8}ahFGA#`C1l7s&pp$MFZ58^_p>1%D=97&c;=1qs zlUZ@6UBE^Qq`n*OfajfV*I4&A;8T)l5F2)UnfA}%MQ2#+#gnGw1pcIhStnaa$6Nmy zDZKh|kuDT&W8L4PPWub-FkX@NkKqyD2itFy5m-qe?j)+TPzvXmafJ4rtb2vs_T%xC zlV?q){aCx;)t{AaZukN`>vWr9-COX`9GSPi=Xk$N`-2uq{=Ac?yLFo<^XXXorS{2X z8m+~PPUl~wv-zGugjs{?IVtA0KMpq^1~=jm>)s%)8D|IaOqoW%;9;k8+r?7M^*iyX z)Ba8C-pa-2%F5|EpyG3W9{bH2r$Z+Rn7HFp%J^q^iuSrHf8$xl8!utg_-;?>+F<~J zqSIk6Zq~~(YWuhFu;Z1NN`a{3o$)yCUpBl;$~6R1PKWt;*6|&9-tm*3m%>HIleqav zCZKO0=UMkJ=@BQejt+6hci?Hq8!cl=9X}s0Ier@+{+LU;j%Y4{*vG+yjiBx)gSX5xuG1thSnjIU1; z$U2EicmeNCfod0}bPit$XJ|xBcmOkWZ0UnYo`4~d-}eqO!yHzOgBxp z8V`LY>GY>9ci{Pr;+ODv@z9rLSm7_kN3%F*iTAeujzKUmfDT#5CzSDLwZNB>M{ksORug@%=WEcGI zGT}LRnr_{g-MhWg*WMuKNFG zVV?tTKTabt7;(xi`0IWMUN{Ve!vPC^1w0IU-bq`2giWULf#CKNR1oj%h2Va#COifq ztnnAX#m^LIKMMW8f*%EsY4+7WMxn&7J;Jgrgvd!sz}tS31%HJD!JZdK>VHBB;u@a? zE>2N=vX|TcdkFRfK|Wk&7X@-^d=t0}oC`f?!Mp#P;&@=sN5_+jo4+s95*&tuPvcpi zQlNmw=Ya>od0l#y1>XTKPUFTFA0DT#6V&Eq-h4MD_DTo!I%576!ehbx;GQ#N&tDta z0PefS>G=B!Lhzbkrl|87B@TnrVvZ2m;1SJ!9C!@89|{eCyW&*PNbrrH`6)pV!V?e< zz`bf`ON*AuoprUoNw2*+e?Y#n*B7%)dbZOA2Qpb z1MgVa*Z!R1*w0ZxS07XG=1@HVN#fih7Kl1mt z;JL)*QowoI9GkHD=D?je5<>0}KR4==|V8K5C_x?fl!;t1Qco@7K zllSni%yQ*E|37m0cNOyZhy-C*>*MnEARKxfqW%SJ#M@&)-UJWVAYNLH;`IEQ>|J$< z4il4V^+9Cw4n^j*KDIJ>ks9+PJnZI-8{4xTLEs6GYZTmxGx1RiRX7<4~^Mzx^7 z80E|5@=5Y{=o8#HTt9H(OboX|a@E&uTDX{TM27P_V-(J#xjiho`KU$B?Ol^+h+U!U zHk}$G#0hC}Tt_I*GA+&!lgs}z>N&aaoG;&~A&SHKSL~oWnK!3C^}&JB<9o7qwIVM6 zgE#Z_I=H<};uzHWfrP-Ar#npNDHwZBZAL4kOe4G-5yORU+!{C8F#H(Ou%sxT( z!CQ#)!uCq=2>2Bg`i1@ev{j?;{I1>6UI^}-T72yR21 z@uw+HXe7s>{9*@$Fa+Kw8lE8saVI%&f{EZxaPGkK;4yISKvJCIxbNn~)Z?*!2p$NW z;B{~xIQJl}k^%+BBnB!14}x=?2zVI0Dz^O};QmN11>z@I-uVk92#zDp*B(!Sd+#OQ z7@sKZXHifI@o`A-IC!iykzW9Jmzmrz_QGM}ISOQ-Mh+i=?+1@fC;kq;NIc*?*@xs8 zujg|6SFo_;dO@CGm_JP%AN$12-w@~p;=D5+1^0sU zCKz^s>;vErlY@IxVuBUm9&k=j?IPLxz*7+?03O_#80Tm3 zkmTn6&w+COpg<8g)IgxU;L+WQfqGpc`xy8H+5+NbaL;FC&++U24~2ru5vAkr2^J0} zCO8Wo0OvqsFH@ipI2ZaK@bJ;ZIDN06W8fTT-4#E20AU$+qShkGJf#NCQy}K6z@61; z35lOzSQ72r;duLsXeSdg$vt{3Dky!9C#oO{&u- z&kzyqBSFn1RcMOv!M-VW#&#x`&y9yY-(4MI@(w8?2nR|pm)sC21kMjInqj=RT3)|a zK#oA}jXe9n#YhUoyk0e`%MH$7U+QS`4B^u*{RhL|3wyr%=p~*j0uXpWX2Bt(@g?Bf zz`1{Gz+>Qi)<0-$Tq7^{YgMOuop+K$EA%hRNeyAB@%dk^e++-Di7YvltTmqYex z^4msVDfaKo=65I>UUw!<+L>c&*wrFNs<-FX7Z9h7gzcS|RXBY(5;En!_G&muBCv4kkX0 zj|2B;d=Dvmn) z^sP$?f)IEl7J`SsdFT#;hc(_Zh2liOTcFU1;Bjy#_!h~{t8aT9s+33KcQ`n~dHuO> zJq$HCA82#Iy&B&Q9sqBN#CAKy3D>DhXW!NkWlzPglve_VSXcsPYP|CHn_+zSV~ z2oT~+3*N9HIsp4T^mwENUkL7x!eJI1q7ZamKaCQ2?9^l4+lN{3x!^w7YyBbph z_cg&xF&W$g?nL6%;69BX0S|)nCb*#q#Sdxx?@i=yy3BU@vp$6;L}l1 zgQgV6lSUDk-vu58=c8a5c+3ys69hU0A)HQu9sqCDj1o9Ai1SZG9|8A(kAeMB@Gy8| z@YXj_oG7@TADrle5X+F2H#j~Mi<_Jn32=^64DJKRa})ex9fTl+ zn~>lHcm$jidzw=M;h=)DVP6662Is5R%ivz{EZ7&eP;ul(_Yi~_7O`G4g=7(EN(uVH z;VgI*oO{;2B^4A0=dgmUz}?{dL+RQbDNq2M zuZV_$hr#)~M+?Bkjg*+V|KAWi5I9hyPDr5fDd1snUU7LH+}VZ_7&v#F0gtpL&Qo&d z&Srf1zgKEP5eXuu@i)Qa;72e*zp{Nh3@Lc8o2UbE@Q&cKz@6=tz1;tAhp-)j&lH5< zZFz|Uf%Ey>?V<#t1107Jv%y{9e7L?3?gbyO@~Y!6C5r+@A#j4R;4v-1YH)i;O3c>* zXTY7{kDz0{yHNZPILDtWxq1B`hQK|D!Xc(5$n1(C1?Tx-BDl9x;wIP*?gQueHM^mp zPPqQ(6_L9j#NgmX4_*RycTP-j4%`FI3Ho)X1Oaf~1Pj5#;5jt^$>$nCu-`-p%8}U7 z1C@fm0bT&^b&>rf@YUc^a6ayT2KQx=eE{}Z{%i~>1U@{h_#W7cE)# zDxU!!A_uV&1$_tZ?oNgBifYq76i4S{!M(8ensMauw-!PK0{1L#!F&FV5=3Fo1%<$U zJ*c2wDDWx>1LN^v}}x1*r4>$sYK2(0}SxQO9vh650s zrzin`R;WFM5(mNg!%iRY7&s>w4IT&QQ~fk>ahl@y=Zl!75Ihk0x-e|PcY}LjKLSH~ z3Oo#cBe;Dibsz@51H6|XLg)-t#150equ|`LCpZxJ2MDwtJRGMuh2Za6@O|KZXC*l- zfkWCbsx$(=3VaN>?-#P)1ik{?b(VN5@NdDr;O)R2!?7ue`>*~0eiVcd97e&R0^EL% z5~O27cop1rp7^V<{}?<5{ucNlj{hs!=bCZk@z-wzRb;6_wP*c3-kOywRNQpVYTyPgS7qlMS ztJ(jb44BIY>= z0SKJJL1Ma*+ak_!u5ALl(k&B7@#fuPP z)kxR@heP0@TEshnr{qvU(PZL#(Sd&8p}NGM1-~EMokH9RK2LJ_|1&ifyR<8xwWiQm zL^Zw({Gi5vW+ymVEvD|sp{?9_b6x25JqS6^~co#ed zPW!wNM=f~myC{yRM?L-;asCb-16T3Q<8KE9ubmve#0*&PZVKeCPn-+t4ITmKf<{~L zY2Y!~zl?&G-Hk=eV1vX2AHc!hka!9%K(2s0(~0v;ci%l!s0Vx)66^vGf%COt=h0*z zN%vEr?r>NEL1Ykjfmazr4lZy$YKp-F;J3m4Yw##|3HX3q6q-r#>(TrtL>Ph>!T>ll z8%qvhjn4-cjVKV?Uj+APymTDJ34wP;eE)t3Q3zuo+QO0(}qTuvM}B#!1VI5@%i zqer2!Xpijv!xr)q@Sqm%Rq!x4Z=4T}N*T_7&_X@~9@WBCFQo3owQx?!Rrh0B_p>eR zM-p!@?9RmQKL7_8IM*xp&AqbT=Pl&z;2tg9m*76|F4!!mEqKid)W0z78^OLMarxi( zXu>UUh-&;^3;qxAxMpuy@HfEi&DA)`S%NFtlOSB<$G}~tgZ$ri(SxM>sb@NOg8N|4 z@q7OjS7(V)5Q3URi3MK>9@gwPSny9JSL-e!pDttU=)kv<8y`l~8v1{Mg&h`rHmxy{ zcEXyQXs_WVuO=o>5iZ#C=aufTcWU+{VDHi57m&Si&%U(OMl)dK(~K4v<@@9}7GHoI zgv^uWHe;ib_d*Us=1zWZ9FemBSI7~_d=%83L_J)lRou$t@;^z3J)b1|z&@OYR{+7sU;__)~E$FaJ!4=pAIEYrnTVkWMn2fy&d`K-4#)Ahskv%UbECdgOvwalY zldbIKZq^zJP9zA|c+vxuIAA&m!P~kScnF*mXIpR&c=Y->YB!$*Ar65Hnq$FNfjfIr zkGY_Cz}?_n&_N4+R&w)>o=*#uQbautf@fod+E{Qmcog=0VCP!!GVpj$xtgqA?6CNn zkif&>_FmLuw*SxL6P$;1n+4ww9)vv?+WH|XNaKF-5CqYW5_3U8 z3%(xQ341Q|V{kV(7kbo!SDB^?lHceH!+|T!F@-<#m%yF3B^Da7;NO6|Vb6tL0QV}c z_J8hi=5!jO035gn-7L5VJPv#Az)A~#8r<9eS_jPIujUL&e7&INoEG2#IB*a8fQP`j z(6JVL7P$R(O3a0RHUo=cy3lMUMgk5zLN{CR(cmH2bD+X1lNGX zN^8!df^JOq0#bfyJ2z$37)?^NR~Uz;H~2U21_T^=yX56i3c3l_5DVXDgwH|}^J za4$HYt?vW(X=%zOS0Ad~TPX2ps!FUN`&^+ryp2FXE%DdjVQ_i3-h6fV2NfCz=WE>l zM#;Cbf4LU&RB-1Y8kSB7Hy=C-UJCv)xMwigcfcy@B@3SOh*_4rB|nrLhQQ%168^-S zKZm&|Y(B95~JPa5x9*nb7?LmZxz&JmZhE`*yfj`g3Ue(2l<9)bPCu+IT^kD)@j z10~=d@GRJGl3a~P&>W9CLhv`L_83_|$^rRF`BjmNRS#1#4hv1n*0`Ic@ z*a19f8K+OA<=RS& z{GTN%r)C~Ci;P7IE;pO3^>Q%l%k=?YpTv!}7u>7yGvrot0lB##^9ijbxKnfMXOy3m zLp&6+U6Uu9vTYVMkC{!@d>99@+%z5IwgX&bQ^|ZzJ8T@0Icz7W`HdQ3tU4uOCN-_7 zaZ%HUnnBduLCsidCQ?&I&7;&jNzD>!R#NjaH5;heM9mIrJ}{fXpDs)i&E>Ul;0@Yi zc~(4Ua(Sx(UyJ4S>}F3X`xFrZ?~I;%jFD&LD9(oLh0KG$)+m><|Bxxm=WA@FY=d}z z3sMz9a3^>TaG%EOfx9)H4(T-*hgNWihp8Y=+yUIK1iFctGQg!9!Y{ z=EQS_S953w2bacO;2ted4{*C?e~Yp2tnB{nkcH+p)UchCat`F+hQ#jY8d*yALiTC$ zL?d6x#gM&_d5|757Ag4=$no`w!5=r?Q}RC{M>Tn|QK{r-AV(l`@RdgM^HN>|*`s;C zZj4m&7RWA5-f5I8`4h-aE%;tzqmmCm4!@FE`FF+3VT=`|A zuax~Y7Spa}*Su4}U7A}%@c6pKVw!+QG~NKF2em-AfO|Ci z0VYoo!!Wz^R}V*k4>q~HlEil>#a$2v!T}eoVl4P=TA%`OH#o{YCH#;Jg!6sh}&1^H&2=oLb;#wK(;_&uDSfQ@6}Zl#^PZX5c5ZK&`<4s|D%^ z{(}~$EBFyDPA_o(VJ%Q!2#2&lgTN1JfkuFTsl~Y)e4iHQUhvO}s~_sqs{q1oEzkqt zyR<;1;2(o?oEhNnYjFbLI}_r_?LQB~J6fOx;M=u8OTo7!1QOyo@He$MFMx-&IIk$~ zmxtf0TA+<^Sg!@z3cf}Qv=jU#EzZZ_FKBT-1Aks}bN}bP`b!AQwLo8kKcfXY0=^WS z;~WQHti_3g2d~AUs>N@zM6On= z8Sr5(K}$GH(*kt_FVzBd125L%+zdWhi_;%`f?o?X3_^hxCkq!#EA@ZsPbXAbxfEzW%KL5XqvVzDV?hzr_}Lf?gh6ArvA zaRT;sobTP}K>AYpC|z-$)=_w=unlaze>l9|z2Y4vRv=tJ&^rMC2&Y!j9) zl7D9!eXqz5ymP6UPt9U#mQeF7H7`>0zoq%<8MY1dW)n4=Rg-Cqw52zdk1QXrRd$e! zV$>X?rjnZ9sj-?|=HLD1-^1qLW9Hwu`S+6g>#t%^rS3yCE8=9+RgCZ!0=o^MY3ZaiVfnUcGKW&z`0@^+g1qggMaL zMrBo5*HOfCB3>)_B`>4=VeJESeUr;|g_e}RCG2~_z9;JCUDFHh)cP?`a=F;F=&@A) zQ!v>zBC)I6OfHuykczu{#B`O9yq7nb)T=*AxC|cshK9Hoc!OuCD6^Y!^Wlgp=M(JK55=Uy?@$# zZ+pZvv(2GKeqUEPEn%Z|=KHK|$Pqyf{@Lh{-~sS9$Za=P$y{p9PBn6AMXpyG+iIp~ z4sP>YlDwnQ;7=>VUBM&Ce5;Q_^|Y|R)eK#2pp?zt!fGe>d`!CNs$;>4UStYa(kv4 zH>`6ss5sp%!*2S@jzOsp>h56(2il-D5in8K|e7?d`Q8cx% z@PQuPgv?SfeY_kLwtAp&W?q4`FDq0dRWvnE)sa75j&NS?s2rKNqw&~!N85C1B1fe_ zj4v|9sb!^83Vbt-S2sAiCHabrij3F>hsWsks-rY{f*jAOqO@>|+_uKnR~>_U7yAmQ z(71{Tst_@ups09ip^#C0_m#@Gs$emdHl?Cv#qzBj=_wW2y_;_Jyyn=Iv?!QlWNvbJ zZDC{PCdW;wd_$Dme;L~)t`)+sJ3~h0CP#K^6w@!at&Co8N~?32P0tx6Z#uGT+cEdp z2ODp^>F7}_hW9a}Qp%}(>y+CWMz75>hgb$`o2q*j&Ap9IGV#$gqo_;t cnZ}$Qjt;e4sr03dy~g$(j%?dyqf+|+KhLZ+P5=M^ delta 476162 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

0qOQX}X+JFOh--f$?MI|-yY>gt-YD&WYriY) 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 z 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