Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ValveSoftware/openvr.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Selan <jeremys@valvesoftware.com>2017-06-13 23:11:41 +0300
committerJeremy Selan <jeremys@valvesoftware.com>2017-06-13 23:11:41 +0300
commitbcac1bfbe2be3c1ff37e4f62b8e412fcdf29248e (patch)
tree476ccae3c40a328d79cff2f5f4b916a0ae783fd7
parentdc860fe405dd93803e55dc662cae590edf6c7cb3 (diff)
OSX sdk changesv1.0.8
- Adds pre-built OpenVR.framework for macOS support, defaults to universal 32-/64-bit binary building, see src/README - corrects macOS framework structure and @rpath of .framework and .dylib binaries. supports building 32-bit-only dylib. CL3996577, 3996634, 4006665 [git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4009638]
-rw-r--r--CMakeLists.txt10
l---------bin/osx64/OpenVR.framework/Headers1
l---------bin/osx64/OpenVR.framework/OpenVR1
l---------bin/osx64/OpenVR.framework/Resources1
-rw-r--r--bin/osx64/OpenVR.framework/Versions/A/Headers/openvr.h3721
-rw-r--r--bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.cs4997
-rw-r--r--bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.json3887
-rw-r--r--bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_capi.h1918
-rw-r--r--bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_driver.h2677
-rwxr-xr-xbin/osx64/OpenVR.framework/Versions/A/OpenVRbin0 -> 1318196 bytes
-rw-r--r--bin/osx64/OpenVR.framework/Versions/A/Resources/Info.plist18
l---------bin/osx64/OpenVR.framework/Versions/Current1
-rw-r--r--src/CMakeLists.txt28
-rw-r--r--src/Info.plist18
-rw-r--r--src/README12
15 files changed, 17283 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ee4aff7..94de3ce 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,6 +6,9 @@ project(OpenVRSDK)
# Setup some options.
option(BUILD_SHARED "Builds the library as shared library" OFF)
+option(BUILD_FRAMEWORK "Builds the library as an apple Framework" OFF)
+option(BUILD_UNIVERSAL "Builds the shared or framework as a universal (fat, 32- & 64-bit) binary" ON)
+option(BUILD_OSX_I386 "Builds the shared or framework as a 32-bit binary, even on a 64-bit platform" OFF)
option(USE_LIBCXX "Uses libc++ instead of libstdc++" ON)
option(USE_CUSTOM_LIBCXX "Uses a custom libc++" OFF)
@@ -34,6 +37,13 @@ elseif(APPLE)
if(CMAKE_SYSTEM_NAME MATCHES ".*Darwin.*" OR CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*")
set(PLATFORM_NAME "osx")
add_definitions(-DOSX -DPOSIX)
+ if(BUILD_UNIVERSAL)
+ set(CMAKE_OSX_ARCHITECTURES "i386;x86_64")
+ endif()
+ if(BUILD_OSX_I386)
+ set(PROCESSOR_ARCH "32")
+ set(CMAKE_OSX_ARCHITECTURES "i386")
+ endif()
endif()
endif()
diff --git a/bin/osx64/OpenVR.framework/Headers b/bin/osx64/OpenVR.framework/Headers
new file mode 120000
index 0000000..a177d2a
--- /dev/null
+++ b/bin/osx64/OpenVR.framework/Headers
@@ -0,0 +1 @@
+Versions/Current/Headers \ No newline at end of file
diff --git a/bin/osx64/OpenVR.framework/OpenVR b/bin/osx64/OpenVR.framework/OpenVR
new file mode 120000
index 0000000..6eef4e3
--- /dev/null
+++ b/bin/osx64/OpenVR.framework/OpenVR
@@ -0,0 +1 @@
+Versions/Current/OpenVR \ No newline at end of file
diff --git a/bin/osx64/OpenVR.framework/Resources b/bin/osx64/OpenVR.framework/Resources
new file mode 120000
index 0000000..953ee36
--- /dev/null
+++ b/bin/osx64/OpenVR.framework/Resources
@@ -0,0 +1 @@
+Versions/Current/Resources \ No newline at end of file
diff --git a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr.h b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr.h
new file mode 100644
index 0000000..79abf06
--- /dev/null
+++ b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr.h
@@ -0,0 +1,3721 @@
+#pragma once
+
+// openvr.h
+//========= Copyright Valve Corporation ============//
+// Dynamically generated file. Do not modify this file directly.
+
+#ifndef _OPENVR_API
+#define _OPENVR_API
+
+#include <stdint.h>
+
+
+
+// vrtypes.h
+#ifndef _INCLUDE_VRTYPES_H
+#define _INCLUDE_VRTYPES_H
+
+// Forward declarations to avoid requiring vulkan.h
+struct VkDevice_T;
+struct VkPhysicalDevice_T;
+struct VkInstance_T;
+struct VkQueue_T;
+
+// Forward declarations to avoid requiring d3d12.h
+struct ID3D12Resource;
+struct ID3D12CommandQueue;
+
+namespace vr
+{
+#pragma pack( push, 8 )
+
+typedef void* glSharedTextureHandle_t;
+typedef int32_t glInt_t;
+typedef uint32_t glUInt_t;
+
+// right-handed system
+// +y is up
+// +x is to the right
+// -z is going away from you
+// Distance unit is meters
+struct HmdMatrix34_t
+{
+ float m[3][4];
+};
+
+struct HmdMatrix44_t
+{
+ float m[4][4];
+};
+
+struct HmdVector3_t
+{
+ float v[3];
+};
+
+struct HmdVector4_t
+{
+ float v[4];
+};
+
+struct HmdVector3d_t
+{
+ double v[3];
+};
+
+struct HmdVector2_t
+{
+ float v[2];
+};
+
+struct HmdQuaternion_t
+{
+ double w, x, y, z;
+};
+
+struct HmdColor_t
+{
+ float r, g, b, a;
+};
+
+struct HmdQuad_t
+{
+ HmdVector3_t vCorners[ 4 ];
+};
+
+struct HmdRect2_t
+{
+ HmdVector2_t vTopLeft;
+ HmdVector2_t vBottomRight;
+};
+
+/** Used to return the post-distortion UVs for each color channel.
+* UVs range from 0 to 1 with 0,0 in the upper left corner of the
+* source render target. The 0,0 to 1,1 range covers a single eye. */
+struct DistortionCoordinates_t
+{
+ float rfRed[2];
+ float rfGreen[2];
+ float rfBlue[2];
+};
+
+enum EVREye
+{
+ Eye_Left = 0,
+ Eye_Right = 1
+};
+
+enum ETextureType
+{
+ TextureType_DirectX = 0, // Handle is an ID3D11Texture
+ TextureType_OpenGL = 1, // Handle is an OpenGL texture name or an OpenGL render buffer name, depending on submit flags
+ TextureType_Vulkan = 2, // Handle is a pointer to a VRVulkanTextureData_t structure
+ TextureType_IOSurface = 3, // Handle is a macOS cross-process-sharable IOSurfaceRef
+ TextureType_DirectX12 = 4, // Handle is a pointer to a D3D12TextureData_t structure
+};
+
+enum EColorSpace
+{
+ ColorSpace_Auto = 0, // Assumes 'gamma' for 8-bit per component formats, otherwise 'linear'. This mirrors the DXGI formats which have _SRGB variants.
+ ColorSpace_Gamma = 1, // Texture data can be displayed directly on the display without any conversion (a.k.a. display native format).
+ ColorSpace_Linear = 2, // Same as gamma but has been converted to a linear representation using DXGI's sRGB conversion algorithm.
+};
+
+struct Texture_t
+{
+ void* handle; // See ETextureType definition above
+ ETextureType eType;
+ EColorSpace eColorSpace;
+};
+
+// Handle to a shared texture (HANDLE on Windows obtained using OpenSharedResource).
+typedef uint64_t SharedTextureHandle_t;
+#define INVALID_SHARED_TEXTURE_HANDLE ((vr::SharedTextureHandle_t)0)
+
+enum ETrackingResult
+{
+ TrackingResult_Uninitialized = 1,
+
+ TrackingResult_Calibrating_InProgress = 100,
+ TrackingResult_Calibrating_OutOfRange = 101,
+
+ TrackingResult_Running_OK = 200,
+ TrackingResult_Running_OutOfRange = 201,
+};
+
+typedef uint32_t DriverId_t;
+static const uint32_t k_nDriverNone = 0xFFFFFFFF;
+
+static const uint32_t k_unMaxDriverDebugResponseSize = 32768;
+
+/** Used to pass device IDs to API calls */
+typedef uint32_t TrackedDeviceIndex_t;
+static const uint32_t k_unTrackedDeviceIndex_Hmd = 0;
+static const uint32_t k_unMaxTrackedDeviceCount = 16;
+static const uint32_t k_unTrackedDeviceIndexOther = 0xFFFFFFFE;
+static const uint32_t k_unTrackedDeviceIndexInvalid = 0xFFFFFFFF;
+
+/** Describes what kind of object is being tracked at a given ID */
+enum ETrackedDeviceClass
+{
+ TrackedDeviceClass_Invalid = 0, // the ID was not valid.
+ TrackedDeviceClass_HMD = 1, // Head-Mounted Displays
+ TrackedDeviceClass_Controller = 2, // Tracked controllers
+ TrackedDeviceClass_GenericTracker = 3, // Generic trackers, similar to controllers
+ TrackedDeviceClass_TrackingReference = 4, // Camera and base stations that serve as tracking reference points
+ TrackedDeviceClass_DisplayRedirect = 5, // Accessories that aren't necessarily tracked themselves, but may redirect video output from other tracked devices
+};
+
+
+/** Describes what specific role associated with a tracked device */
+enum ETrackedControllerRole
+{
+ TrackedControllerRole_Invalid = 0, // Invalid value for controller type
+ TrackedControllerRole_LeftHand = 1, // Tracked device associated with the left hand
+ TrackedControllerRole_RightHand = 2, // Tracked device associated with the right hand
+};
+
+
+/** describes a single pose for a tracked object */
+struct TrackedDevicePose_t
+{
+ HmdMatrix34_t mDeviceToAbsoluteTracking;
+ HmdVector3_t vVelocity; // velocity in tracker space in m/s
+ HmdVector3_t vAngularVelocity; // angular velocity in radians/s (?)
+ ETrackingResult eTrackingResult;
+ bool bPoseIsValid;
+
+ // This indicates that there is a device connected for this spot in the pose array.
+ // It could go from true to false if the user unplugs the device.
+ bool bDeviceIsConnected;
+};
+
+/** Identifies which style of tracking origin the application wants to use
+* for the poses it is requesting */
+enum ETrackingUniverseOrigin
+{
+ TrackingUniverseSeated = 0, // Poses are provided relative to the seated zero pose
+ TrackingUniverseStanding = 1, // Poses are provided relative to the safe bounds configured by the user
+ TrackingUniverseRawAndUncalibrated = 2, // Poses are provided in the coordinate system defined by the driver. It has Y up and is unified for devices of the same driver. You usually don't want this one.
+};
+
+// Refers to a single container of properties
+typedef uint64_t PropertyContainerHandle_t;
+typedef uint32_t PropertyTypeTag_t;
+
+static const PropertyContainerHandle_t k_ulInvalidPropertyContainer = 0;
+static const PropertyTypeTag_t k_unInvalidPropertyTag = 0;
+
+// Use these tags to set/get common types as struct properties
+static const PropertyTypeTag_t k_unFloatPropertyTag = 1;
+static const PropertyTypeTag_t k_unInt32PropertyTag = 2;
+static const PropertyTypeTag_t k_unUint64PropertyTag = 3;
+static const PropertyTypeTag_t k_unBoolPropertyTag = 4;
+static const PropertyTypeTag_t k_unStringPropertyTag = 5;
+
+static const PropertyTypeTag_t k_unHmdMatrix34PropertyTag = 20;
+static const PropertyTypeTag_t k_unHmdMatrix44PropertyTag = 21;
+static const PropertyTypeTag_t k_unHmdVector3PropertyTag = 22;
+static const PropertyTypeTag_t k_unHmdVector4PropertyTag = 23;
+
+static const PropertyTypeTag_t k_unHiddenAreaPropertyTag = 30;
+
+static const PropertyTypeTag_t k_unOpenVRInternalReserved_Start = 1000;
+static const PropertyTypeTag_t k_unOpenVRInternalReserved_End = 10000;
+
+
+/** Each entry in this enum represents a property that can be retrieved about a
+* tracked device. Many fields are only valid for one ETrackedDeviceClass. */
+enum ETrackedDeviceProperty
+{
+ Prop_Invalid = 0,
+
+ // general properties that apply to all device classes
+ 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, // 0 is empty, 1 is full
+ 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,
+
+ // Properties that are unique to TrackedDeviceClass_HMD
+ 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,
+
+ // Properties that are unique to TrackedDeviceClass_Controller
+ Prop_AttachedDeviceId_String = 3000,
+ Prop_SupportedButtons_Uint64 = 3001,
+ Prop_Axis0Type_Int32 = 3002, // Return value is of type EVRControllerAxisType
+ Prop_Axis1Type_Int32 = 3003, // Return value is of type EVRControllerAxisType
+ Prop_Axis2Type_Int32 = 3004, // Return value is of type EVRControllerAxisType
+ Prop_Axis3Type_Int32 = 3005, // Return value is of type EVRControllerAxisType
+ Prop_Axis4Type_Int32 = 3006, // Return value is of type EVRControllerAxisType
+ Prop_ControllerRoleHint_Int32 = 3007, // Return value is of type ETrackedControllerRole
+
+ // Properties that are unique to TrackedDeviceClass_TrackingReference
+ 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,
+
+ // Properties that are used for user interface like icons names
+ Prop_IconPathName_String = 5000, // DEPRECATED. Value not referenced. Now expected to be part of icon path properties.
+ Prop_NamedIconPathDeviceOff_String = 5001, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceSearching_String = 5002, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceSearchingAlert_String = 5003, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceReady_String = 5004, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceReadyAlert_String = 5005, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceNotReady_String = 5006, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceStandby_String = 5007, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceAlertLow_String = 5008, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+
+ // Properties that are used by helpers, but are opaque to applications
+ Prop_DisplayHiddenArea_Binary_Start = 5100,
+ Prop_DisplayHiddenArea_Binary_End = 5150,
+
+ // Properties that are unique to drivers
+ 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,
+
+ // Vendors are free to expose private debug data in this reserved region
+ Prop_VendorSpecific_Reserved_Start = 10000,
+ Prop_VendorSpecific_Reserved_End = 10999,
+};
+
+/** No string property will ever be longer than this length */
+static const uint32_t k_unMaxPropertyStringSize = 32 * 1024;
+
+/** Used to return errors that occur when reading properties. */
+enum ETrackedPropertyError
+{
+ TrackedProp_Success = 0,
+ TrackedProp_WrongDataType = 1,
+ TrackedProp_WrongDeviceClass = 2,
+ TrackedProp_BufferTooSmall = 3,
+ TrackedProp_UnknownProperty = 4, // Driver has not set the property (and may not ever).
+ TrackedProp_InvalidDevice = 5,
+ TrackedProp_CouldNotContactServer = 6,
+ TrackedProp_ValueNotProvidedByDevice = 7,
+ TrackedProp_StringExceedsMaximumLength = 8,
+ TrackedProp_NotYetAvailable = 9, // The property value isn't known yet, but is expected soon. Call again later.
+ TrackedProp_PermissionDenied = 10,
+ TrackedProp_InvalidOperation = 11,
+};
+
+/** Allows the application to control what part of the provided texture will be used in the
+* frame buffer. */
+struct VRTextureBounds_t
+{
+ float uMin, vMin;
+ float uMax, vMax;
+};
+
+
+/** Allows the application to control how scene textures are used by the compositor when calling Submit. */
+enum EVRSubmitFlags
+{
+ // Simple render path. App submits rendered left and right eye images with no lens distortion correction applied.
+ Submit_Default = 0x00,
+
+ // App submits final left and right eye images with lens distortion already applied (lens distortion makes the images appear
+ // barrel distorted with chromatic aberration correction applied). The app would have used the data returned by
+ // vr::IVRSystem::ComputeDistortion() to apply the correct distortion to the rendered images before calling Submit().
+ Submit_LensDistortionAlreadyApplied = 0x01,
+
+ // If the texture pointer passed in is actually a renderbuffer (e.g. for MSAA in OpenGL) then set this flag.
+ Submit_GlRenderBuffer = 0x02,
+
+ // Do not use
+ Submit_Reserved = 0x04,
+};
+
+/** Data required for passing Vulkan textures to IVRCompositor::Submit.
+* Be sure to call OpenVR_Shutdown before destroying these resources. */
+struct VRVulkanTextureData_t
+{
+ uint64_t m_nImage; // VkImage
+ VkDevice_T *m_pDevice;
+ VkPhysicalDevice_T *m_pPhysicalDevice;
+ VkInstance_T *m_pInstance;
+ VkQueue_T *m_pQueue;
+ uint32_t m_nQueueFamilyIndex;
+ uint32_t m_nWidth, m_nHeight, m_nFormat, m_nSampleCount;
+};
+
+/** Data required for passing D3D12 textures to IVRCompositor::Submit.
+* Be sure to call OpenVR_Shutdown before destroying these resources. */
+struct D3D12TextureData_t
+{
+ ID3D12Resource *m_pResource;
+ ID3D12CommandQueue *m_pCommandQueue;
+ uint32_t m_nNodeMask;
+};
+
+/** Status of the overall system or tracked objects */
+enum EVRState
+{
+ VRState_Undefined = -1,
+ VRState_Off = 0,
+ VRState_Searching = 1,
+ VRState_Searching_Alert = 2,
+ VRState_Ready = 3,
+ VRState_Ready_Alert = 4,
+ VRState_NotReady = 5,
+ VRState_Standby = 6,
+ VRState_Ready_Alert_Low = 7,
+};
+
+/** The types of events that could be posted (and what the parameters mean for each event type) */
+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_ButtonPress = 200, // data is controller
+ VREvent_ButtonUnpress = 201, // data is controller
+ VREvent_ButtonTouch = 202, // data is controller
+ VREvent_ButtonUntouch = 203, // data is controller
+
+ VREvent_MouseMove = 300, // data is mouse
+ VREvent_MouseButtonDown = 301, // data is mouse
+ VREvent_MouseButtonUp = 302, // data is mouse
+ VREvent_FocusEnter = 303, // data is overlay
+ VREvent_FocusLeave = 304, // data is overlay
+ VREvent_Scroll = 305, // data is mouse
+ VREvent_TouchPadMove = 306, // data is mouse
+ VREvent_OverlayFocusChanged = 307, // data is overlay, global event
+
+ VREvent_InputFocusCaptured = 400, // data is process DEPRECATED
+ VREvent_InputFocusReleased = 401, // data is process DEPRECATED
+ VREvent_SceneFocusLost = 402, // data is process
+ VREvent_SceneFocusGained = 403, // data is process
+ VREvent_SceneApplicationChanged = 404, // data is process - The App actually drawing the scene changed (usually to or from the compositor)
+ VREvent_SceneFocusChanged = 405, // data is process - New app got access to draw the scene
+ VREvent_InputFocusChanged = 406, // data is process
+ VREvent_SceneApplicationSecondaryRenderingStarted = 407, // data is process
+
+ VREvent_HideRenderModels = 410, // Sent to the scene application to request hiding render models temporarily
+ VREvent_ShowRenderModels = 411, // Sent to the scene application to request restoring render model visibility
+
+ VREvent_OverlayShown = 500,
+ VREvent_OverlayHidden = 501,
+ VREvent_DashboardActivated = 502,
+ VREvent_DashboardDeactivated = 503,
+ VREvent_DashboardThumbSelected = 504, // Sent to the overlay manager - data is overlay
+ VREvent_DashboardRequested = 505, // Sent to the overlay manager - data is overlay
+ VREvent_ResetDashboard = 506, // Send to the overlay manager
+ VREvent_RenderToast = 507, // Send to the dashboard to render a toast - data is the notification ID
+ VREvent_ImageLoaded = 508, // Sent to overlays when a SetOverlayRaw or SetOverlayFromFile call finishes loading
+ VREvent_ShowKeyboard = 509, // Sent to keyboard renderer in the dashboard to invoke it
+ VREvent_HideKeyboard = 510, // Sent to keyboard renderer in the dashboard to hide it
+ VREvent_OverlayGamepadFocusGained = 511, // Sent to an overlay when IVROverlay::SetFocusOverlay is called on it
+ VREvent_OverlayGamepadFocusLost = 512, // Send to an overlay when it previously had focus and IVROverlay::SetFocusOverlay is called on something else
+ VREvent_OverlaySharedTextureChanged = 513,
+ VREvent_DashboardGuideButtonDown = 514,
+ VREvent_DashboardGuideButtonUp = 515,
+ VREvent_ScreenshotTriggered = 516, // Screenshot button combo was pressed, Dashboard should request a screenshot
+ VREvent_ImageFailed = 517, // Sent to overlays when a SetOverlayRaw or SetOverlayfromFail fails to load
+ VREvent_DashboardOverlayCreated = 518,
+
+ // Screenshot API
+ VREvent_RequestScreenshot = 520, // Sent by vrclient application to compositor to take a screenshot
+ VREvent_ScreenshotTaken = 521, // Sent by compositor to the application that the screenshot has been taken
+ VREvent_ScreenshotFailed = 522, // Sent by compositor to the application that the screenshot failed to be taken
+ VREvent_SubmitScreenshotToDashboard = 523, // Sent by compositor to the dashboard that a completed screenshot was submitted
+ VREvent_ScreenshotProgressToDashboard = 524, // Sent by compositor to the dashboard that a completed screenshot was submitted
+
+ VREvent_PrimaryDashboardDeviceChanged = 525,
+
+ VREvent_Notification_Shown = 600,
+ VREvent_Notification_Hidden = 601,
+ VREvent_Notification_BeginInteraction = 602,
+ VREvent_Notification_Destroyed = 603,
+
+ VREvent_Quit = 700, // data is process
+ VREvent_ProcessQuit = 701, // data is process
+ VREvent_QuitAborted_UserPrompt = 702, // data is process
+ VREvent_QuitAcknowledged = 703, // data is process
+ VREvent_DriverRequestedQuit = 704, // The driver has requested that SteamVR shut down
+
+ VREvent_ChaperoneDataHasChanged = 800,
+ VREvent_ChaperoneUniverseHasChanged = 801,
+ VREvent_ChaperoneTempDataHasChanged = 802,
+ VREvent_ChaperoneSettingsHaveChanged = 803,
+ VREvent_SeatedZeroPoseReset = 804,
+
+ 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_StatusUpdate = 900,
+
+ VREvent_MCImageUpdated = 1000,
+
+ VREvent_FirmwareUpdateStarted = 1100,
+ VREvent_FirmwareUpdateFinished = 1101,
+
+ VREvent_KeyboardClosed = 1200,
+ VREvent_KeyboardCharInput = 1201,
+ VREvent_KeyboardDone = 1202, // Sent when DONE button clicked on keyboard
+
+ VREvent_ApplicationTransitionStarted = 1300,
+ VREvent_ApplicationTransitionAborted = 1301,
+ VREvent_ApplicationTransitionNewAppStarted = 1302,
+ VREvent_ApplicationListUpdated = 1303,
+ VREvent_ApplicationMimeTypeLoad = 1304,
+ VREvent_ApplicationTransitionNewAppLaunchComplete = 1305,
+ VREvent_ProcessConnected = 1306,
+ VREvent_ProcessDisconnected = 1307,
+
+ VREvent_Compositor_MirrorWindowShown = 1400,
+ VREvent_Compositor_MirrorWindowHidden = 1401,
+ VREvent_Compositor_ChaperoneBoundsShown = 1410,
+ VREvent_Compositor_ChaperoneBoundsHidden = 1411,
+
+ 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,
+
+ // Vendors are free to expose private events in this reserved region
+ VREvent_VendorSpecific_Reserved_Start = 10000,
+ VREvent_VendorSpecific_Reserved_End = 19999,
+};
+
+
+/** Level of Hmd activity */
+// UserInteraction_Timeout means the device is in the process of timing out.
+// InUse = ( k_EDeviceActivityLevel_UserInteraction || k_EDeviceActivityLevel_UserInteraction_Timeout )
+// VREvent_TrackedDeviceUserInteractionStarted fires when the devices transitions from Standby -> UserInteraction or Idle -> UserInteraction.
+// VREvent_TrackedDeviceUserInteractionEnded fires when the devices transitions from UserInteraction_Timeout -> Idle
+enum EDeviceActivityLevel
+{
+ k_EDeviceActivityLevel_Unknown = -1,
+ k_EDeviceActivityLevel_Idle = 0, // No activity for the last 10 seconds
+ k_EDeviceActivityLevel_UserInteraction = 1, // Activity (movement or prox sensor) is happening now
+ k_EDeviceActivityLevel_UserInteraction_Timeout = 2, // No activity for the last 0.5 seconds
+ k_EDeviceActivityLevel_Standby = 3, // Idle for at least 5 seconds (configurable in Settings -> Power Management)
+};
+
+
+/** VR controller button and axis IDs */
+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,
+
+ // aliases for well known controllers
+ k_EButton_SteamVR_Touchpad = k_EButton_Axis0,
+ k_EButton_SteamVR_Trigger = k_EButton_Axis1,
+
+ k_EButton_Dashboard_Back = k_EButton_Grip,
+
+ k_EButton_Max = 64
+};
+
+inline uint64_t ButtonMaskFromId( EVRButtonId id ) { return 1ull << id; }
+
+/** used for controller button events */
+struct VREvent_Controller_t
+{
+ uint32_t button; // EVRButtonId enum
+};
+
+
+/** used for simulated mouse events in overlay space */
+enum EVRMouseButton
+{
+ VRMouseButton_Left = 0x0001,
+ VRMouseButton_Right = 0x0002,
+ VRMouseButton_Middle = 0x0004,
+};
+
+
+/** used for simulated mouse events in overlay space */
+struct VREvent_Mouse_t
+{
+ float x, y; // co-ords are in GL space, bottom left of the texture is 0,0
+ uint32_t button; // EVRMouseButton enum
+};
+
+/** used for simulated mouse wheel scroll in overlay space */
+struct VREvent_Scroll_t
+{
+ float xdelta, ydelta; // movement in fraction of the pad traversed since last delta, 1.0 for a full swipe
+ uint32_t repeatCount;
+};
+
+/** when in mouse input mode you can receive data from the touchpad, these events are only sent if the users finger
+ is on the touchpad (or just released from it)
+**/
+struct VREvent_TouchPadMove_t
+{
+ // true if the users finger is detected on the touch pad
+ bool bFingerDown;
+
+ // How long the finger has been down in seconds
+ float flSecondsFingerDown;
+
+ // These values indicate the starting finger position (so you can do some basic swipe stuff)
+ float fValueXFirst;
+ float fValueYFirst;
+
+ // This is the raw sampled coordinate without deadzoning
+ float fValueXRaw;
+ float fValueYRaw;
+};
+
+/** notification related events. Details will still change at this point */
+struct VREvent_Notification_t
+{
+ uint64_t ulUserValue;
+ uint32_t notificationId;
+};
+
+/** Used for events about processes */
+struct VREvent_Process_t
+{
+ uint32_t pid;
+ uint32_t oldPid;
+ bool bForced;
+};
+
+
+/** Used for a few events about overlays */
+struct VREvent_Overlay_t
+{
+ uint64_t overlayHandle;
+};
+
+
+/** Used for a few events about overlays */
+struct VREvent_Status_t
+{
+ uint32_t statusState; // EVRState enum
+};
+
+/** Used for keyboard events **/
+struct VREvent_Keyboard_t
+{
+ char cNewInput[8]; // Up to 11 bytes of new input
+ uint64_t uUserValue; // Possible flags about the new input
+};
+
+struct VREvent_Ipd_t
+{
+ float ipdMeters;
+};
+
+struct VREvent_Chaperone_t
+{
+ uint64_t m_nPreviousUniverse;
+ uint64_t m_nCurrentUniverse;
+};
+
+/** Not actually used for any events */
+struct VREvent_Reserved_t
+{
+ uint64_t reserved0;
+ uint64_t reserved1;
+};
+
+struct VREvent_PerformanceTest_t
+{
+ uint32_t m_nFidelityLevel;
+};
+
+struct VREvent_SeatedZeroPoseReset_t
+{
+ bool bResetBySystemMenu;
+};
+
+struct VREvent_Screenshot_t
+{
+ uint32_t handle;
+ uint32_t type;
+};
+
+struct VREvent_ScreenshotProgress_t
+{
+ float progress;
+};
+
+struct VREvent_ApplicationLaunch_t
+{
+ uint32_t pid;
+ uint32_t unArgsHandle;
+};
+
+struct VREvent_EditingCameraSurface_t
+{
+ uint64_t overlayHandle;
+ uint32_t nVisualMode;
+};
+
+struct VREvent_MessageOverlay_t
+{
+ uint32_t unVRMessageOverlayResponse; // vr::VRMessageOverlayResponse enum
+};
+
+struct VREvent_Property_t
+{
+ PropertyContainerHandle_t container;
+ ETrackedDeviceProperty prop;
+};
+
+/** NOTE!!! If you change this you MUST manually update openvr_interop.cs.py */
+typedef union
+{
+ VREvent_Reserved_t reserved;
+ VREvent_Controller_t controller;
+ VREvent_Mouse_t mouse;
+ VREvent_Scroll_t scroll;
+ VREvent_Process_t process;
+ VREvent_Notification_t notification;
+ VREvent_Overlay_t overlay;
+ VREvent_Status_t status;
+ VREvent_Keyboard_t keyboard;
+ VREvent_Ipd_t ipd;
+ VREvent_Chaperone_t chaperone;
+ VREvent_PerformanceTest_t performanceTest;
+ VREvent_TouchPadMove_t touchPadMove;
+ VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset;
+ VREvent_Screenshot_t screenshot;
+ VREvent_ScreenshotProgress_t screenshotProgress;
+ VREvent_ApplicationLaunch_t applicationLaunch;
+ VREvent_EditingCameraSurface_t cameraSurface;
+ VREvent_MessageOverlay_t messageOverlay;
+ VREvent_Property_t property;
+} VREvent_Data_t;
+
+
+#if defined(__linux__) || defined(__APPLE__)
+// This structure was originally defined mis-packed on Linux, preserved for
+// compatibility.
+#pragma pack( push, 4 )
+#endif
+
+/** An event posted by the server to all running applications */
+struct VREvent_t
+{
+ uint32_t eventType; // EVREventType enum
+ TrackedDeviceIndex_t trackedDeviceIndex;
+ float eventAgeSeconds;
+ // event data must be the end of the struct as its size is variable
+ VREvent_Data_t data;
+};
+
+#if defined(__linux__) || defined(__APPLE__)
+#pragma pack( pop )
+#endif
+
+/** The mesh to draw into the stencil (or depth) buffer to perform
+* early stencil (or depth) kills of pixels that will never appear on the HMD.
+* This mesh draws on all the pixels that will be hidden after distortion.
+*
+* If the HMD does not provide a visible area mesh pVertexData will be
+* NULL and unTriangleCount will be 0. */
+struct HiddenAreaMesh_t
+{
+ const HmdVector2_t *pVertexData;
+ uint32_t unTriangleCount;
+};
+
+
+enum EHiddenAreaMeshType
+{
+ k_eHiddenAreaMesh_Standard = 0,
+ k_eHiddenAreaMesh_Inverse = 1,
+ k_eHiddenAreaMesh_LineLoop = 2,
+
+ k_eHiddenAreaMesh_Max = 3,
+};
+
+
+/** Identifies what kind of axis is on the controller at index n. Read this type
+* with pVRSystem->Get( nControllerDeviceIndex, Prop_Axis0Type_Int32 + n );
+*/
+enum EVRControllerAxisType
+{
+ k_eControllerAxis_None = 0,
+ k_eControllerAxis_TrackPad = 1,
+ k_eControllerAxis_Joystick = 2,
+ k_eControllerAxis_Trigger = 3, // Analog trigger data is in the X axis
+};
+
+
+/** contains information about one axis on the controller */
+struct VRControllerAxis_t
+{
+ float x; // Ranges from -1.0 to 1.0 for joysticks and track pads. Ranges from 0.0 to 1.0 for triggers were 0 is fully released.
+ float y; // Ranges from -1.0 to 1.0 for joysticks and track pads. Is always 0.0 for triggers.
+};
+
+
+/** the number of axes in the controller state */
+static const uint32_t k_unControllerStateAxisCount = 5;
+
+
+#if defined(__linux__) || defined(__APPLE__)
+// This structure was originally defined mis-packed on Linux, preserved for
+// compatibility.
+#pragma pack( push, 4 )
+#endif
+
+/** Holds all the state of a controller at one moment in time. */
+struct VRControllerState001_t
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32_t unPacketNum;
+
+ // bit flags for each of the buttons. Use ButtonMaskFromId to turn an ID into a mask
+ uint64_t ulButtonPressed;
+ uint64_t ulButtonTouched;
+
+ // Axis data for the controller's analog inputs
+ VRControllerAxis_t rAxis[ k_unControllerStateAxisCount ];
+};
+#if defined(__linux__) || defined(__APPLE__)
+#pragma pack( pop )
+#endif
+
+
+typedef VRControllerState001_t VRControllerState_t;
+
+
+/** determines how to provide output to the application of various event processing functions. */
+enum EVRControllerEventOutputType
+{
+ ControllerEventOutput_OSEvents = 0,
+ ControllerEventOutput_VREvents = 1,
+};
+
+
+
+/** Collision Bounds Style */
+enum ECollisionBoundsStyle
+{
+ COLLISION_BOUNDS_STYLE_BEGINNER = 0,
+ COLLISION_BOUNDS_STYLE_INTERMEDIATE,
+ COLLISION_BOUNDS_STYLE_SQUARES,
+ COLLISION_BOUNDS_STYLE_ADVANCED,
+ COLLISION_BOUNDS_STYLE_NONE,
+
+ COLLISION_BOUNDS_STYLE_COUNT
+};
+
+/** Allows the application to customize how the overlay appears in the compositor */
+struct Compositor_OverlaySettings
+{
+ uint32_t size; // sizeof(Compositor_OverlaySettings)
+ bool curved, antialias;
+ float scale, distance, alpha;
+ float uOffset, vOffset, uScale, vScale;
+ float gridDivs, gridWidth, gridScale;
+ HmdMatrix44_t transform;
+};
+
+/** used to refer to a single VR overlay */
+typedef uint64_t VROverlayHandle_t;
+
+static const VROverlayHandle_t k_ulOverlayHandleInvalid = 0;
+
+/** Errors that can occur around VR overlays */
+enum EVROverlayError
+{
+ VROverlayError_None = 0,
+
+ VROverlayError_UnknownOverlay = 10,
+ VROverlayError_InvalidHandle = 11,
+ VROverlayError_PermissionDenied = 12,
+ VROverlayError_OverlayLimitExceeded = 13, // No more overlays could be created because the maximum number already exist
+ VROverlayError_WrongVisibilityType = 14,
+ VROverlayError_KeyTooLong = 15,
+ VROverlayError_NameTooLong = 16,
+ VROverlayError_KeyInUse = 17,
+ VROverlayError_WrongTransformType = 18,
+ VROverlayError_InvalidTrackedDevice = 19,
+ VROverlayError_InvalidParameter = 20,
+ VROverlayError_ThumbnailCantBeDestroyed = 21,
+ VROverlayError_ArrayTooSmall = 22,
+ VROverlayError_RequestFailed = 23,
+ VROverlayError_InvalidTexture = 24,
+ VROverlayError_UnableToLoadFile = 25,
+ VROverlayError_KeyboardAlreadyInUse = 26,
+ VROverlayError_NoNeighbor = 27,
+ VROverlayError_TooManyMaskPrimitives = 29,
+ VROverlayError_BadMaskPrimitive = 30,
+};
+
+/** enum values to pass in to VR_Init to identify whether the application will
+* draw a 3D scene. */
+enum EVRApplicationType
+{
+ VRApplication_Other = 0, // Some other kind of application that isn't covered by the other entries
+ VRApplication_Scene = 1, // Application will submit 3D frames
+ VRApplication_Overlay = 2, // Application only interacts with overlays
+ VRApplication_Background = 3, // Application should not start SteamVR if it's not already running, and should not
+ // keep it running if everything else quits.
+ VRApplication_Utility = 4, // Init should not try to load any drivers. The application needs access to utility
+ // interfaces (like IVRSettings and IVRApplications) but not hardware.
+ VRApplication_VRMonitor = 5, // Reserved for vrmonitor
+ VRApplication_SteamWatchdog = 6,// Reserved for Steam
+ VRApplication_Bootstrapper = 7, // Start up SteamVR
+
+ VRApplication_Max
+};
+
+
+/** error codes for firmware */
+enum EVRFirmwareError
+{
+ VRFirmwareError_None = 0,
+ VRFirmwareError_Success = 1,
+ VRFirmwareError_Fail = 2,
+};
+
+
+/** error codes for notifications */
+enum EVRNotificationError
+{
+ VRNotificationError_OK = 0,
+ VRNotificationError_InvalidNotificationId = 100,
+ VRNotificationError_NotificationQueueFull = 101,
+ VRNotificationError_InvalidOverlayHandle = 102,
+ VRNotificationError_SystemWithUserValueAlreadyExists = 103,
+};
+
+
+/** error codes returned by Vr_Init */
+
+// Please add adequate error description to https://developer.valvesoftware.com/w/index.php?title=Category:SteamVRHelp
+enum EVRInitError
+{
+ VRInitError_None = 0,
+ VRInitError_Unknown = 1,
+
+ VRInitError_Init_InstallationNotFound = 100,
+ VRInitError_Init_InstallationCorrupt = 101,
+ VRInitError_Init_VRClientDLLNotFound = 102,
+ VRInitError_Init_FileNotFound = 103,
+ VRInitError_Init_FactoryNotFound = 104,
+ VRInitError_Init_InterfaceNotFound = 105,
+ VRInitError_Init_InvalidInterface = 106,
+ VRInitError_Init_UserConfigDirectoryInvalid = 107,
+ VRInitError_Init_HmdNotFound = 108,
+ VRInitError_Init_NotInitialized = 109,
+ VRInitError_Init_PathRegistryNotFound = 110,
+ VRInitError_Init_NoConfigPath = 111,
+ VRInitError_Init_NoLogPath = 112,
+ VRInitError_Init_PathRegistryNotWritable = 113,
+ VRInitError_Init_AppInfoInitFailed = 114,
+ VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver
+ VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup
+ VRInitError_Init_AnotherAppLaunching = 117,
+ VRInitError_Init_SettingsInitFailed = 118,
+ VRInitError_Init_ShuttingDown = 119,
+ VRInitError_Init_TooManyObjects = 120,
+ VRInitError_Init_NoServerForBackgroundApp = 121,
+ VRInitError_Init_NotSupportedWithCompositor = 122,
+ VRInitError_Init_NotAvailableToUtilityApps = 123,
+ VRInitError_Init_Internal = 124,
+ VRInitError_Init_HmdDriverIdIsNone = 125,
+ VRInitError_Init_HmdNotFoundPresenceFailed = 126,
+ VRInitError_Init_VRMonitorNotFound = 127,
+ VRInitError_Init_VRMonitorStartupFailed = 128,
+ VRInitError_Init_LowPowerWatchdogNotSupported = 129,
+ VRInitError_Init_InvalidApplicationType = 130,
+ VRInitError_Init_NotAvailableToWatchdogApps = 131,
+ VRInitError_Init_WatchdogDisabledInSettings = 132,
+ VRInitError_Init_VRDashboardNotFound = 133,
+ VRInitError_Init_VRDashboardStartupFailed = 134,
+ VRInitError_Init_VRHomeNotFound = 135,
+ VRInitError_Init_VRHomeStartupFailed = 136,
+
+ VRInitError_Driver_Failed = 200,
+ VRInitError_Driver_Unknown = 201,
+ VRInitError_Driver_HmdUnknown = 202,
+ VRInitError_Driver_NotLoaded = 203,
+ VRInitError_Driver_RuntimeOutOfDate = 204,
+ VRInitError_Driver_HmdInUse = 205,
+ VRInitError_Driver_NotCalibrated = 206,
+ VRInitError_Driver_CalibrationInvalid = 207,
+ VRInitError_Driver_HmdDisplayNotFound = 208,
+ VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209,
+ // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons
+ VRInitError_Driver_HmdDriverIdOutOfBounds = 211,
+ VRInitError_Driver_HmdDisplayMirrored = 212,
+
+ VRInitError_IPC_ServerInitFailed = 300,
+ VRInitError_IPC_ConnectFailed = 301,
+ VRInitError_IPC_SharedStateInitFailed = 302,
+ VRInitError_IPC_CompositorInitFailed = 303,
+ VRInitError_IPC_MutexInitFailed = 304,
+ VRInitError_IPC_Failed = 305,
+ VRInitError_IPC_CompositorConnectFailed = 306,
+ VRInitError_IPC_CompositorInvalidConnectResponse = 307,
+ VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308,
+
+ VRInitError_Compositor_Failed = 400,
+ VRInitError_Compositor_D3D11HardwareRequired = 401,
+ VRInitError_Compositor_FirmwareRequiresUpdate = 402,
+ VRInitError_Compositor_OverlayInitFailed = 403,
+ VRInitError_Compositor_ScreenshotsInitFailed = 404,
+ VRInitError_Compositor_UnableToCreateDevice = 405,
+
+ VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
+
+ VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101,
+ VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102,
+ VRInitError_VendorSpecific_HmdFound_NoStoredConfig = 1103,
+ VRInitError_VendorSpecific_HmdFound_ConfigTooBig = 1104,
+ VRInitError_VendorSpecific_HmdFound_ConfigTooSmall = 1105,
+ VRInitError_VendorSpecific_HmdFound_UnableToInitZLib = 1106,
+ VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107,
+ VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108,
+ VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109,
+ VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110,
+ VRInitError_VendorSpecific_HmdFound_UserDataAddressRange = 1111,
+ VRInitError_VendorSpecific_HmdFound_UserDataError = 1112,
+ VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113,
+
+ VRInitError_Steam_SteamInstallationNotFound = 2000,
+};
+
+enum EVRScreenshotType
+{
+ VRScreenshotType_None = 0,
+ VRScreenshotType_Mono = 1, // left eye only
+ VRScreenshotType_Stereo = 2,
+ VRScreenshotType_Cubemap = 3,
+ VRScreenshotType_MonoPanorama = 4,
+ VRScreenshotType_StereoPanorama = 5
+};
+
+enum EVRScreenshotPropertyFilenames
+{
+ VRScreenshotPropertyFilenames_Preview = 0,
+ VRScreenshotPropertyFilenames_VR = 1,
+};
+
+enum EVRTrackedCameraError
+{
+ VRTrackedCameraError_None = 0,
+ VRTrackedCameraError_OperationFailed = 100,
+ VRTrackedCameraError_InvalidHandle = 101,
+ VRTrackedCameraError_InvalidFrameHeaderVersion = 102,
+ VRTrackedCameraError_OutOfHandles = 103,
+ VRTrackedCameraError_IPCFailure = 104,
+ VRTrackedCameraError_NotSupportedForThisDevice = 105,
+ VRTrackedCameraError_SharedMemoryFailure = 106,
+ VRTrackedCameraError_FrameBufferingFailure = 107,
+ VRTrackedCameraError_StreamSetupFailure = 108,
+ VRTrackedCameraError_InvalidGLTextureId = 109,
+ VRTrackedCameraError_InvalidSharedTextureHandle = 110,
+ VRTrackedCameraError_FailedToGetGLTextureId = 111,
+ VRTrackedCameraError_SharedTextureFailure = 112,
+ VRTrackedCameraError_NoFrameAvailable = 113,
+ VRTrackedCameraError_InvalidArgument = 114,
+ VRTrackedCameraError_InvalidFrameBufferSize = 115,
+};
+
+enum EVRTrackedCameraFrameType
+{
+ VRTrackedCameraFrameType_Distorted = 0, // This is the camera video frame size in pixels, still distorted.
+ VRTrackedCameraFrameType_Undistorted, // In pixels, an undistorted inscribed rectangle region without invalid regions. This size is subject to changes shortly.
+ VRTrackedCameraFrameType_MaximumUndistorted, // In pixels, maximum undistorted with invalid regions. Non zero alpha component identifies valid regions.
+ MAX_CAMERA_FRAME_TYPES
+};
+
+typedef uint64_t TrackedCameraHandle_t;
+#define INVALID_TRACKED_CAMERA_HANDLE ((vr::TrackedCameraHandle_t)0)
+
+struct CameraVideoStreamFrameHeader_t
+{
+ EVRTrackedCameraFrameType eFrameType;
+
+ uint32_t nWidth;
+ uint32_t nHeight;
+ uint32_t nBytesPerPixel;
+
+ uint32_t nFrameSequence;
+
+ TrackedDevicePose_t standingTrackedDevicePose;
+};
+
+// Screenshot types
+typedef uint32_t ScreenshotHandle_t;
+
+static const uint32_t k_unScreenshotHandleInvalid = 0;
+
+#pragma pack( pop )
+
+// figure out how to import from the VR API dll
+#if defined(_WIN32)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __declspec( dllexport )
+#else
+#define VR_INTERFACE extern "C" __declspec( dllimport )
+#endif
+
+#elif defined(__GNUC__) || defined(COMPILER_GCC) || defined(__APPLE__)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __attribute__((visibility("default")))
+#else
+#define VR_INTERFACE extern "C"
+#endif
+
+#else
+#error "Unsupported Platform."
+#endif
+
+
+#if defined( _WIN32 )
+#define VR_CALLTYPE __cdecl
+#else
+#define VR_CALLTYPE
+#endif
+
+} // namespace vr
+
+#endif // _INCLUDE_VRTYPES_H
+
+
+// vrannotation.h
+#ifdef API_GEN
+# define VR_CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define VR_CLANG_ATTR(ATTR)
+#endif
+
+#define VR_METHOD_DESC(DESC) VR_CLANG_ATTR( "desc:" #DESC ";" )
+#define VR_IGNOREATTR() VR_CLANG_ATTR( "ignore" )
+#define VR_OUT_STRUCT() VR_CLANG_ATTR( "out_struct: ;" )
+#define VR_OUT_STRING() VR_CLANG_ATTR( "out_string: ;" )
+#define VR_OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) VR_CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define VR_OUT_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "out_array_count:" #COUNTER ";" )
+#define VR_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define VR_ARRAY_COUNT_D(COUNTER, DESC) VR_CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define VR_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define VR_OUT_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define VR_OUT_STRING_COUNT(COUNTER) VR_CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+
+// ivrsystem.h
+namespace vr
+{
+
+class IVRSystem
+{
+public:
+
+
+ // ------------------------------------
+ // Display Methods
+ // ------------------------------------
+
+ /** Suggested size for the intermediate render target that the distortion pulls from. */
+ virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** The projection matrix for the specified eye */
+ virtual HmdMatrix44_t GetProjectionMatrix( EVREye eEye, float fNearZ, float fFarZ ) = 0;
+
+ /** The components necessary to build your own projection matrix in case your
+ * application is doing something fancy like infinite Z */
+ virtual void GetProjectionRaw( EVREye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0;
+
+ /** Gets the result of the distortion function for the specified eye and input UVs. UVs go from 0,0 in
+ * the upper left of that eye's viewport and 1,1 in the lower right of that eye's viewport.
+ * Returns true for success. Otherwise, returns false, and distortion coordinates are not suitable. */
+ virtual bool ComputeDistortion( EVREye eEye, float fU, float fV, DistortionCoordinates_t *pDistortionCoordinates ) = 0;
+
+ /** Returns the transform from eye space to the head space. Eye space is the per-eye flavor of head
+ * space that provides stereo disparity. Instead of Model * View * Projection the sequence is Model * View * Eye^-1 * Projection.
+ * Normally View and Eye^-1 will be multiplied together and treated as View in your application.
+ */
+ virtual HmdMatrix34_t GetEyeToHeadTransform( EVREye eEye ) = 0;
+
+ /** Returns the number of elapsed seconds since the last recorded vsync event. This
+ * will come from a vsync timer event in the timer if possible or from the application-reported
+ * time if that is not available. If no vsync times are available the function will
+ * return zero for vsync time and frame counter and return false from the method. */
+ virtual bool GetTimeSinceLastVsync( float *pfSecondsSinceLastVsync, uint64_t *pulFrameCounter ) = 0;
+
+ /** [D3D9 Only]
+ * Returns the adapter index that the user should pass into CreateDevice to set up D3D9 in such
+ * a way that it can go full screen exclusive on the HMD. Returns -1 if there was an error.
+ */
+ virtual int32_t GetD3D9AdapterIndex() = 0;
+
+ /** [D3D10/11 Only]
+ * Returns the adapter index that the user should pass into EnumAdapters to create the device
+ * and swap chain in DX10 and DX11. If an error occurs the index will be set to -1.
+ */
+ virtual void GetDXGIOutputInfo( int32_t *pnAdapterIndex ) = 0;
+
+ /**
+ * Returns platform- and texture-type specific adapter identification so that applications and the
+ * compositor are creating textures and swap chains on the same GPU. If an error occurs the device
+ * will be set to 0.
+ * [D3D10/11/12 Only (D3D9 Not Supported)]
+ * Returns the adapter LUID that identifies the GPU attached to the HMD. The user should
+ * enumerate all adapters using IDXGIFactory::EnumAdapters and IDXGIAdapter::GetDesc to find
+ * the adapter with the matching LUID, or use IDXGIFactory4::EnumAdapterByLuid.
+ * The discovered IDXGIAdapter should be used to create the device and swap chain.
+ * [Vulkan Only]
+ * Returns the vk::PhysicalDevice that should be used by the application.
+ * [macOS Only]
+ * Returns an id<MTLDevice> that should be used by the application.
+ */
+ virtual void GetOutputDevice( uint64_t *pnDevice, ETextureType textureType ) = 0;
+
+ // ------------------------------------
+ // Display Mode methods
+ // ------------------------------------
+
+ /** Use to determine if the headset display is part of the desktop (i.e. extended) or hidden (i.e. direct mode). */
+ virtual bool IsDisplayOnDesktop() = 0;
+
+ /** Set the display visibility (true = extended, false = direct mode). Return value of true indicates that the change was successful. */
+ virtual bool SetDisplayVisibility( bool bIsVisibleOnDesktop ) = 0;
+
+ // ------------------------------------
+ // Tracking Methods
+ // ------------------------------------
+
+ /** The pose that the tracker thinks that the HMD will be in at the specified number of seconds into the
+ * future. Pass 0 to get the state at the instant the method is called. Most of the time the application should
+ * calculate the time until the photons will be emitted from the display and pass that time into the method.
+ *
+ * This is roughly analogous to the inverse of the view matrix in most applications, though
+ * many games will need to do some additional rotation or translation on top of the rotation
+ * and translation provided by the head pose.
+ *
+ * For devices where bPoseIsValid is true the application can use the pose to position the device
+ * in question. The provided array can be any size up to k_unMaxTrackedDeviceCount.
+ *
+ * Seated experiences should call this method with TrackingUniverseSeated and receive poses relative
+ * to the seated zero pose. Standing experiences should call this method with TrackingUniverseStanding
+ * and receive poses relative to the Chaperone Play Area. TrackingUniverseRawAndUncalibrated should
+ * probably not be used unless the application is the Chaperone calibration tool itself, but will provide
+ * poses relative to the hardware-specific coordinate system in the driver.
+ */
+ virtual void GetDeviceToAbsoluteTrackingPose( ETrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, VR_ARRAY_COUNT(unTrackedDevicePoseArrayCount) TrackedDevicePose_t *pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount ) = 0;
+
+ /** Sets the zero pose for the seated tracker coordinate system to the current position and yaw of the HMD. After
+ * ResetSeatedZeroPose all GetDeviceToAbsoluteTrackingPose calls that pass TrackingUniverseSeated as the origin
+ * will be relative to this new zero pose. The new zero coordinate system will not change the fact that the Y axis
+ * is up in the real world, so the next pose returned from GetDeviceToAbsoluteTrackingPose after a call to
+ * ResetSeatedZeroPose may not be exactly an identity matrix.
+ *
+ * NOTE: This function overrides the user's previously saved seated zero pose and should only be called as the result of a user action.
+ * Users are also able to set their seated zero pose via the OpenVR Dashboard.
+ **/
+ virtual void ResetSeatedZeroPose() = 0;
+
+ /** Returns the transform from the seated zero pose to the standing absolute tracking system. This allows
+ * applications to represent the seated origin to used or transform object positions from one coordinate
+ * system to the other.
+ *
+ * The seated origin may or may not be inside the Play Area or Collision Bounds returned by IVRChaperone. Its position
+ * depends on what the user has set from the Dashboard settings and previous calls to ResetSeatedZeroPose. */
+ virtual HmdMatrix34_t GetSeatedZeroPoseToStandingAbsoluteTrackingPose() = 0;
+
+ /** Returns the transform from the tracking origin to the standing absolute tracking system. This allows
+ * applications to convert from raw tracking space to the calibrated standing coordinate system. */
+ virtual HmdMatrix34_t GetRawZeroPoseToStandingAbsoluteTrackingPose() = 0;
+
+ /** Get a sorted array of device indices of a given class of tracked devices (e.g. controllers). Devices are sorted right to left
+ * relative to the specified tracked device (default: hmd -- pass in -1 for absolute tracking space). Returns the number of devices
+ * in the list, or the size of the array needed if not large enough. */
+ virtual uint32_t GetSortedTrackedDeviceIndicesOfClass( ETrackedDeviceClass eTrackedDeviceClass, VR_ARRAY_COUNT(unTrackedDeviceIndexArrayCount) vr::TrackedDeviceIndex_t *punTrackedDeviceIndexArray, uint32_t unTrackedDeviceIndexArrayCount, vr::TrackedDeviceIndex_t unRelativeToTrackedDeviceIndex = k_unTrackedDeviceIndex_Hmd ) = 0;
+
+ /** Returns the level of activity on the device. */
+ virtual EDeviceActivityLevel GetTrackedDeviceActivityLevel( vr::TrackedDeviceIndex_t unDeviceId ) = 0;
+
+ /** Convenience utility to apply the specified transform to the specified pose.
+ * This properly transforms all pose components, including velocity and angular velocity
+ */
+ virtual void ApplyTransform( TrackedDevicePose_t *pOutputPose, const TrackedDevicePose_t *pTrackedDevicePose, const HmdMatrix34_t *pTransform ) = 0;
+
+ /** Returns the device index associated with a specific role, for example the left hand or the right hand. */
+ virtual vr::TrackedDeviceIndex_t GetTrackedDeviceIndexForControllerRole( vr::ETrackedControllerRole unDeviceType ) = 0;
+
+ /** Returns the controller type associated with a device index. */
+ virtual vr::ETrackedControllerRole GetControllerRoleForTrackedDeviceIndex( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0;
+
+ // ------------------------------------
+ // Property methods
+ // ------------------------------------
+
+ /** Returns the device class of a tracked device. If there has not been a device connected in this slot
+ * since the application started this function will return TrackedDevice_Invalid. For previous detected
+ * devices the function will return the previously observed device class.
+ *
+ * To determine which devices exist on the system, just loop from 0 to k_unMaxTrackedDeviceCount and check
+ * the device class. Every device with something other than TrackedDevice_Invalid is associated with an
+ * actual tracked device. */
+ virtual ETrackedDeviceClass GetTrackedDeviceClass( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0;
+
+ /** Returns true if there is a device connected in this slot. */
+ virtual bool IsTrackedDeviceConnected( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0;
+
+ /** Returns a bool property. If the device index is not valid or the property is not a bool type this function will return false. */
+ virtual bool GetBoolTrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0;
+
+ /** Returns a float property. If the device index is not valid or the property is not a float type this function will return 0. */
+ virtual float GetFloatTrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0;
+
+ /** Returns an int property. If the device index is not valid or the property is not a int type this function will return 0. */
+ virtual int32_t GetInt32TrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0;
+
+ /** Returns a uint64 property. If the device index is not valid or the property is not a uint64 type this function will return 0. */
+ virtual uint64_t GetUint64TrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0;
+
+ /** Returns a matrix property. If the device index is not valid or the property is not a matrix type, this function will return identity. */
+ virtual HmdMatrix34_t GetMatrix34TrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0;
+
+ /** Returns a string property. If the device index is not valid or the property is not a string type this function will
+ * return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing
+ * null. Strings will always fit in buffers of k_unMaxPropertyStringSize characters. */
+ virtual uint32_t GetStringTrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, ETrackedPropertyError *pError = 0L ) = 0;
+
+ /** returns a string that corresponds with the specified property error. The string will be the name
+ * of the error enum value for all valid error codes */
+ virtual const char *GetPropErrorNameFromEnum( ETrackedPropertyError error ) = 0;
+
+ // ------------------------------------
+ // Event methods
+ // ------------------------------------
+
+ /** Returns true and fills the event with the next event on the queue if there is one. If there are no events
+ * this method returns false. uncbVREvent should be the size in bytes of the VREvent_t struct */
+ virtual bool PollNextEvent( VREvent_t *pEvent, uint32_t uncbVREvent ) = 0;
+
+ /** Returns true and fills the event with the next event on the queue if there is one. If there are no events
+ * this method returns false. Fills in the pose of the associated tracked device in the provided pose struct.
+ * This pose will always be older than the call to this function and should not be used to render the device.
+ uncbVREvent should be the size in bytes of the VREvent_t struct */
+ virtual bool PollNextEventWithPose( ETrackingUniverseOrigin eOrigin, VREvent_t *pEvent, uint32_t uncbVREvent, vr::TrackedDevicePose_t *pTrackedDevicePose ) = 0;
+
+ /** returns the name of an EVREvent enum value */
+ virtual const char *GetEventTypeNameFromEnum( EVREventType eType ) = 0;
+
+ // ------------------------------------
+ // Rendering helper methods
+ // ------------------------------------
+
+ /** Returns the hidden area mesh for the current HMD. The pixels covered by this mesh will never be seen by the user after the lens distortion is
+ * applied based on visibility to the panels. If this HMD does not have a hidden area mesh, the vertex data and count will be NULL and 0 respectively.
+ * This mesh is meant to be rendered into the stencil buffer (or into the depth buffer setting nearz) before rendering each eye's view.
+ * This will improve performance by letting the GPU early-reject pixels the user will never see before running the pixel shader.
+ * NOTE: Render this mesh with backface culling disabled since the winding order of the vertices can be different per-HMD or per-eye.
+ * Setting the bInverse argument to true will produce the visible area mesh that is commonly used in place of full-screen quads. The visible area mesh covers all of the pixels the hidden area mesh does not cover.
+ * Setting the bLineLoop argument will return a line loop of vertices in HiddenAreaMesh_t->pVertexData with HiddenAreaMesh_t->unTriangleCount set to the number of vertices.
+ */
+ virtual HiddenAreaMesh_t GetHiddenAreaMesh( EVREye eEye, EHiddenAreaMeshType type = k_eHiddenAreaMesh_Standard ) = 0;
+
+ // ------------------------------------
+ // Controller methods
+ // ------------------------------------
+
+ /** Fills the supplied struct with the current state of the controller. Returns false if the controller index
+ * is invalid. */
+ virtual bool GetControllerState( vr::TrackedDeviceIndex_t unControllerDeviceIndex, vr::VRControllerState_t *pControllerState, uint32_t unControllerStateSize ) = 0;
+
+ /** fills the supplied struct with the current state of the controller and the provided pose with the pose of
+ * the controller when the controller state was updated most recently. Use this form if you need a precise controller
+ * pose as input to your application when the user presses or releases a button. */
+ virtual bool GetControllerStateWithPose( ETrackingUniverseOrigin eOrigin, vr::TrackedDeviceIndex_t unControllerDeviceIndex, vr::VRControllerState_t *pControllerState, uint32_t unControllerStateSize, TrackedDevicePose_t *pTrackedDevicePose ) = 0;
+
+ /** Trigger a single haptic pulse on a controller. After this call the application may not trigger another haptic pulse on this controller
+ * and axis combination for 5ms. */
+ virtual void TriggerHapticPulse( vr::TrackedDeviceIndex_t unControllerDeviceIndex, uint32_t unAxisId, unsigned short usDurationMicroSec ) = 0;
+
+ /** returns the name of an EVRButtonId enum value */
+ virtual const char *GetButtonIdNameFromEnum( EVRButtonId eButtonId ) = 0;
+
+ /** returns the name of an EVRControllerAxisType enum value */
+ virtual const char *GetControllerAxisTypeNameFromEnum( EVRControllerAxisType eAxisType ) = 0;
+
+ /** Tells OpenVR that this process wants exclusive access to controller button states and button events. Other apps will be notified that
+ * they have lost input focus with a VREvent_InputFocusCaptured event. Returns false if input focus could not be captured for
+ * some reason. */
+ virtual bool CaptureInputFocus() = 0;
+
+ /** Tells OpenVR that this process no longer wants exclusive access to button states and button events. Other apps will be notified
+ * that input focus has been released with a VREvent_InputFocusReleased event. */
+ virtual void ReleaseInputFocus() = 0;
+
+ /** Returns true if input focus is captured by another process. */
+ virtual bool IsInputFocusCapturedByAnotherProcess() = 0;
+
+ // ------------------------------------
+ // Debug Methods
+ // ------------------------------------
+
+ /** Sends a request to the driver for the specified device and returns the response. The maximum response size is 32k,
+ * but this method can be called with a smaller buffer. If the response exceeds the size of the buffer, it is truncated.
+ * The size of the response including its terminating null is returned. */
+ virtual uint32_t DriverDebugRequest( vr::TrackedDeviceIndex_t unDeviceIndex, const char *pchRequest, char *pchResponseBuffer, uint32_t unResponseBufferSize ) = 0;
+
+ // ------------------------------------
+ // Firmware methods
+ // ------------------------------------
+
+ /** Performs the actual firmware update if applicable.
+ * The following events will be sent, if VRFirmwareError_None was returned: VREvent_FirmwareUpdateStarted, VREvent_FirmwareUpdateFinished
+ * Use the properties Prop_Firmware_UpdateAvailable_Bool, Prop_Firmware_ManualUpdate_Bool, and Prop_Firmware_ManualUpdateURL_String
+ * to figure our whether a firmware update is available, and to figure out whether its a manual update
+ * Prop_Firmware_ManualUpdateURL_String should point to an URL describing the manual update process */
+ virtual vr::EVRFirmwareError PerformFirmwareUpdate( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0;
+
+ // ------------------------------------
+ // Application life cycle methods
+ // ------------------------------------
+
+ /** Call this to acknowledge to the system that VREvent_Quit has been received and that the process is exiting.
+ * This extends the timeout until the process is killed. */
+ virtual void AcknowledgeQuit_Exiting() = 0;
+
+ /** Call this to tell the system that the user is being prompted to save data. This
+ * halts the timeout and dismisses the dashboard (if it was up). Applications should be sure to actually
+ * prompt the user to save and then exit afterward, otherwise the user will be left in a confusing state. */
+ virtual void AcknowledgeQuit_UserPrompt() = 0;
+
+};
+
+static const char * const IVRSystem_Version = "IVRSystem_016";
+
+}
+
+
+// ivrapplications.h
+namespace vr
+{
+
+ /** Used for all errors reported by the IVRApplications interface */
+ enum EVRApplicationError
+ {
+ VRApplicationError_None = 0,
+
+ VRApplicationError_AppKeyAlreadyExists = 100, // Only one application can use any given key
+ VRApplicationError_NoManifest = 101, // the running application does not have a manifest
+ VRApplicationError_NoApplication = 102, // No application is running
+ VRApplicationError_InvalidIndex = 103,
+ VRApplicationError_UnknownApplication = 104, // the application could not be found
+ VRApplicationError_IPCFailed = 105, // An IPC failure caused the request to fail
+ VRApplicationError_ApplicationAlreadyRunning = 106,
+ VRApplicationError_InvalidManifest = 107,
+ VRApplicationError_InvalidApplication = 108,
+ VRApplicationError_LaunchFailed = 109, // the process didn't start
+ VRApplicationError_ApplicationAlreadyStarting = 110, // the system was already starting the same application
+ VRApplicationError_LaunchInProgress = 111, // The system was already starting a different application
+ VRApplicationError_OldApplicationQuitting = 112,
+ VRApplicationError_TransitionAborted = 113,
+ VRApplicationError_IsTemplate = 114, // error when you try to call LaunchApplication() on a template type app (use LaunchTemplateApplication)
+
+ VRApplicationError_BufferTooSmall = 200, // The provided buffer was too small to fit the requested data
+ VRApplicationError_PropertyNotSet = 201, // The requested property was not set
+ VRApplicationError_UnknownProperty = 202,
+ VRApplicationError_InvalidParameter = 203,
+ };
+
+ /** The maximum length of an application key */
+ static const uint32_t k_unMaxApplicationKeyLength = 128;
+
+ /** these are the properties available on applications. */
+ enum EVRApplicationProperty
+ {
+ VRApplicationProperty_Name_String = 0,
+
+ VRApplicationProperty_LaunchType_String = 11,
+ VRApplicationProperty_WorkingDirectory_String = 12,
+ VRApplicationProperty_BinaryPath_String = 13,
+ VRApplicationProperty_Arguments_String = 14,
+ VRApplicationProperty_URL_String = 15,
+
+ VRApplicationProperty_Description_String = 50,
+ VRApplicationProperty_NewsURL_String = 51,
+ VRApplicationProperty_ImagePath_String = 52,
+ VRApplicationProperty_Source_String = 53,
+
+ VRApplicationProperty_IsDashboardOverlay_Bool = 60,
+ VRApplicationProperty_IsTemplate_Bool = 61,
+ VRApplicationProperty_IsInstanced_Bool = 62,
+ VRApplicationProperty_IsInternal_Bool = 63,
+
+ VRApplicationProperty_LastLaunchTime_Uint64 = 70,
+ };
+
+ /** These are states the scene application startup process will go through. */
+ enum EVRApplicationTransitionState
+ {
+ VRApplicationTransition_None = 0,
+
+ VRApplicationTransition_OldAppQuitSent = 10,
+ VRApplicationTransition_WaitingForExternalLaunch = 11,
+
+ VRApplicationTransition_NewAppLaunched = 20,
+ };
+
+ struct AppOverrideKeys_t
+ {
+ const char *pchKey;
+ const char *pchValue;
+ };
+
+ /** Currently recognized mime types */
+ static const char * const k_pch_MimeType_HomeApp = "vr/home";
+ static const char * const k_pch_MimeType_GameTheater = "vr/game_theater";
+
+ class IVRApplications
+ {
+ public:
+
+ // --------------- Application management --------------- //
+
+ /** Adds an application manifest to the list to load when building the list of installed applications.
+ * Temporary manifests are not automatically loaded */
+ virtual EVRApplicationError AddApplicationManifest( const char *pchApplicationManifestFullPath, bool bTemporary = false ) = 0;
+
+ /** Removes an application manifest from the list to load when building the list of installed applications. */
+ virtual EVRApplicationError RemoveApplicationManifest( const char *pchApplicationManifestFullPath ) = 0;
+
+ /** Returns true if an application is installed */
+ virtual bool IsApplicationInstalled( const char *pchAppKey ) = 0;
+
+ /** Returns the number of applications available in the list */
+ virtual uint32_t GetApplicationCount() = 0;
+
+ /** Returns the key of the specified application. The index is at least 0 and is less than the return
+ * value of GetApplicationCount(). The buffer should be at least k_unMaxApplicationKeyLength in order to
+ * fit the key. */
+ virtual EVRApplicationError GetApplicationKeyByIndex( uint32_t unApplicationIndex, VR_OUT_STRING() char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0;
+
+ /** Returns the key of the application for the specified Process Id. The buffer should be at least
+ * k_unMaxApplicationKeyLength in order to fit the key. */
+ virtual EVRApplicationError GetApplicationKeyByProcessId( uint32_t unProcessId, char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0;
+
+ /** Launches the application. The existing scene application will exit and then the new application will start.
+ * This call is not valid for dashboard overlay applications. */
+ virtual EVRApplicationError LaunchApplication( const char *pchAppKey ) = 0;
+
+ /** Launches an instance of an application of type template, with its app key being pchNewAppKey (which must be unique) and optionally override sections
+ * from the manifest file via AppOverrideKeys_t
+ */
+ virtual EVRApplicationError LaunchTemplateApplication( const char *pchTemplateAppKey, const char *pchNewAppKey, VR_ARRAY_COUNT( unKeys ) const AppOverrideKeys_t *pKeys, uint32_t unKeys ) = 0;
+
+ /** launches the application currently associated with this mime type and passes it the option args, typically the filename or object name of the item being launched */
+ virtual vr::EVRApplicationError LaunchApplicationFromMimeType( const char *pchMimeType, const char *pchArgs ) = 0;
+
+ /** Launches the dashboard overlay application if it is not already running. This call is only valid for
+ * dashboard overlay applications. */
+ virtual EVRApplicationError LaunchDashboardOverlay( const char *pchAppKey ) = 0;
+
+ /** Cancel a pending launch for an application */
+ virtual bool CancelApplicationLaunch( const char *pchAppKey ) = 0;
+
+ /** Identifies a running application. OpenVR can't always tell which process started in response
+ * to a URL. This function allows a URL handler (or the process itself) to identify the app key
+ * for the now running application. Passing a process ID of 0 identifies the calling process.
+ * The application must be one that's known to the system via a call to AddApplicationManifest. */
+ virtual EVRApplicationError IdentifyApplication( uint32_t unProcessId, const char *pchAppKey ) = 0;
+
+ /** Returns the process ID for an application. Return 0 if the application was not found or is not running. */
+ virtual uint32_t GetApplicationProcessId( const char *pchAppKey ) = 0;
+
+ /** Returns a string for an applications error */
+ virtual const char *GetApplicationsErrorNameFromEnum( EVRApplicationError error ) = 0;
+
+ // --------------- Application properties --------------- //
+
+ /** Returns a value for an application property. The required buffer size to fit this value will be returned. */
+ virtual uint32_t GetApplicationPropertyString( const char *pchAppKey, EVRApplicationProperty eProperty, VR_OUT_STRING() char *pchPropertyValueBuffer, uint32_t unPropertyValueBufferLen, EVRApplicationError *peError = nullptr ) = 0;
+
+ /** Returns a bool value for an application property. Returns false in all error cases. */
+ virtual bool GetApplicationPropertyBool( const char *pchAppKey, EVRApplicationProperty eProperty, EVRApplicationError *peError = nullptr ) = 0;
+
+ /** Returns a uint64 value for an application property. Returns 0 in all error cases. */
+ virtual uint64_t GetApplicationPropertyUint64( const char *pchAppKey, EVRApplicationProperty eProperty, EVRApplicationError *peError = nullptr ) = 0;
+
+ /** Sets the application auto-launch flag. This is only valid for applications which return true for VRApplicationProperty_IsDashboardOverlay_Bool. */
+ virtual EVRApplicationError SetApplicationAutoLaunch( const char *pchAppKey, bool bAutoLaunch ) = 0;
+
+ /** Gets the application auto-launch flag. This is only valid for applications which return true for VRApplicationProperty_IsDashboardOverlay_Bool. */
+ virtual bool GetApplicationAutoLaunch( const char *pchAppKey ) = 0;
+
+ /** Adds this mime-type to the list of supported mime types for this application*/
+ virtual EVRApplicationError SetDefaultApplicationForMimeType( const char *pchAppKey, const char *pchMimeType ) = 0;
+
+ /** return the app key that will open this mime type */
+ virtual bool GetDefaultApplicationForMimeType( const char *pchMimeType, char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0;
+
+ /** Get the list of supported mime types for this application, comma-delimited */
+ virtual bool GetApplicationSupportedMimeTypes( const char *pchAppKey, char *pchMimeTypesBuffer, uint32_t unMimeTypesBuffer ) = 0;
+
+ /** Get the list of app-keys that support this mime type, comma-delimited, the return value is number of bytes you need to return the full string */
+ virtual uint32_t GetApplicationsThatSupportMimeType( const char *pchMimeType, char *pchAppKeysThatSupportBuffer, uint32_t unAppKeysThatSupportBuffer ) = 0;
+
+ /** Get the args list from an app launch that had the process already running, you call this when you get a VREvent_ApplicationMimeTypeLoad */
+ virtual uint32_t GetApplicationLaunchArguments( uint32_t unHandle, char *pchArgs, uint32_t unArgs ) = 0;
+
+ // --------------- Transition methods --------------- //
+
+ /** Returns the app key for the application that is starting up */
+ virtual EVRApplicationError GetStartingApplication( char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0;
+
+ /** Returns the application transition state */
+ virtual EVRApplicationTransitionState GetTransitionState() = 0;
+
+ /** Returns errors that would prevent the specified application from launching immediately. Calling this function will
+ * cause the current scene application to quit, so only call it when you are actually about to launch something else.
+ * What the caller should do about these failures depends on the failure:
+ * VRApplicationError_OldApplicationQuitting - An existing application has been told to quit. Wait for a VREvent_ProcessQuit
+ * and try again.
+ * VRApplicationError_ApplicationAlreadyStarting - This application is already starting. This is a permanent failure.
+ * VRApplicationError_LaunchInProgress - A different application is already starting. This is a permanent failure.
+ * VRApplicationError_None - Go ahead and launch. Everything is clear.
+ */
+ virtual EVRApplicationError PerformApplicationPrelaunchCheck( const char *pchAppKey ) = 0;
+
+ /** Returns a string for an application transition state */
+ virtual const char *GetApplicationsTransitionStateNameFromEnum( EVRApplicationTransitionState state ) = 0;
+
+ /** Returns true if the outgoing scene app has requested a save prompt before exiting */
+ virtual bool IsQuitUserPromptRequested() = 0;
+
+ /** Starts a subprocess within the calling application. This
+ * suppresses all application transition UI and automatically identifies the new executable
+ * as part of the same application. On success the calling process should exit immediately.
+ * If working directory is NULL or "" the directory portion of the binary path will be
+ * the working directory. */
+ virtual EVRApplicationError LaunchInternalProcess( const char *pchBinaryPath, const char *pchArguments, const char *pchWorkingDirectory ) = 0;
+
+ /** Returns the current scene process ID according to the application system. A scene process will get scene
+ * focus once it starts rendering, but it will appear here once it calls VR_Init with the Scene application
+ * type. */
+ virtual uint32_t GetCurrentSceneProcessId() = 0;
+ };
+
+ static const char * const IVRApplications_Version = "IVRApplications_006";
+
+} // namespace vr
+
+// ivrsettings.h
+namespace vr
+{
+ enum EVRSettingsError
+ {
+ VRSettingsError_None = 0,
+ VRSettingsError_IPCFailed = 1,
+ VRSettingsError_WriteFailed = 2,
+ VRSettingsError_ReadFailed = 3,
+ VRSettingsError_JsonParseFailed = 4,
+ VRSettingsError_UnsetSettingHasNoDefault = 5, // This will be returned if the setting does not appear in the appropriate default file and has not been set
+ };
+
+ // The maximum length of a settings key
+ static const uint32_t k_unMaxSettingsKeyLength = 128;
+
+ class IVRSettings
+ {
+ public:
+ virtual const char *GetSettingsErrorNameFromEnum( EVRSettingsError eError ) = 0;
+
+ // Returns true if file sync occurred (force or settings dirty)
+ virtual bool Sync( bool bForce = false, EVRSettingsError *peError = nullptr ) = 0;
+
+ virtual void SetBool( const char *pchSection, const char *pchSettingsKey, bool bValue, EVRSettingsError *peError = nullptr ) = 0;
+ virtual void SetInt32( const char *pchSection, const char *pchSettingsKey, int32_t nValue, EVRSettingsError *peError = nullptr ) = 0;
+ virtual void SetFloat( const char *pchSection, const char *pchSettingsKey, float flValue, EVRSettingsError *peError = nullptr ) = 0;
+ virtual void SetString( const char *pchSection, const char *pchSettingsKey, const char *pchValue, EVRSettingsError *peError = nullptr ) = 0;
+
+ // Users of the system need to provide a proper default in default.vrsettings in the resources/settings/ directory
+ // of either the runtime or the driver_xxx directory. Otherwise the default will be false, 0, 0.0 or ""
+ virtual bool GetBool( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0;
+ virtual int32_t GetInt32( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0;
+ virtual float GetFloat( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0;
+ virtual void GetString( const char *pchSection, const char *pchSettingsKey, VR_OUT_STRING() char *pchValue, uint32_t unValueLen, EVRSettingsError *peError = nullptr ) = 0;
+
+ virtual void RemoveSection( const char *pchSection, EVRSettingsError *peError = nullptr ) = 0;
+ virtual void RemoveKeyInSection( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0;
+ };
+
+ //-----------------------------------------------------------------------------
+ static const char * const IVRSettings_Version = "IVRSettings_002";
+
+ //-----------------------------------------------------------------------------
+ // steamvr keys
+ static const char * const k_pch_SteamVR_Section = "steamvr";
+ static const char * const k_pch_SteamVR_RequireHmd_String = "requireHmd";
+ static const char * const k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver";
+ static const char * const k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd";
+ static const char * const k_pch_SteamVR_DisplayDebug_Bool = "displayDebug";
+ static const char * const k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe";
+ static const char * const k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX";
+ static const char * const k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY";
+ static const char * const k_pch_SteamVR_SendSystemButtonToAllApps_Bool= "sendSystemButtonToAllApps";
+ static const char * const k_pch_SteamVR_LogLevel_Int32 = "loglevel";
+ static const char * const k_pch_SteamVR_IPD_Float = "ipd";
+ static const char * const k_pch_SteamVR_Background_String = "background";
+ static const char * const k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection";
+ static const char * const k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight";
+ static const char * const k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius";
+ static const char * const k_pch_SteamVR_GridColor_String = "gridColor";
+ static const char * const k_pch_SteamVR_PlayAreaColor_String = "playAreaColor";
+ static const char * const k_pch_SteamVR_ShowStage_Bool = "showStage";
+ static const char * const k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers";
+ static const char * const k_pch_SteamVR_DirectMode_Bool = "directMode";
+ static const char * const k_pch_SteamVR_DirectModeEdidVid_Int32 = "directModeEdidVid";
+ static const char * const k_pch_SteamVR_DirectModeEdidPid_Int32 = "directModeEdidPid";
+ static const char * const k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers";
+ static const char * const k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees";
+ static const char * const k_pch_SteamVR_BaseStationPowerManagement_Bool = "basestationPowerManagement";
+ static const char * const k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses";
+ static const char * const k_pch_SteamVR_SupersampleScale_Float = "supersampleScale";
+ static const char * const k_pch_SteamVR_AllowAsyncReprojection_Bool = "allowAsyncReprojection";
+ static const char * const k_pch_SteamVR_AllowReprojection_Bool = "allowInterleavedReprojection";
+ static const char * const k_pch_SteamVR_ForceReprojection_Bool = "forceReprojection";
+ static const char * const k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking";
+ static const char * const k_pch_SteamVR_DefaultMirrorView_Int32 = "defaultMirrorView";
+ static const char * const k_pch_SteamVR_ShowMirrorView_Bool = "showMirrorView";
+ static const char * const k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry";
+ static const char * const k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch";
+ static const char * const k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch";
+ static const char * const k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch";
+ static const char * const k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard";
+ static const char * const k_pch_SteamVR_EnableHomeApp = "enableHomeApp";
+ static const char * const k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec";
+ static const char * const k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
+ static const char * const k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
+ static const char * const k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+
+ //-----------------------------------------------------------------------------
+ // lighthouse keys
+ static const char * const k_pch_Lighthouse_Section = "driver_lighthouse";
+ static const char * const k_pch_Lighthouse_DisableIMU_Bool = "disableimu";
+ static const char * const k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation";
+ static const char * const k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug";
+ static const char * const k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation";
+ static const char * const k_pch_Lighthouse_DBHistory_Bool = "dbhistory";
+
+ //-----------------------------------------------------------------------------
+ // null keys
+ static const char * const k_pch_Null_Section = "driver_null";
+ static const char * const k_pch_Null_SerialNumber_String = "serialNumber";
+ static const char * const k_pch_Null_ModelNumber_String = "modelNumber";
+ static const char * const k_pch_Null_WindowX_Int32 = "windowX";
+ static const char * const k_pch_Null_WindowY_Int32 = "windowY";
+ static const char * const k_pch_Null_WindowWidth_Int32 = "windowWidth";
+ static const char * const k_pch_Null_WindowHeight_Int32 = "windowHeight";
+ static const char * const k_pch_Null_RenderWidth_Int32 = "renderWidth";
+ static const char * const k_pch_Null_RenderHeight_Int32 = "renderHeight";
+ static const char * const k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons";
+ static const char * const k_pch_Null_DisplayFrequency_Float = "displayFrequency";
+
+ //-----------------------------------------------------------------------------
+ // user interface keys
+ static const char * const k_pch_UserInterface_Section = "userinterface";
+ static const char * const k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop";
+ static const char * const k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray";
+ static const char * const k_pch_UserInterface_Screenshots_Bool = "screenshots";
+ static const char * const k_pch_UserInterface_ScreenshotType_Int = "screenshotType";
+
+ //-----------------------------------------------------------------------------
+ // notification keys
+ static const char * const k_pch_Notifications_Section = "notifications";
+ static const char * const k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb";
+
+ //-----------------------------------------------------------------------------
+ // keyboard keys
+ static const char * const k_pch_Keyboard_Section = "keyboard";
+ static const char * const k_pch_Keyboard_TutorialCompletions = "TutorialCompletions";
+ static const char * const k_pch_Keyboard_ScaleX = "ScaleX";
+ static const char * const k_pch_Keyboard_ScaleY = "ScaleY";
+ static const char * const k_pch_Keyboard_OffsetLeftX = "OffsetLeftX";
+ static const char * const k_pch_Keyboard_OffsetRightX = "OffsetRightX";
+ static const char * const k_pch_Keyboard_OffsetY = "OffsetY";
+ static const char * const k_pch_Keyboard_Smoothing = "Smoothing";
+
+ //-----------------------------------------------------------------------------
+ // perf keys
+ static const char * const k_pch_Perf_Section = "perfcheck";
+ static const char * const k_pch_Perf_HeuristicActive_Bool = "heuristicActive";
+ static const char * const k_pch_Perf_NotifyInHMD_Bool = "warnInHMD";
+ static const char * const k_pch_Perf_NotifyOnlyOnce_Bool = "warnOnlyOnce";
+ static const char * const k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore";
+ static const char * const k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit";
+ static const char * const k_pch_Perf_TestData_Float = "perfTestData";
+ static const char * const k_pch_Perf_LinuxGPUProfiling_Bool = "linuxGPUProfiling";
+
+ //-----------------------------------------------------------------------------
+ // collision bounds keys
+ static const char * const k_pch_CollisionBounds_Section = "collisionBounds";
+ static const char * const k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle";
+ static const char * const k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn";
+ static const char * const k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn";
+ static const char * const k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn";
+ static const char * const k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance";
+ static const char * const k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR";
+ static const char * const k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG";
+ static const char * const k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB";
+ static const char * const k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA";
+
+ //-----------------------------------------------------------------------------
+ // camera keys
+ static const char * const k_pch_Camera_Section = "camera";
+ static const char * const k_pch_Camera_EnableCamera_Bool = "enableCamera";
+ static const char * const k_pch_Camera_EnableCameraInDashboard_Bool = "enableCameraInDashboard";
+ static const char * const k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds";
+ static const char * const k_pch_Camera_EnableCameraForRoomView_Bool = "enableCameraForRoomView";
+ static const char * const k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR";
+ static const char * const k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG";
+ static const char * const k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB";
+ static const char * const k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA";
+ static const char * const k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength";
+
+ //-----------------------------------------------------------------------------
+ // audio keys
+ static const char * const k_pch_audio_Section = "audio";
+ static const char * const k_pch_audio_OnPlaybackDevice_String = "onPlaybackDevice";
+ static const char * const k_pch_audio_OnRecordDevice_String = "onRecordDevice";
+ static const char * const k_pch_audio_OnPlaybackMirrorDevice_String = "onPlaybackMirrorDevice";
+ static const char * const k_pch_audio_OffPlaybackDevice_String = "offPlaybackDevice";
+ static const char * const k_pch_audio_OffRecordDevice_String = "offRecordDevice";
+ static const char * const k_pch_audio_VIVEHDMIGain = "viveHDMIGain";
+
+ //-----------------------------------------------------------------------------
+ // power management keys
+ static const char * const k_pch_Power_Section = "power";
+ static const char * const k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit";
+ static const char * const k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout";
+ static const char * const k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout";
+ static const char * const k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout";
+ static const char * const k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress";
+
+ //-----------------------------------------------------------------------------
+ // dashboard keys
+ static const char * const k_pch_Dashboard_Section = "dashboard";
+ static const char * const k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard";
+ static const char * const k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode";
+
+ //-----------------------------------------------------------------------------
+ // model skin keys
+ static const char * const k_pch_modelskin_Section = "modelskins";
+
+ //-----------------------------------------------------------------------------
+ // driver keys - These could be checked in any driver_<name> section
+ static const char * const k_pch_Driver_Enable_Bool = "enable";
+
+} // namespace vr
+
+// ivrchaperone.h
+namespace vr
+{
+
+#pragma pack( push, 8 )
+
+enum ChaperoneCalibrationState
+{
+ // OK!
+ ChaperoneCalibrationState_OK = 1, // Chaperone is fully calibrated and working correctly
+
+ // Warnings
+ ChaperoneCalibrationState_Warning = 100,
+ ChaperoneCalibrationState_Warning_BaseStationMayHaveMoved = 101, // A base station thinks that it might have moved
+ ChaperoneCalibrationState_Warning_BaseStationRemoved = 102, // There are less base stations than when calibrated
+ ChaperoneCalibrationState_Warning_SeatedBoundsInvalid = 103, // Seated bounds haven't been calibrated for the current tracking center
+
+ // Errors
+ ChaperoneCalibrationState_Error = 200, // The UniverseID is invalid
+ ChaperoneCalibrationState_Error_BaseStationUninitialized = 201, // Tracking center hasn't be calibrated for at least one of the base stations
+ ChaperoneCalibrationState_Error_BaseStationConflict = 202, // Tracking center is calibrated, but base stations disagree on the tracking space
+ ChaperoneCalibrationState_Error_PlayAreaInvalid = 203, // Play Area hasn't been calibrated for the current tracking center
+ ChaperoneCalibrationState_Error_CollisionBoundsInvalid = 204, // Collision Bounds haven't been calibrated for the current tracking center
+};
+
+
+/** HIGH LEVEL TRACKING SPACE ASSUMPTIONS:
+* 0,0,0 is the preferred standing area center.
+* 0Y is the floor height.
+* -Z is the preferred forward facing direction. */
+class IVRChaperone
+{
+public:
+
+ /** Get the current state of Chaperone calibration. This state can change at any time during a session due to physical base station changes. **/
+ virtual ChaperoneCalibrationState GetCalibrationState() = 0;
+
+ /** Returns the width and depth of the Play Area (formerly named Soft Bounds) in X and Z.
+ * Tracking space center (0,0,0) is the center of the Play Area. **/
+ virtual bool GetPlayAreaSize( float *pSizeX, float *pSizeZ ) = 0;
+
+ /** Returns the 4 corner positions of the Play Area (formerly named Soft Bounds).
+ * Corners are in counter-clockwise order.
+ * Standing center (0,0,0) is the center of the Play Area.
+ * It's a rectangle.
+ * 2 sides are parallel to the X axis and 2 sides are parallel to the Z axis.
+ * Height of every corner is 0Y (on the floor). **/
+ virtual bool GetPlayAreaRect( HmdQuad_t *rect ) = 0;
+
+ /** Reload Chaperone data from the .vrchap file on disk. */
+ virtual void ReloadInfo( void ) = 0;
+
+ /** Optionally give the chaperone system a hit about the color and brightness in the scene **/
+ virtual void SetSceneColor( HmdColor_t color ) = 0;
+
+ /** Get the current chaperone bounds draw color and brightness **/
+ virtual void GetBoundsColor( HmdColor_t *pOutputColorArray, int nNumOutputColors, float flCollisionBoundsFadeDistance, HmdColor_t *pOutputCameraColor ) = 0;
+
+ /** Determine whether the bounds are showing right now **/
+ virtual bool AreBoundsVisible() = 0;
+
+ /** Force the bounds to show, mostly for utilities **/
+ virtual void ForceBoundsVisible( bool bForce ) = 0;
+};
+
+static const char * const IVRChaperone_Version = "IVRChaperone_003";
+
+#pragma pack( pop )
+
+}
+
+// ivrchaperonesetup.h
+namespace vr
+{
+
+enum EChaperoneConfigFile
+{
+ EChaperoneConfigFile_Live = 1, // The live chaperone config, used by most applications and games
+ EChaperoneConfigFile_Temp = 2, // The temporary chaperone config, used to live-preview collision bounds in room setup
+};
+
+enum EChaperoneImportFlags
+{
+ EChaperoneImport_BoundsOnly = 0x0001,
+};
+
+/** Manages the working copy of the chaperone info. By default this will be the same as the
+* live copy. Any changes made with this interface will stay in the working copy until
+* CommitWorkingCopy() is called, at which point the working copy and the live copy will be
+* the same again. */
+class IVRChaperoneSetup
+{
+public:
+
+ /** Saves the current working copy to disk */
+ virtual bool CommitWorkingCopy( EChaperoneConfigFile configFile ) = 0;
+
+ /** Reverts the working copy to match the live chaperone calibration.
+ * To modify existing data this MUST be do WHILE getting a non-error ChaperoneCalibrationStatus.
+ * Only after this should you do gets and sets on the existing data. */
+ virtual void RevertWorkingCopy() = 0;
+
+ /** Returns the width and depth of the Play Area (formerly named Soft Bounds) in X and Z from the working copy.
+ * Tracking space center (0,0,0) is the center of the Play Area. */
+ virtual bool GetWorkingPlayAreaSize( float *pSizeX, float *pSizeZ ) = 0;
+
+ /** Returns the 4 corner positions of the Play Area (formerly named Soft Bounds) from the working copy.
+ * Corners are in clockwise order.
+ * Tracking space center (0,0,0) is the center of the Play Area.
+ * It's a rectangle.
+ * 2 sides are parallel to the X axis and 2 sides are parallel to the Z axis.
+ * Height of every corner is 0Y (on the floor). **/
+ virtual bool GetWorkingPlayAreaRect( HmdQuad_t *rect ) = 0;
+
+ /** Returns the number of Quads if the buffer points to null. Otherwise it returns Quads
+ * into the buffer up to the max specified from the working copy. */
+ virtual bool GetWorkingCollisionBoundsInfo( VR_OUT_ARRAY_COUNT(punQuadsCount) HmdQuad_t *pQuadsBuffer, uint32_t* punQuadsCount ) = 0;
+
+ /** Returns the number of Quads if the buffer points to null. Otherwise it returns Quads
+ * into the buffer up to the max specified. */
+ virtual bool GetLiveCollisionBoundsInfo( VR_OUT_ARRAY_COUNT(punQuadsCount) HmdQuad_t *pQuadsBuffer, uint32_t* punQuadsCount ) = 0;
+
+ /** Returns the preferred seated position from the working copy. */
+ virtual bool GetWorkingSeatedZeroPoseToRawTrackingPose( HmdMatrix34_t *pmatSeatedZeroPoseToRawTrackingPose ) = 0;
+
+ /** Returns the standing origin from the working copy. */
+ virtual bool GetWorkingStandingZeroPoseToRawTrackingPose( HmdMatrix34_t *pmatStandingZeroPoseToRawTrackingPose ) = 0;
+
+ /** Sets the Play Area in the working copy. */
+ virtual void SetWorkingPlayAreaSize( float sizeX, float sizeZ ) = 0;
+
+ /** Sets the Collision Bounds in the working copy. */
+ virtual void SetWorkingCollisionBoundsInfo( VR_ARRAY_COUNT(unQuadsCount) HmdQuad_t *pQuadsBuffer, uint32_t unQuadsCount ) = 0;
+
+ /** Sets the preferred seated position in the working copy. */
+ virtual void SetWorkingSeatedZeroPoseToRawTrackingPose( const HmdMatrix34_t *pMatSeatedZeroPoseToRawTrackingPose ) = 0;
+
+ /** Sets the preferred standing position in the working copy. */
+ virtual void SetWorkingStandingZeroPoseToRawTrackingPose( const HmdMatrix34_t *pMatStandingZeroPoseToRawTrackingPose ) = 0;
+
+ /** Tear everything down and reload it from the file on disk */
+ virtual void ReloadFromDisk( EChaperoneConfigFile configFile ) = 0;
+
+ /** Returns the preferred seated position. */
+ virtual bool GetLiveSeatedZeroPoseToRawTrackingPose( HmdMatrix34_t *pmatSeatedZeroPoseToRawTrackingPose ) = 0;
+
+ virtual void SetWorkingCollisionBoundsTagsInfo( VR_ARRAY_COUNT(unTagCount) uint8_t *pTagsBuffer, uint32_t unTagCount ) = 0;
+ virtual bool GetLiveCollisionBoundsTagsInfo( VR_OUT_ARRAY_COUNT(punTagCount) uint8_t *pTagsBuffer, uint32_t *punTagCount ) = 0;
+
+ virtual bool SetWorkingPhysicalBoundsInfo( VR_ARRAY_COUNT(unQuadsCount) HmdQuad_t *pQuadsBuffer, uint32_t unQuadsCount ) = 0;
+ virtual bool GetLivePhysicalBoundsInfo( VR_OUT_ARRAY_COUNT(punQuadsCount) HmdQuad_t *pQuadsBuffer, uint32_t* punQuadsCount ) = 0;
+
+ virtual bool ExportLiveToBuffer( VR_OUT_STRING() char *pBuffer, uint32_t *pnBufferLength ) = 0;
+ virtual bool ImportFromBufferToWorking( const char *pBuffer, uint32_t nImportFlags ) = 0;
+};
+
+static const char * const IVRChaperoneSetup_Version = "IVRChaperoneSetup_005";
+
+
+}
+
+// ivrcompositor.h
+namespace vr
+{
+
+#pragma pack( push, 8 )
+
+/** Errors that can occur with the VR compositor */
+enum EVRCompositorError
+{
+ VRCompositorError_None = 0,
+ VRCompositorError_RequestFailed = 1,
+ VRCompositorError_IncompatibleVersion = 100,
+ VRCompositorError_DoNotHaveFocus = 101,
+ VRCompositorError_InvalidTexture = 102,
+ VRCompositorError_IsNotSceneApplication = 103,
+ VRCompositorError_TextureIsOnWrongDevice = 104,
+ VRCompositorError_TextureUsesUnsupportedFormat = 105,
+ VRCompositorError_SharedTexturesNotSupported = 106,
+ VRCompositorError_IndexOutOfRange = 107,
+ VRCompositorError_AlreadySubmitted = 108,
+};
+
+const uint32_t VRCompositor_ReprojectionReason_Cpu = 0x01;
+const uint32_t VRCompositor_ReprojectionReason_Gpu = 0x02;
+const uint32_t VRCompositor_ReprojectionAsync = 0x04; // This flag indicates the async reprojection mode is active,
+ // but does not indicate if reprojection actually happened or not.
+ // Use the ReprojectionReason flags above to check if reprojection
+ // was actually applied (i.e. scene texture was reused).
+ // NumFramePresents > 1 also indicates the scene texture was reused,
+ // and also the number of times that it was presented in total.
+
+/** Provides a single frame's timing information to the app */
+struct Compositor_FrameTiming
+{
+ uint32_t m_nSize; // Set to sizeof( Compositor_FrameTiming )
+ uint32_t m_nFrameIndex;
+ uint32_t m_nNumFramePresents; // number of times this frame was presented
+ uint32_t m_nNumMisPresented; // number of times this frame was presented on a vsync other than it was originally predicted to
+ uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out
+ uint32_t m_nReprojectionFlags;
+
+ /** Absolute time reference for comparing frames. This aligns with the vsync that running start is relative to. */
+ double m_flSystemTimeInSeconds;
+
+ /** These times may include work from other processes due to OS scheduling.
+ * The fewer packets of work these are broken up into, the less likely this will happen.
+ * GPU work can be broken up by calling Flush. This can sometimes be useful to get the GPU started
+ * processing that work earlier in the frame. */
+ float m_flPreSubmitGpuMs; // time spent rendering the scene (gpu work submitted between WaitGetPoses and second Submit)
+ float m_flPostSubmitGpuMs; // additional time spent rendering by application (e.g. companion window)
+ float m_flTotalRenderGpuMs; // time between work submitted immediately after present (ideally vsync) until the end of compositor submitted work
+ float m_flCompositorRenderGpuMs; // time spend performing distortion correction, rendering chaperone, overlays, etc.
+ float m_flCompositorRenderCpuMs; // time spent on cpu submitting the above work for this frame
+ float m_flCompositorIdleCpuMs; // time spent waiting for running start (application could have used this much more time)
+
+ /** Miscellaneous measured intervals. */
+ float m_flClientFrameIntervalMs; // time between calls to WaitGetPoses
+ float m_flPresentCallCpuMs; // time blocked on call to present (usually 0.0, but can go long)
+ float m_flWaitForPresentCpuMs; // time spent spin-waiting for frame index to change (not near-zero indicates wait object failure)
+ float m_flSubmitFrameMs; // time spent in IVRCompositor::Submit (not near-zero indicates driver issue)
+
+ /** The following are all relative to this frame's SystemTimeInSeconds */
+ float m_flWaitGetPosesCalledMs;
+ float m_flNewPosesReadyMs;
+ float m_flNewFrameReadyMs; // second call to IVRCompositor::Submit
+ float m_flCompositorUpdateStartMs;
+ float m_flCompositorUpdateEndMs;
+ float m_flCompositorRenderStartMs;
+
+ vr::TrackedDevicePose_t m_HmdPose; // pose used by app to render this frame
+};
+
+/** Cumulative stats for current application. These are not cleared until a new app connects,
+* but they do stop accumulating once the associated app disconnects. */
+struct Compositor_CumulativeStats
+{
+ uint32_t m_nPid; // Process id associated with these stats (may no longer be running).
+ uint32_t m_nNumFramePresents; // total number of times we called present (includes reprojected frames)
+ uint32_t m_nNumDroppedFrames; // total number of times an old frame was re-scanned out (without reprojection)
+ uint32_t m_nNumReprojectedFrames; // total number of times a frame was scanned out a second time (with reprojection)
+
+ /** Values recorded at startup before application has fully faded in the first time. */
+ uint32_t m_nNumFramePresentsOnStartup;
+ uint32_t m_nNumDroppedFramesOnStartup;
+ uint32_t m_nNumReprojectedFramesOnStartup;
+
+ /** Applications may explicitly fade to the compositor. This is usually to handle level transitions, and loading often causes
+ * system wide hitches. The following stats are collected during this period. Does not include values recorded during startup. */
+ uint32_t m_nNumLoading;
+ uint32_t m_nNumFramePresentsLoading;
+ uint32_t m_nNumDroppedFramesLoading;
+ uint32_t m_nNumReprojectedFramesLoading;
+
+ /** If we don't get a new frame from the app in less than 2.5 frames, then we assume the app has hung and start
+ * fading back to the compositor. The following stats are a result of this, and are a subset of those recorded above.
+ * Does not include values recorded during start up or loading. */
+ uint32_t m_nNumTimedOut;
+ uint32_t m_nNumFramePresentsTimedOut;
+ uint32_t m_nNumDroppedFramesTimedOut;
+ uint32_t m_nNumReprojectedFramesTimedOut;
+};
+
+#pragma pack( pop )
+
+/** Allows the application to interact with the compositor */
+class IVRCompositor
+{
+public:
+ /** Sets tracking space returned by WaitGetPoses */
+ virtual void SetTrackingSpace( ETrackingUniverseOrigin eOrigin ) = 0;
+
+ /** Gets current tracking space returned by WaitGetPoses */
+ virtual ETrackingUniverseOrigin GetTrackingSpace() = 0;
+
+ /** Scene applications should call this function to get poses to render with (and optionally poses predicted an additional frame out to use for gameplay).
+ * This function will block until "running start" milliseconds before the start of the frame, and should be called at the last moment before needing to
+ * start rendering.
+ *
+ * Return codes:
+ * - IsNotSceneApplication (make sure to call VR_Init with VRApplicaiton_Scene)
+ * - DoNotHaveFocus (some other app has taken focus - this will throttle the call to 10hz to reduce the impact on that app)
+ */
+ virtual EVRCompositorError WaitGetPoses( VR_ARRAY_COUNT(unRenderPoseArrayCount) TrackedDevicePose_t* pRenderPoseArray, uint32_t unRenderPoseArrayCount,
+ VR_ARRAY_COUNT(unGamePoseArrayCount) TrackedDevicePose_t* pGamePoseArray, uint32_t unGamePoseArrayCount ) = 0;
+
+ /** Get the last set of poses returned by WaitGetPoses. */
+ virtual EVRCompositorError GetLastPoses( VR_ARRAY_COUNT( unRenderPoseArrayCount ) TrackedDevicePose_t* pRenderPoseArray, uint32_t unRenderPoseArrayCount,
+ VR_ARRAY_COUNT( unGamePoseArrayCount ) TrackedDevicePose_t* pGamePoseArray, uint32_t unGamePoseArrayCount ) = 0;
+
+ /** Interface for accessing last set of poses returned by WaitGetPoses one at a time.
+ * Returns VRCompositorError_IndexOutOfRange if unDeviceIndex not less than k_unMaxTrackedDeviceCount otherwise VRCompositorError_None.
+ * It is okay to pass NULL for either pose if you only want one of the values. */
+ virtual EVRCompositorError GetLastPoseForTrackedDeviceIndex( TrackedDeviceIndex_t unDeviceIndex, TrackedDevicePose_t *pOutputPose, TrackedDevicePose_t *pOutputGamePose ) = 0;
+
+ /** Updated scene texture to display. If pBounds is NULL the entire texture will be used. If called from an OpenGL app, consider adding a glFlush after
+ * Submitting both frames to signal the driver to start processing, otherwise it may wait until the command buffer fills up, causing the app to miss frames.
+ *
+ * OpenGL dirty state:
+ * glBindTexture
+ *
+ * Return codes:
+ * - IsNotSceneApplication (make sure to call VR_Init with VRApplicaiton_Scene)
+ * - DoNotHaveFocus (some other app has taken focus)
+ * - TextureIsOnWrongDevice (application did not use proper AdapterIndex - see IVRSystem.GetDXGIOutputInfo)
+ * - SharedTexturesNotSupported (application needs to call CreateDXGIFactory1 or later before creating DX device)
+ * - TextureUsesUnsupportedFormat (scene textures must be compatible with DXGI sharing rules - e.g. uncompressed, no mips, etc.)
+ * - InvalidTexture (usually means bad arguments passed in)
+ * - AlreadySubmitted (app has submitted two left textures or two right textures in a single frame - i.e. before calling WaitGetPoses again)
+ */
+ virtual EVRCompositorError Submit( EVREye eEye, const Texture_t *pTexture, const VRTextureBounds_t* pBounds = 0, EVRSubmitFlags nSubmitFlags = Submit_Default ) = 0;
+
+ /** Clears the frame that was sent with the last call to Submit. This will cause the
+ * compositor to show the grid until Submit is called again. */
+ virtual void ClearLastSubmittedFrame() = 0;
+
+ /** Call immediately after presenting your app's window (i.e. companion window) to unblock the compositor.
+ * This is an optional call, which only needs to be used if you can't instead call WaitGetPoses immediately after Present.
+ * For example, if your engine's render and game loop are not on separate threads, or blocking the render thread until 3ms before the next vsync would
+ * introduce a deadlock of some sort. This function tells the compositor that you have finished all rendering after having Submitted buffers for both
+ * eyes, and it is free to start its rendering work. This should only be called from the same thread you are rendering on. */
+ virtual void PostPresentHandoff() = 0;
+
+ /** Returns true if timing data is filled it. Sets oldest timing info if nFramesAgo is larger than the stored history.
+ * Be sure to set timing.size = sizeof(Compositor_FrameTiming) on struct passed in before calling this function. */
+ virtual bool GetFrameTiming( Compositor_FrameTiming *pTiming, uint32_t unFramesAgo = 0 ) = 0;
+
+ /** Interface for copying a range of timing data. Frames are returned in ascending order (oldest to newest) with the last being the most recent frame.
+ * Only the first entry's m_nSize needs to be set, as the rest will be inferred from that. Returns total number of entries filled out. */
+ virtual uint32_t GetFrameTimings( Compositor_FrameTiming *pTiming, uint32_t nFrames ) = 0;
+
+ /** Returns the time in seconds left in the current (as identified by FrameTiming's frameIndex) frame.
+ * Due to "running start", this value may roll over to the next frame before ever reaching 0.0. */
+ virtual float GetFrameTimeRemaining() = 0;
+
+ /** Fills out stats accumulated for the last connected application. Pass in sizeof( Compositor_CumulativeStats ) as second parameter. */
+ virtual void GetCumulativeStats( Compositor_CumulativeStats *pStats, uint32_t nStatsSizeInBytes ) = 0;
+
+ /** Fades the view on the HMD to the specified color. The fade will take fSeconds, and the color values are between
+ * 0.0 and 1.0. This color is faded on top of the scene based on the alpha parameter. Removing the fade color instantly
+ * would be FadeToColor( 0.0, 0.0, 0.0, 0.0, 0.0 ). Values are in un-premultiplied alpha space. */
+ virtual void FadeToColor( float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, bool bBackground = false ) = 0;
+
+ /** Get current fade color value. */
+ virtual HmdColor_t GetCurrentFadeColor( bool bBackground = false ) = 0;
+
+ /** Fading the Grid in or out in fSeconds */
+ virtual void FadeGrid( float fSeconds, bool bFadeIn ) = 0;
+
+ /** Get current alpha value of grid. */
+ virtual float GetCurrentGridAlpha() = 0;
+
+ /** Override the skybox used in the compositor (e.g. for during level loads when the app can't feed scene images fast enough)
+ * Order is Front, Back, Left, Right, Top, Bottom. If only a single texture is passed, it is assumed in lat-long format.
+ * If two are passed, it is assumed a lat-long stereo pair. */
+ virtual EVRCompositorError SetSkyboxOverride( VR_ARRAY_COUNT( unTextureCount ) const Texture_t *pTextures, uint32_t unTextureCount ) = 0;
+
+ /** Resets compositor skybox back to defaults. */
+ virtual void ClearSkyboxOverride() = 0;
+
+ /** Brings the compositor window to the front. This is useful for covering any other window that may be on the HMD
+ * and is obscuring the compositor window. */
+ virtual void CompositorBringToFront() = 0;
+
+ /** Pushes the compositor window to the back. This is useful for allowing other applications to draw directly to the HMD. */
+ virtual void CompositorGoToBack() = 0;
+
+ /** Tells the compositor process to clean up and exit. You do not need to call this function at shutdown. Under normal
+ * circumstances the compositor will manage its own life cycle based on what applications are running. */
+ virtual void CompositorQuit() = 0;
+
+ /** Return whether the compositor is fullscreen */
+ virtual bool IsFullscreen() = 0;
+
+ /** Returns the process ID of the process that is currently rendering the scene */
+ virtual uint32_t GetCurrentSceneFocusProcess() = 0;
+
+ /** Returns the process ID of the process that rendered the last frame (or 0 if the compositor itself rendered the frame.)
+ * Returns 0 when fading out from an app and the app's process Id when fading into an app. */
+ virtual uint32_t GetLastFrameRenderer() = 0;
+
+ /** Returns true if the current process has the scene focus */
+ virtual bool CanRenderScene() = 0;
+
+ /** Creates a window on the primary monitor to display what is being shown in the headset. */
+ virtual void ShowMirrorWindow() = 0;
+
+ /** Closes the mirror window. */
+ virtual void HideMirrorWindow() = 0;
+
+ /** Returns true if the mirror window is shown. */
+ virtual bool IsMirrorWindowVisible() = 0;
+
+ /** Writes all images that the compositor knows about (including overlays) to a 'screenshots' folder in the SteamVR runtime root. */
+ virtual void CompositorDumpImages() = 0;
+
+ /** Let an app know it should be rendering with low resources. */
+ virtual bool ShouldAppRenderWithLowResources() = 0;
+
+ /** Override interleaved reprojection logic to force on. */
+ virtual void ForceInterleavedReprojectionOn( bool bOverride ) = 0;
+
+ /** Force reconnecting to the compositor process. */
+ virtual void ForceReconnectProcess() = 0;
+
+ /** Temporarily suspends rendering (useful for finer control over scene transitions). */
+ virtual void SuspendRendering( bool bSuspend ) = 0;
+
+ /** Opens a shared D3D11 texture with the undistorted composited image for each eye. Use ReleaseMirrorTextureD3D11 when finished
+ * instead of calling Release on the resource itself. */
+ virtual vr::EVRCompositorError GetMirrorTextureD3D11( vr::EVREye eEye, void *pD3D11DeviceOrResource, void **ppD3D11ShaderResourceView ) = 0;
+ virtual void ReleaseMirrorTextureD3D11( void *pD3D11ShaderResourceView ) = 0;
+
+ /** Access to mirror textures from OpenGL. */
+ virtual vr::EVRCompositorError GetMirrorTextureGL( vr::EVREye eEye, vr::glUInt_t *pglTextureId, vr::glSharedTextureHandle_t *pglSharedTextureHandle ) = 0;
+ virtual bool ReleaseSharedGLTexture( vr::glUInt_t glTextureId, vr::glSharedTextureHandle_t glSharedTextureHandle ) = 0;
+ virtual void LockGLSharedTextureForAccess( vr::glSharedTextureHandle_t glSharedTextureHandle ) = 0;
+ virtual void UnlockGLSharedTextureForAccess( vr::glSharedTextureHandle_t glSharedTextureHandle ) = 0;
+
+ /** [Vulkan Only]
+ * return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing
+ * null. The string will be a space separated list of-required instance extensions to enable in VkCreateInstance */
+ virtual uint32_t GetVulkanInstanceExtensionsRequired( VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0;
+
+ /** [Vulkan only]
+ * return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing
+ * null. The string will be a space separated list of required device extensions to enable in VkCreateDevice */
+ virtual uint32_t GetVulkanDeviceExtensionsRequired( VkPhysicalDevice_T *pPhysicalDevice, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0;
+
+};
+
+static const char * const IVRCompositor_Version = "IVRCompositor_020";
+
+} // namespace vr
+
+
+
+// ivrnotifications.h
+namespace vr
+{
+
+#pragma pack( push, 8 )
+
+// Used for passing graphic data
+struct NotificationBitmap_t
+{
+ NotificationBitmap_t()
+ : m_pImageData( nullptr )
+ , m_nWidth( 0 )
+ , m_nHeight( 0 )
+ , m_nBytesPerPixel( 0 )
+ {
+ };
+
+ void *m_pImageData;
+ int32_t m_nWidth;
+ int32_t m_nHeight;
+ int32_t m_nBytesPerPixel;
+};
+
+
+/** Be aware that the notification type is used as 'priority' to pick the next notification */
+enum EVRNotificationType
+{
+ /** Transient notifications are automatically hidden after a period of time set by the user.
+ * They are used for things like information and chat messages that do not require user interaction. */
+ EVRNotificationType_Transient = 0,
+
+ /** Persistent notifications are shown to the user until they are hidden by calling RemoveNotification().
+ * They are used for things like phone calls and alarms that require user interaction. */
+ EVRNotificationType_Persistent = 1,
+
+ /** System notifications are shown no matter what. It is expected, that the ulUserValue is used as ID.
+ * If there is already a system notification in the queue with that ID it is not accepted into the queue
+ * to prevent spamming with system notification */
+ EVRNotificationType_Transient_SystemWithUserValue = 2,
+};
+
+enum EVRNotificationStyle
+{
+ /** Creates a notification with minimal external styling. */
+ EVRNotificationStyle_None = 0,
+
+ /** Used for notifications about overlay-level status. In Steam this is used for events like downloads completing. */
+ EVRNotificationStyle_Application = 100,
+
+ /** Used for notifications about contacts that are unknown or not available. In Steam this is used for friend invitations and offline friends. */
+ EVRNotificationStyle_Contact_Disabled = 200,
+
+ /** Used for notifications about contacts that are available but inactive. In Steam this is used for friends that are online but not playing a game. */
+ EVRNotificationStyle_Contact_Enabled = 201,
+
+ /** Used for notifications about contacts that are available and active. In Steam this is used for friends that are online and currently running a game. */
+ EVRNotificationStyle_Contact_Active = 202,
+};
+
+static const uint32_t k_unNotificationTextMaxSize = 256;
+
+typedef uint32_t VRNotificationId;
+
+
+
+#pragma pack( pop )
+
+/** Allows notification sources to interact with the VR system
+ This current interface is not yet implemented. Do not use yet. */
+class IVRNotifications
+{
+public:
+ /** Create a notification and enqueue it to be shown to the user.
+ * An overlay handle is required to create a notification, as otherwise it would be impossible for a user to act on it.
+ * To create a two-line notification, use a line break ('\n') to split the text into two lines.
+ * The pImage argument may be NULL, in which case the specified overlay's icon will be used instead. */
+ virtual EVRNotificationError CreateNotification( VROverlayHandle_t ulOverlayHandle, uint64_t ulUserValue, EVRNotificationType type, const char *pchText, EVRNotificationStyle style, const NotificationBitmap_t *pImage, /* out */ VRNotificationId *pNotificationId ) = 0;
+
+ /** Destroy a notification, hiding it first if it currently shown to the user. */
+ virtual EVRNotificationError RemoveNotification( VRNotificationId notificationId ) = 0;
+
+};
+
+static const char * const IVRNotifications_Version = "IVRNotifications_002";
+
+} // namespace vr
+
+
+
+// ivroverlay.h
+namespace vr
+{
+
+ /** The maximum length of an overlay key in bytes, counting the terminating null character. */
+ static const uint32_t k_unVROverlayMaxKeyLength = 128;
+
+ /** The maximum length of an overlay name in bytes, counting the terminating null character. */
+ static const uint32_t k_unVROverlayMaxNameLength = 128;
+
+ /** The maximum number of overlays that can exist in the system at one time. */
+ static const uint32_t k_unMaxOverlayCount = 64;
+
+ /** The maximum number of overlay intersection mask primitives per overlay */
+ static const uint32_t k_unMaxOverlayIntersectionMaskPrimitivesCount = 32;
+
+ /** Types of input supported by VR Overlays */
+ enum VROverlayInputMethod
+ {
+ VROverlayInputMethod_None = 0, // No input events will be generated automatically for this overlay
+ VROverlayInputMethod_Mouse = 1, // Tracked controllers will get mouse events automatically
+ };
+
+ /** Allows the caller to figure out which overlay transform getter to call. */
+ enum VROverlayTransformType
+ {
+ VROverlayTransform_Absolute = 0,
+ VROverlayTransform_TrackedDeviceRelative = 1,
+ VROverlayTransform_SystemOverlay = 2,
+ VROverlayTransform_TrackedComponent = 3,
+ };
+
+ /** Overlay control settings */
+ enum VROverlayFlags
+ {
+ VROverlayFlags_None = 0,
+
+ // The following only take effect when rendered using the high quality render path (see SetHighQualityOverlay).
+ VROverlayFlags_Curved = 1,
+ VROverlayFlags_RGSS4X = 2,
+
+ // Set this flag on a dashboard overlay to prevent a tab from showing up for that overlay
+ VROverlayFlags_NoDashboardTab = 3,
+
+ // Set this flag on a dashboard that is able to deal with gamepad focus events
+ VROverlayFlags_AcceptsGamepadEvents = 4,
+
+ // Indicates that the overlay should dim/brighten to show gamepad focus
+ VROverlayFlags_ShowGamepadFocus = 5,
+
+ // When in VROverlayInputMethod_Mouse you can optionally enable sending VRScroll_t
+ VROverlayFlags_SendVRScrollEvents = 6,
+ VROverlayFlags_SendVRTouchpadEvents = 7,
+
+ // If set this will render a vertical scroll wheel on the primary controller,
+ // only needed if not using VROverlayFlags_SendVRScrollEvents but you still want to represent a scroll wheel
+ VROverlayFlags_ShowTouchPadScrollWheel = 8,
+
+ // If this is set ownership and render access to the overlay are transferred
+ // to the new scene process on a call to IVRApplications::LaunchInternalProcess
+ VROverlayFlags_TransferOwnershipToInternalProcess = 9,
+
+ // If set, renders 50% of the texture in each eye, side by side
+ VROverlayFlags_SideBySide_Parallel = 10, // Texture is left/right
+ VROverlayFlags_SideBySide_Crossed = 11, // Texture is crossed and right/left
+
+ VROverlayFlags_Panorama = 12, // Texture is a panorama
+ VROverlayFlags_StereoPanorama = 13, // Texture is a stereo panorama
+
+ // If this is set on an overlay owned by the scene application that overlay
+ // will be sorted with the "Other" overlays on top of all other scene overlays
+ VROverlayFlags_SortWithNonSceneOverlays = 14,
+
+ // If set, the overlay will be shown in the dashboard, otherwise it will be hidden.
+ VROverlayFlags_VisibleInDashboard = 15,
+ };
+
+ enum VRMessageOverlayResponse
+ {
+ VRMessageOverlayResponse_ButtonPress_0 = 0,
+ VRMessageOverlayResponse_ButtonPress_1 = 1,
+ VRMessageOverlayResponse_ButtonPress_2 = 2,
+ VRMessageOverlayResponse_ButtonPress_3 = 3,
+ VRMessageOverlayResponse_CouldntFindSystemOverlay = 4,
+ VRMessageOverlayResponse_CouldntFindOrCreateClientOverlay= 5,
+ VRMessageOverlayResponse_ApplicationQuit = 6
+ };
+
+ struct VROverlayIntersectionParams_t
+ {
+ HmdVector3_t vSource;
+ HmdVector3_t vDirection;
+ ETrackingUniverseOrigin eOrigin;
+ };
+
+ struct VROverlayIntersectionResults_t
+ {
+ HmdVector3_t vPoint;
+ HmdVector3_t vNormal;
+ HmdVector2_t vUVs;
+ float fDistance;
+ };
+
+ // Input modes for the Big Picture gamepad text entry
+ enum EGamepadTextInputMode
+ {
+ k_EGamepadTextInputModeNormal = 0,
+ k_EGamepadTextInputModePassword = 1,
+ k_EGamepadTextInputModeSubmit = 2,
+ };
+
+ // Controls number of allowed lines for the Big Picture gamepad text entry
+ enum EGamepadTextInputLineMode
+ {
+ k_EGamepadTextInputLineModeSingleLine = 0,
+ k_EGamepadTextInputLineModeMultipleLines = 1
+ };
+
+ /** Directions for changing focus between overlays with the gamepad */
+ enum EOverlayDirection
+ {
+ OverlayDirection_Up = 0,
+ OverlayDirection_Down = 1,
+ OverlayDirection_Left = 2,
+ OverlayDirection_Right = 3,
+
+ OverlayDirection_Count = 4,
+ };
+
+ enum EVROverlayIntersectionMaskPrimitiveType
+ {
+ OverlayIntersectionPrimitiveType_Rectangle,
+ OverlayIntersectionPrimitiveType_Circle,
+ };
+
+ struct IntersectionMaskRectangle_t
+ {
+ float m_flTopLeftX;
+ float m_flTopLeftY;
+ float m_flWidth;
+ float m_flHeight;
+ };
+
+ struct IntersectionMaskCircle_t
+ {
+ float m_flCenterX;
+ float m_flCenterY;
+ float m_flRadius;
+ };
+
+ /** NOTE!!! If you change this you MUST manually update openvr_interop.cs.py and openvr_api_flat.h.py */
+ typedef union
+ {
+ IntersectionMaskRectangle_t m_Rectangle;
+ IntersectionMaskCircle_t m_Circle;
+ } VROverlayIntersectionMaskPrimitive_Data_t;
+
+ struct VROverlayIntersectionMaskPrimitive_t
+ {
+ EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType;
+ VROverlayIntersectionMaskPrimitive_Data_t m_Primitive;
+ };
+
+ class IVROverlay
+ {
+ public:
+
+ // ---------------------------------------------
+ // Overlay management methods
+ // ---------------------------------------------
+
+ /** Finds an existing overlay with the specified key. */
+ virtual EVROverlayError FindOverlay( const char *pchOverlayKey, VROverlayHandle_t * pOverlayHandle ) = 0;
+
+ /** Creates a new named overlay. All overlays start hidden and with default settings. */
+ virtual EVROverlayError CreateOverlay( const char *pchOverlayKey, const char *pchOverlayName, VROverlayHandle_t * pOverlayHandle ) = 0;
+
+ /** Destroys the specified overlay. When an application calls VR_Shutdown all overlays created by that app are
+ * automatically destroyed. */
+ virtual EVROverlayError DestroyOverlay( VROverlayHandle_t ulOverlayHandle ) = 0;
+
+ /** Specify which overlay to use the high quality render path. This overlay will be composited in during the distortion pass which
+ * results in it drawing on top of everything else, but also at a higher quality as it samples the source texture directly rather than
+ * rasterizing into each eye's render texture first. Because if this, only one of these is supported at any given time. It is most useful
+ * for overlays that are expected to take up most of the user's view (e.g. streaming video).
+ * This mode does not support mouse input to your overlay. */
+ virtual EVROverlayError SetHighQualityOverlay( VROverlayHandle_t ulOverlayHandle ) = 0;
+
+ /** Returns the overlay handle of the current overlay being rendered using the single high quality overlay render path.
+ * Otherwise it will return k_ulOverlayHandleInvalid. */
+ virtual vr::VROverlayHandle_t GetHighQualityOverlay() = 0;
+
+ /** Fills the provided buffer with the string key of the overlay. Returns the size of buffer required to store the key, including
+ * the terminating null character. k_unVROverlayMaxKeyLength will be enough bytes to fit the string. */
+ virtual uint32_t GetOverlayKey( VROverlayHandle_t ulOverlayHandle, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, EVROverlayError *pError = 0L ) = 0;
+
+ /** Fills the provided buffer with the friendly name of the overlay. Returns the size of buffer required to store the key, including
+ * the terminating null character. k_unVROverlayMaxNameLength will be enough bytes to fit the string. */
+ virtual uint32_t GetOverlayName( VROverlayHandle_t ulOverlayHandle, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, EVROverlayError *pError = 0L ) = 0;
+
+ /** set the name to use for this overlay */
+ virtual EVROverlayError SetOverlayName( VROverlayHandle_t ulOverlayHandle, const char *pchName ) = 0;
+
+ /** Gets the raw image data from an overlay. Overlay image data is always returned as RGBA data, 4 bytes per pixel. If the buffer is not large enough, width and height
+ * will be set and VROverlayError_ArrayTooSmall is returned. */
+ virtual EVROverlayError GetOverlayImageData( VROverlayHandle_t ulOverlayHandle, void *pvBuffer, uint32_t unBufferSize, uint32_t *punWidth, uint32_t *punHeight ) = 0;
+
+ /** returns a string that corresponds with the specified overlay error. The string will be the name
+ * of the error enum value for all valid error codes */
+ virtual const char *GetOverlayErrorNameFromEnum( EVROverlayError error ) = 0;
+
+ // ---------------------------------------------
+ // Overlay rendering methods
+ // ---------------------------------------------
+
+ /** Sets the pid that is allowed to render to this overlay (the creator pid is always allow to render),
+ * by default this is the pid of the process that made the overlay */
+ virtual EVROverlayError SetOverlayRenderingPid( VROverlayHandle_t ulOverlayHandle, uint32_t unPID ) = 0;
+
+ /** Gets the pid that is allowed to render to this overlay */
+ virtual uint32_t GetOverlayRenderingPid( VROverlayHandle_t ulOverlayHandle ) = 0;
+
+ /** Specify flag setting for a given overlay */
+ virtual EVROverlayError SetOverlayFlag( VROverlayHandle_t ulOverlayHandle, VROverlayFlags eOverlayFlag, bool bEnabled ) = 0;
+
+ /** Sets flag setting for a given overlay */
+ virtual EVROverlayError GetOverlayFlag( VROverlayHandle_t ulOverlayHandle, VROverlayFlags eOverlayFlag, bool *pbEnabled ) = 0;
+
+ /** Sets the color tint of the overlay quad. Use 0.0 to 1.0 per channel. */
+ virtual EVROverlayError SetOverlayColor( VROverlayHandle_t ulOverlayHandle, float fRed, float fGreen, float fBlue ) = 0;
+
+ /** Gets the color tint of the overlay quad. */
+ virtual EVROverlayError GetOverlayColor( VROverlayHandle_t ulOverlayHandle, float *pfRed, float *pfGreen, float *pfBlue ) = 0;
+
+ /** Sets the alpha of the overlay quad. Use 1.0 for 100 percent opacity to 0.0 for 0 percent opacity. */
+ virtual EVROverlayError SetOverlayAlpha( VROverlayHandle_t ulOverlayHandle, float fAlpha ) = 0;
+
+ /** Gets the alpha of the overlay quad. By default overlays are rendering at 100 percent alpha (1.0). */
+ virtual EVROverlayError GetOverlayAlpha( VROverlayHandle_t ulOverlayHandle, float *pfAlpha ) = 0;
+
+ /** Sets the aspect ratio of the texels in the overlay. 1.0 means the texels are square. 2.0 means the texels
+ * are twice as wide as they are tall. Defaults to 1.0. */
+ virtual EVROverlayError SetOverlayTexelAspect( VROverlayHandle_t ulOverlayHandle, float fTexelAspect ) = 0;
+
+ /** Gets the aspect ratio of the texels in the overlay. Defaults to 1.0 */
+ virtual EVROverlayError GetOverlayTexelAspect( VROverlayHandle_t ulOverlayHandle, float *pfTexelAspect ) = 0;
+
+ /** Sets the rendering sort order for the overlay. Overlays are rendered this order:
+ * Overlays owned by the scene application
+ * Overlays owned by some other application
+ *
+ * Within a category overlays are rendered lowest sort order to highest sort order. Overlays with the same
+ * sort order are rendered back to front base on distance from the HMD.
+ *
+ * Sort order defaults to 0. */
+ virtual EVROverlayError SetOverlaySortOrder( VROverlayHandle_t ulOverlayHandle, uint32_t unSortOrder ) = 0;
+
+ /** Gets the sort order of the overlay. See SetOverlaySortOrder for how this works. */
+ virtual EVROverlayError GetOverlaySortOrder( VROverlayHandle_t ulOverlayHandle, uint32_t *punSortOrder ) = 0;
+
+ /** Sets the width of the overlay quad in meters. By default overlays are rendered on a quad that is 1 meter across */
+ virtual EVROverlayError SetOverlayWidthInMeters( VROverlayHandle_t ulOverlayHandle, float fWidthInMeters ) = 0;
+
+ /** Returns the width of the overlay quad in meters. By default overlays are rendered on a quad that is 1 meter across */
+ virtual EVROverlayError GetOverlayWidthInMeters( VROverlayHandle_t ulOverlayHandle, float *pfWidthInMeters ) = 0;
+
+ /** For high-quality curved overlays only, sets the distance range in meters from the overlay used to automatically curve
+ * the surface around the viewer. Min is distance is when the surface will be most curved. Max is when least curved. */
+ virtual EVROverlayError SetOverlayAutoCurveDistanceRangeInMeters( VROverlayHandle_t ulOverlayHandle, float fMinDistanceInMeters, float fMaxDistanceInMeters ) = 0;
+
+ /** For high-quality curved overlays only, gets the distance range in meters from the overlay used to automatically curve
+ * the surface around the viewer. Min is distance is when the surface will be most curved. Max is when least curved. */
+ virtual EVROverlayError GetOverlayAutoCurveDistanceRangeInMeters( VROverlayHandle_t ulOverlayHandle, float *pfMinDistanceInMeters, float *pfMaxDistanceInMeters ) = 0;
+
+ /** Sets the colorspace the overlay texture's data is in. Defaults to 'auto'.
+ * If the texture needs to be resolved, you should call SetOverlayTexture with the appropriate colorspace instead. */
+ virtual EVROverlayError SetOverlayTextureColorSpace( VROverlayHandle_t ulOverlayHandle, EColorSpace eTextureColorSpace ) = 0;
+
+ /** Gets the overlay's current colorspace setting. */
+ virtual EVROverlayError GetOverlayTextureColorSpace( VROverlayHandle_t ulOverlayHandle, EColorSpace *peTextureColorSpace ) = 0;
+
+ /** Sets the part of the texture to use for the overlay. UV Min is the upper left corner and UV Max is the lower right corner. */
+ virtual EVROverlayError SetOverlayTextureBounds( VROverlayHandle_t ulOverlayHandle, const VRTextureBounds_t *pOverlayTextureBounds ) = 0;
+
+ /** Gets the part of the texture to use for the overlay. UV Min is the upper left corner and UV Max is the lower right corner. */
+ virtual EVROverlayError GetOverlayTextureBounds( VROverlayHandle_t ulOverlayHandle, VRTextureBounds_t *pOverlayTextureBounds ) = 0;
+
+ /** Gets render model to draw behind this overlay */
+ virtual uint32_t GetOverlayRenderModel( vr::VROverlayHandle_t ulOverlayHandle, char *pchValue, uint32_t unBufferSize, HmdColor_t *pColor, vr::EVROverlayError *pError ) = 0;
+
+ /** Sets render model to draw behind this overlay and the vertex color to use, pass null for pColor to match the overlays vertex color.
+ The model is scaled by the same amount as the overlay, with a default of 1m. */
+ virtual vr::EVROverlayError SetOverlayRenderModel( vr::VROverlayHandle_t ulOverlayHandle, const char *pchRenderModel, const HmdColor_t *pColor ) = 0;
+
+ /** Returns the transform type of this overlay. */
+ virtual EVROverlayError GetOverlayTransformType( VROverlayHandle_t ulOverlayHandle, VROverlayTransformType *peTransformType ) = 0;
+
+ /** Sets the transform to absolute tracking origin. */
+ virtual EVROverlayError SetOverlayTransformAbsolute( VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, const HmdMatrix34_t *pmatTrackingOriginToOverlayTransform ) = 0;
+
+ /** Gets the transform if it is absolute. Returns an error if the transform is some other type. */
+ virtual EVROverlayError GetOverlayTransformAbsolute( VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin *peTrackingOrigin, HmdMatrix34_t *pmatTrackingOriginToOverlayTransform ) = 0;
+
+ /** Sets the transform to relative to the transform of the specified tracked device. */
+ virtual EVROverlayError SetOverlayTransformTrackedDeviceRelative( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unTrackedDevice, const HmdMatrix34_t *pmatTrackedDeviceToOverlayTransform ) = 0;
+
+ /** Gets the transform if it is relative to a tracked device. Returns an error if the transform is some other type. */
+ virtual EVROverlayError GetOverlayTransformTrackedDeviceRelative( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t *punTrackedDevice, HmdMatrix34_t *pmatTrackedDeviceToOverlayTransform ) = 0;
+
+ /** Sets the transform to draw the overlay on a rendermodel component mesh instead of a quad. This will only draw when the system is
+ * drawing the device. Overlays with this transform type cannot receive mouse events. */
+ virtual EVROverlayError SetOverlayTransformTrackedDeviceComponent( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unDeviceIndex, const char *pchComponentName ) = 0;
+
+ /** Gets the transform information when the overlay is rendering on a component. */
+ virtual EVROverlayError GetOverlayTransformTrackedDeviceComponent( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t *punDeviceIndex, char *pchComponentName, uint32_t unComponentNameSize ) = 0;
+
+ /** Gets the transform if it is relative to another overlay. Returns an error if the transform is some other type. */
+ virtual vr::EVROverlayError GetOverlayTransformOverlayRelative( VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t *ulOverlayHandleParent, HmdMatrix34_t *pmatParentOverlayToOverlayTransform ) = 0;
+
+ /** Sets the transform to relative to the transform of the specified overlay. This overlays visibility will also track the parents visibility */
+ virtual vr::EVROverlayError SetOverlayTransformOverlayRelative( VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t ulOverlayHandleParent, const HmdMatrix34_t *pmatParentOverlayToOverlayTransform ) = 0;
+
+ /** Shows the VR overlay. For dashboard overlays, only the Dashboard Manager is allowed to call this. */
+ virtual EVROverlayError ShowOverlay( VROverlayHandle_t ulOverlayHandle ) = 0;
+
+ /** Hides the VR overlay. For dashboard overlays, only the Dashboard Manager is allowed to call this. */
+ virtual EVROverlayError HideOverlay( VROverlayHandle_t ulOverlayHandle ) = 0;
+
+ /** Returns true if the overlay is visible. */
+ virtual bool IsOverlayVisible( VROverlayHandle_t ulOverlayHandle ) = 0;
+
+ /** Get the transform in 3d space associated with a specific 2d point in the overlay's coordinate space (where 0,0 is the lower left). -Z points out of the overlay */
+ virtual EVROverlayError GetTransformForOverlayCoordinates( VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, HmdVector2_t coordinatesInOverlay, HmdMatrix34_t *pmatTransform ) = 0;
+
+ // ---------------------------------------------
+ // Overlay input methods
+ // ---------------------------------------------
+
+ /** Returns true and fills the event with the next event on the overlay's event queue, if there is one.
+ * If there are no events this method returns false. uncbVREvent should be the size in bytes of the VREvent_t struct */
+ virtual bool PollNextOverlayEvent( VROverlayHandle_t ulOverlayHandle, VREvent_t *pEvent, uint32_t uncbVREvent ) = 0;
+
+ /** Returns the current input settings for the specified overlay. */
+ virtual EVROverlayError GetOverlayInputMethod( VROverlayHandle_t ulOverlayHandle, VROverlayInputMethod *peInputMethod ) = 0;
+
+ /** Sets the input settings for the specified overlay. */
+ virtual EVROverlayError SetOverlayInputMethod( VROverlayHandle_t ulOverlayHandle, VROverlayInputMethod eInputMethod ) = 0;
+
+ /** Gets the mouse scaling factor that is used for mouse events. The actual texture may be a different size, but this is
+ * typically the size of the underlying UI in pixels. */
+ virtual EVROverlayError GetOverlayMouseScale( VROverlayHandle_t ulOverlayHandle, HmdVector2_t *pvecMouseScale ) = 0;
+
+ /** Sets the mouse scaling factor that is used for mouse events. The actual texture may be a different size, but this is
+ * typically the size of the underlying UI in pixels (not in world space). */
+ virtual EVROverlayError SetOverlayMouseScale( VROverlayHandle_t ulOverlayHandle, const HmdVector2_t *pvecMouseScale ) = 0;
+
+ /** Computes the overlay-space pixel coordinates of where the ray intersects the overlay with the
+ * specified settings. Returns false if there is no intersection. */
+ virtual bool ComputeOverlayIntersection( VROverlayHandle_t ulOverlayHandle, const VROverlayIntersectionParams_t *pParams, VROverlayIntersectionResults_t *pResults ) = 0;
+
+ /** Processes mouse input from the specified controller as though it were a mouse pointed at a compositor overlay with the
+ * specified settings. The controller is treated like a laser pointer on the -z axis. The point where the laser pointer would
+ * intersect with the overlay is the mouse position, the trigger is left mouse, and the track pad is right mouse.
+ *
+ * Return true if the controller is pointed at the overlay and an event was generated. */
+ virtual bool HandleControllerOverlayInteractionAsMouse( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unControllerDeviceIndex ) = 0;
+
+ /** Returns true if the specified overlay is the hover target. An overlay is the hover target when it is the last overlay "moused over"
+ * by the virtual mouse pointer */
+ virtual bool IsHoverTargetOverlay( VROverlayHandle_t ulOverlayHandle ) = 0;
+
+ /** Returns the current Gamepad focus overlay */
+ virtual vr::VROverlayHandle_t GetGamepadFocusOverlay() = 0;
+
+ /** Sets the current Gamepad focus overlay */
+ virtual EVROverlayError SetGamepadFocusOverlay( VROverlayHandle_t ulNewFocusOverlay ) = 0;
+
+ /** Sets an overlay's neighbor. This will also set the neighbor of the "to" overlay
+ * to point back to the "from" overlay. If an overlay's neighbor is set to invalid both
+ * ends will be cleared */
+ virtual EVROverlayError SetOverlayNeighbor( EOverlayDirection eDirection, VROverlayHandle_t ulFrom, VROverlayHandle_t ulTo ) = 0;
+
+ /** Changes the Gamepad focus from one overlay to one of its neighbors. Returns VROverlayError_NoNeighbor if there is no
+ * neighbor in that direction */
+ virtual EVROverlayError MoveGamepadFocusToNeighbor( EOverlayDirection eDirection, VROverlayHandle_t ulFrom ) = 0;
+
+ // ---------------------------------------------
+ // Overlay texture methods
+ // ---------------------------------------------
+
+ /** Texture to draw for the overlay. This function can only be called by the overlay's creator or renderer process (see SetOverlayRenderingPid) .
+ *
+ * OpenGL dirty state:
+ * glBindTexture
+ */
+ virtual EVROverlayError SetOverlayTexture( VROverlayHandle_t ulOverlayHandle, const Texture_t *pTexture ) = 0;
+
+ /** Use this to tell the overlay system to release the texture set for this overlay. */
+ virtual EVROverlayError ClearOverlayTexture( VROverlayHandle_t ulOverlayHandle ) = 0;
+
+ /** Separate interface for providing the data as a stream of bytes, but there is an upper bound on data
+ * that can be sent. This function can only be called by the overlay's renderer process. */
+ virtual EVROverlayError SetOverlayRaw( VROverlayHandle_t ulOverlayHandle, void *pvBuffer, uint32_t unWidth, uint32_t unHeight, uint32_t unDepth ) = 0;
+
+ /** Separate interface for providing the image through a filename: can be png or jpg, and should not be bigger than 1920x1080.
+ * This function can only be called by the overlay's renderer process */
+ virtual EVROverlayError SetOverlayFromFile( VROverlayHandle_t ulOverlayHandle, const char *pchFilePath ) = 0;
+
+ /** Get the native texture handle/device for an overlay you have created.
+ * On windows this handle will be a ID3D11ShaderResourceView with a ID3D11Texture2D bound.
+ *
+ * The texture will always be sized to match the backing texture you supplied in SetOverlayTexture above.
+ *
+ * You MUST call ReleaseNativeOverlayHandle() with pNativeTextureHandle once you are done with this texture.
+ *
+ * pNativeTextureHandle is an OUTPUT, it will be a pointer to a ID3D11ShaderResourceView *.
+ * pNativeTextureRef is an INPUT and should be a ID3D11Resource *. The device used by pNativeTextureRef will be used to bind pNativeTextureHandle.
+ */
+ virtual EVROverlayError GetOverlayTexture( VROverlayHandle_t ulOverlayHandle, void **pNativeTextureHandle, void *pNativeTextureRef, uint32_t *pWidth, uint32_t *pHeight, uint32_t *pNativeFormat, ETextureType *pAPIType, EColorSpace *pColorSpace, VRTextureBounds_t *pTextureBounds ) = 0;
+
+ /** Release the pNativeTextureHandle provided from the GetOverlayTexture call, this allows the system to free the underlying GPU resources for this object,
+ * so only do it once you stop rendering this texture.
+ */
+ virtual EVROverlayError ReleaseNativeOverlayHandle( VROverlayHandle_t ulOverlayHandle, void *pNativeTextureHandle ) = 0;
+
+ /** Get the size of the overlay texture */
+ virtual EVROverlayError GetOverlayTextureSize( VROverlayHandle_t ulOverlayHandle, uint32_t *pWidth, uint32_t *pHeight ) = 0;
+
+ // ----------------------------------------------
+ // Dashboard Overlay Methods
+ // ----------------------------------------------
+
+ /** Creates a dashboard overlay and returns its handle */
+ virtual EVROverlayError CreateDashboardOverlay( const char *pchOverlayKey, const char *pchOverlayFriendlyName, VROverlayHandle_t * pMainHandle, VROverlayHandle_t *pThumbnailHandle ) = 0;
+
+ /** Returns true if the dashboard is visible */
+ virtual bool IsDashboardVisible() = 0;
+
+ /** returns true if the dashboard is visible and the specified overlay is the active system Overlay */
+ virtual bool IsActiveDashboardOverlay( VROverlayHandle_t ulOverlayHandle ) = 0;
+
+ /** Sets the dashboard overlay to only appear when the specified process ID has scene focus */
+ virtual EVROverlayError SetDashboardOverlaySceneProcess( VROverlayHandle_t ulOverlayHandle, uint32_t unProcessId ) = 0;
+
+ /** Gets the process ID that this dashboard overlay requires to have scene focus */
+ virtual EVROverlayError GetDashboardOverlaySceneProcess( VROverlayHandle_t ulOverlayHandle, uint32_t *punProcessId ) = 0;
+
+ /** Shows the dashboard. */
+ virtual void ShowDashboard( const char *pchOverlayToShow ) = 0;
+
+ /** Returns the tracked device that has the laser pointer in the dashboard */
+ virtual vr::TrackedDeviceIndex_t GetPrimaryDashboardDevice() = 0;
+
+ // ---------------------------------------------
+ // Keyboard methods
+ // ---------------------------------------------
+
+ /** Show the virtual keyboard to accept input **/
+ virtual EVROverlayError ShowKeyboard( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32_t unCharMax, const char *pchExistingText, bool bUseMinimalMode, uint64_t uUserValue ) = 0;
+
+ virtual EVROverlayError ShowKeyboardForOverlay( VROverlayHandle_t ulOverlayHandle, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32_t unCharMax, const char *pchExistingText, bool bUseMinimalMode, uint64_t uUserValue ) = 0;
+
+ /** Get the text that was entered into the text input **/
+ virtual uint32_t GetKeyboardText( VR_OUT_STRING() char *pchText, uint32_t cchText ) = 0;
+
+ /** Hide the virtual keyboard **/
+ virtual void HideKeyboard() = 0;
+
+ /** Set the position of the keyboard in world space **/
+ virtual void SetKeyboardTransformAbsolute( ETrackingUniverseOrigin eTrackingOrigin, const HmdMatrix34_t *pmatTrackingOriginToKeyboardTransform ) = 0;
+
+ /** Set the position of the keyboard in overlay space by telling it to avoid a rectangle in the overlay. Rectangle coords have (0,0) in the bottom left **/
+ virtual void SetKeyboardPositionForOverlay( VROverlayHandle_t ulOverlayHandle, HmdRect2_t avoidRect ) = 0;
+
+ // ---------------------------------------------
+ // Overlay input methods
+ // ---------------------------------------------
+
+ /** Sets a list of primitives to be used for controller ray intersection
+ * typically the size of the underlying UI in pixels (not in world space). */
+ virtual EVROverlayError SetOverlayIntersectionMask( VROverlayHandle_t ulOverlayHandle, VROverlayIntersectionMaskPrimitive_t *pMaskPrimitives, uint32_t unNumMaskPrimitives, uint32_t unPrimitiveSize = sizeof( VROverlayIntersectionMaskPrimitive_t ) ) = 0;
+
+ virtual EVROverlayError GetOverlayFlags( VROverlayHandle_t ulOverlayHandle, uint32_t *pFlags ) = 0;
+
+ // ---------------------------------------------
+ // Message box methods
+ // ---------------------------------------------
+
+ /** Show the message overlay. This will block and return you a result. **/
+ virtual VRMessageOverlayResponse ShowMessageOverlay( const char* pchText, const char* pchCaption, const char* pchButton0Text, const char* pchButton1Text = nullptr, const char* pchButton2Text = nullptr, const char* pchButton3Text = nullptr ) = 0;
+ };
+
+ static const char * const IVROverlay_Version = "IVROverlay_016";
+
+} // namespace vr
+
+// ivrrendermodels.h
+namespace vr
+{
+
+static const char * const k_pch_Controller_Component_GDC2015 = "gdc2015"; // Canonical coordinate system of the gdc 2015 wired controller, provided for backwards compatibility
+static const char * const k_pch_Controller_Component_Base = "base"; // For controllers with an unambiguous 'base'.
+static const char * const k_pch_Controller_Component_Tip = "tip"; // For controllers with an unambiguous 'tip' (used for 'laser-pointing')
+static const char * const k_pch_Controller_Component_HandGrip = "handgrip"; // Neutral, ambidextrous hand-pose when holding controller. On plane between neutrally posed index finger and thumb
+static const char * const k_pch_Controller_Component_Status = "status"; // 1:1 aspect ratio status area, with canonical [0,1] uv mapping
+
+#pragma pack( push, 8 )
+
+/** Errors that can occur with the VR compositor */
+enum EVRRenderModelError
+{
+ VRRenderModelError_None = 0,
+ VRRenderModelError_Loading = 100,
+ VRRenderModelError_NotSupported = 200,
+ VRRenderModelError_InvalidArg = 300,
+ VRRenderModelError_InvalidModel = 301,
+ VRRenderModelError_NoShapes = 302,
+ VRRenderModelError_MultipleShapes = 303,
+ VRRenderModelError_TooManyVertices = 304,
+ VRRenderModelError_MultipleTextures = 305,
+ VRRenderModelError_BufferTooSmall = 306,
+ VRRenderModelError_NotEnoughNormals = 307,
+ VRRenderModelError_NotEnoughTexCoords = 308,
+
+ VRRenderModelError_InvalidTexture = 400,
+};
+
+typedef uint32_t VRComponentProperties;
+
+enum EVRComponentProperty
+{
+ VRComponentProperty_IsStatic = (1 << 0),
+ VRComponentProperty_IsVisible = (1 << 1),
+ VRComponentProperty_IsTouched = (1 << 2),
+ VRComponentProperty_IsPressed = (1 << 3),
+ VRComponentProperty_IsScrolled = (1 << 4),
+};
+
+/** Describes state information about a render-model component, including transforms and other dynamic properties */
+struct RenderModel_ComponentState_t
+{
+ HmdMatrix34_t mTrackingToComponentRenderModel; // Transform required when drawing the component render model
+ HmdMatrix34_t mTrackingToComponentLocal; // Transform available for attaching to a local component coordinate system (-Z out from surface )
+ VRComponentProperties uProperties;
+};
+
+/** A single vertex in a render model */
+struct RenderModel_Vertex_t
+{
+ HmdVector3_t vPosition; // position in meters in device space
+ HmdVector3_t vNormal;
+ float rfTextureCoord[2];
+};
+
+/** A texture map for use on a render model */
+#if defined(__linux__) || defined(__APPLE__)
+// This structure was originally defined mis-packed on Linux, preserved for
+// compatibility.
+#pragma pack( push, 4 )
+#endif
+
+struct RenderModel_TextureMap_t
+{
+ uint16_t unWidth, unHeight; // width and height of the texture map in pixels
+ const uint8_t *rubTextureMapData; // Map texture data. All textures are RGBA with 8 bits per channel per pixel. Data size is width * height * 4ub
+};
+#if defined(__linux__) || defined(__APPLE__)
+#pragma pack( pop )
+#endif
+
+/** Session unique texture identifier. Rendermodels which share the same texture will have the same id.
+IDs <0 denote the texture is not present */
+
+typedef int32_t TextureID_t;
+
+const TextureID_t INVALID_TEXTURE_ID = -1;
+
+#if defined(__linux__) || defined(__APPLE__)
+// This structure was originally defined mis-packed on Linux, preserved for
+// compatibility.
+#pragma pack( push, 4 )
+#endif
+
+struct RenderModel_t
+{
+ const RenderModel_Vertex_t *rVertexData; // Vertex data for the mesh
+ uint32_t unVertexCount; // Number of vertices in the vertex data
+ const uint16_t *rIndexData; // Indices into the vertex data for each triangle
+ uint32_t unTriangleCount; // Number of triangles in the mesh. Index count is 3 * TriangleCount
+ TextureID_t diffuseTextureId; // Session unique texture identifier. Rendermodels which share the same texture will have the same id. <0 == texture not present
+};
+#if defined(__linux__) || defined(__APPLE__)
+#pragma pack( pop )
+#endif
+
+
+struct RenderModel_ControllerMode_State_t
+{
+ bool bScrollWheelVisible; // is this controller currently set to be in a scroll wheel mode
+};
+
+#pragma pack( pop )
+
+class IVRRenderModels
+{
+public:
+
+ /** Loads and returns a render model for use in the application. pchRenderModelName should be a render model name
+ * from the Prop_RenderModelName_String property or an absolute path name to a render model on disk.
+ *
+ * The resulting render model is valid until VR_Shutdown() is called or until FreeRenderModel() is called. When the
+ * application is finished with the render model it should call FreeRenderModel() to free the memory associated
+ * with the model.
+ *
+ * The method returns VRRenderModelError_Loading while the render model is still being loaded.
+ * The method returns VRRenderModelError_None once loaded successfully, otherwise will return an error. */
+ virtual EVRRenderModelError LoadRenderModel_Async( const char *pchRenderModelName, RenderModel_t **ppRenderModel ) = 0;
+
+ /** Frees a previously returned render model
+ * It is safe to call this on a null ptr. */
+ virtual void FreeRenderModel( RenderModel_t *pRenderModel ) = 0;
+
+ /** Loads and returns a texture for use in the application. */
+ virtual EVRRenderModelError LoadTexture_Async( TextureID_t textureId, RenderModel_TextureMap_t **ppTexture ) = 0;
+
+ /** Frees a previously returned texture
+ * It is safe to call this on a null ptr. */
+ virtual void FreeTexture( RenderModel_TextureMap_t *pTexture ) = 0;
+
+ /** Creates a D3D11 texture and loads data into it. */
+ virtual EVRRenderModelError LoadTextureD3D11_Async( TextureID_t textureId, void *pD3D11Device, void **ppD3D11Texture2D ) = 0;
+
+ /** Helper function to copy the bits into an existing texture. */
+ virtual EVRRenderModelError LoadIntoTextureD3D11_Async( TextureID_t textureId, void *pDstTexture ) = 0;
+
+ /** Use this to free textures created with LoadTextureD3D11_Async instead of calling Release on them. */
+ virtual void FreeTextureD3D11( void *pD3D11Texture2D ) = 0;
+
+ /** Use this to get the names of available render models. Index does not correlate to a tracked device index, but
+ * is only used for iterating over all available render models. If the index is out of range, this function will return 0.
+ * Otherwise, it will return the size of the buffer required for the name. */
+ virtual uint32_t GetRenderModelName( uint32_t unRenderModelIndex, VR_OUT_STRING() char *pchRenderModelName, uint32_t unRenderModelNameLen ) = 0;
+
+ /** Returns the number of available render models. */
+ virtual uint32_t GetRenderModelCount() = 0;
+
+
+ /** Returns the number of components of the specified render model.
+ * Components are useful when client application wish to draw, label, or otherwise interact with components of tracked objects.
+ * Examples controller components:
+ * renderable things such as triggers, buttons
+ * non-renderable things which include coordinate systems such as 'tip', 'base', a neutral controller agnostic hand-pose
+ * If all controller components are enumerated and rendered, it will be equivalent to drawing the traditional render model
+ * Returns 0 if components not supported, >0 otherwise */
+ virtual uint32_t GetComponentCount( const char *pchRenderModelName ) = 0;
+
+ /** Use this to get the names of available components. Index does not correlate to a tracked device index, but
+ * is only used for iterating over all available components. If the index is out of range, this function will return 0.
+ * Otherwise, it will return the size of the buffer required for the name. */
+ virtual uint32_t GetComponentName( const char *pchRenderModelName, uint32_t unComponentIndex, VR_OUT_STRING( ) char *pchComponentName, uint32_t unComponentNameLen ) = 0;
+
+ /** Get the button mask for all buttons associated with this component
+ * If no buttons (or axes) are associated with this component, return 0
+ * Note: multiple components may be associated with the same button. Ex: two grip buttons on a single controller.
+ * Note: A single component may be associated with multiple buttons. Ex: A trackpad which also provides "D-pad" functionality */
+ virtual uint64_t GetComponentButtonMask( const char *pchRenderModelName, const char *pchComponentName ) = 0;
+
+ /** Use this to get the render model name for the specified rendermode/component combination, to be passed to LoadRenderModel.
+ * If the component name is out of range, this function will return 0.
+ * Otherwise, it will return the size of the buffer required for the name. */
+ virtual uint32_t GetComponentRenderModelName( const char *pchRenderModelName, const char *pchComponentName, VR_OUT_STRING( ) char *pchComponentRenderModelName, uint32_t unComponentRenderModelNameLen ) = 0;
+
+ /** Use this to query information about the component, as a function of the controller state.
+ *
+ * For dynamic controller components (ex: trigger) values will reflect component motions
+ * For static components this will return a consistent value independent of the VRControllerState_t
+ *
+ * If the pchRenderModelName or pchComponentName is invalid, this will return false (and transforms will be set to identity).
+ * Otherwise, return true
+ * Note: For dynamic objects, visibility may be dynamic. (I.e., true/false will be returned based on controller state and controller mode state ) */
+ virtual bool GetComponentState( const char *pchRenderModelName, const char *pchComponentName, const vr::VRControllerState_t *pControllerState, const RenderModel_ControllerMode_State_t *pState, RenderModel_ComponentState_t *pComponentState ) = 0;
+
+ /** Returns true if the render model has a component with the specified name */
+ virtual bool RenderModelHasComponent( const char *pchRenderModelName, const char *pchComponentName ) = 0;
+
+ /** Returns the URL of the thumbnail image for this rendermodel */
+ virtual uint32_t GetRenderModelThumbnailURL( const char *pchRenderModelName, VR_OUT_STRING() char *pchThumbnailURL, uint32_t unThumbnailURLLen, vr::EVRRenderModelError *peError ) = 0;
+
+ /** Provides a render model path that will load the unskinned model if the model name provided has been replace by the user. If the model
+ * hasn't been replaced the path value will still be a valid path to load the model. Pass this to LoadRenderModel_Async, etc. to load the
+ * model. */
+ virtual uint32_t GetRenderModelOriginalPath( const char *pchRenderModelName, VR_OUT_STRING() char *pchOriginalPath, uint32_t unOriginalPathLen, vr::EVRRenderModelError *peError ) = 0;
+
+ /** Returns a string for a render model error */
+ virtual const char *GetRenderModelErrorNameFromEnum( vr::EVRRenderModelError error ) = 0;
+};
+
+static const char * const IVRRenderModels_Version = "IVRRenderModels_005";
+
+}
+
+
+// ivrextendeddisplay.h
+namespace vr
+{
+
+ /** NOTE: Use of this interface is not recommended in production applications. It will not work for displays which use
+ * direct-to-display mode. Creating our own window is also incompatible with the VR compositor and is not available when the compositor is running. */
+ class IVRExtendedDisplay
+ {
+ public:
+
+ /** Size and position that the window needs to be on the VR display. */
+ virtual void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Gets the viewport in the frame buffer to draw the output of the distortion into */
+ virtual void GetEyeOutputViewport( EVREye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** [D3D10/11 Only]
+ * Returns the adapter index and output index that the user should pass into EnumAdapters and EnumOutputs
+ * to create the device and swap chain in DX10 and DX11. If an error occurs both indices will be set to -1.
+ */
+ virtual void GetDXGIOutputInfo( int32_t *pnAdapterIndex, int32_t *pnAdapterOutputIndex ) = 0;
+
+ };
+
+ static const char * const IVRExtendedDisplay_Version = "IVRExtendedDisplay_001";
+
+}
+
+
+// ivrtrackedcamera.h
+namespace vr
+{
+
+class IVRTrackedCamera
+{
+public:
+ /** Returns a string for an error */
+ virtual const char *GetCameraErrorNameFromEnum( vr::EVRTrackedCameraError eCameraError ) = 0;
+
+ /** For convenience, same as tracked property request Prop_HasCamera_Bool */
+ virtual vr::EVRTrackedCameraError HasCamera( vr::TrackedDeviceIndex_t nDeviceIndex, bool *pHasCamera ) = 0;
+
+ /** Gets size of the image frame. */
+ virtual vr::EVRTrackedCameraError GetCameraFrameSize( vr::TrackedDeviceIndex_t nDeviceIndex, vr::EVRTrackedCameraFrameType eFrameType, uint32_t *pnWidth, uint32_t *pnHeight, uint32_t *pnFrameBufferSize ) = 0;
+
+ virtual vr::EVRTrackedCameraError GetCameraIntrinsics( vr::TrackedDeviceIndex_t nDeviceIndex, vr::EVRTrackedCameraFrameType eFrameType, vr::HmdVector2_t *pFocalLength, vr::HmdVector2_t *pCenter ) = 0;
+
+ virtual vr::EVRTrackedCameraError GetCameraProjection( vr::TrackedDeviceIndex_t nDeviceIndex, vr::EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, vr::HmdMatrix44_t *pProjection ) = 0;
+
+ /** Acquiring streaming service permits video streaming for the caller. Releasing hints the system that video services do not need to be maintained for this client.
+ * If the camera has not already been activated, a one time spin up may incur some auto exposure as well as initial streaming frame delays.
+ * The camera should be considered a global resource accessible for shared consumption but not exclusive to any caller.
+ * The camera may go inactive due to lack of active consumers or headset idleness. */
+ virtual vr::EVRTrackedCameraError AcquireVideoStreamingService( vr::TrackedDeviceIndex_t nDeviceIndex, vr::TrackedCameraHandle_t *pHandle ) = 0;
+ virtual vr::EVRTrackedCameraError ReleaseVideoStreamingService( vr::TrackedCameraHandle_t hTrackedCamera ) = 0;
+
+ /** Copies the image frame into a caller's provided buffer. The image data is currently provided as RGBA data, 4 bytes per pixel.
+ * A caller can provide null for the framebuffer or frameheader if not desired. Requesting the frame header first, followed by the frame buffer allows
+ * the caller to determine if the frame as advanced per the frame header sequence.
+ * If there is no frame available yet, due to initial camera spinup or re-activation, the error will be VRTrackedCameraError_NoFrameAvailable.
+ * Ideally a caller should be polling at ~16ms intervals */
+ virtual vr::EVRTrackedCameraError GetVideoStreamFrameBuffer( vr::TrackedCameraHandle_t hTrackedCamera, vr::EVRTrackedCameraFrameType eFrameType, void *pFrameBuffer, uint32_t nFrameBufferSize, vr::CameraVideoStreamFrameHeader_t *pFrameHeader, uint32_t nFrameHeaderSize ) = 0;
+
+ /** Gets size of the image frame. */
+ virtual vr::EVRTrackedCameraError GetVideoStreamTextureSize( vr::TrackedDeviceIndex_t nDeviceIndex, vr::EVRTrackedCameraFrameType eFrameType, vr::VRTextureBounds_t *pTextureBounds, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Access a shared D3D11 texture for the specified tracked camera stream.
+ * The camera frame type VRTrackedCameraFrameType_Undistorted is not supported directly as a shared texture. It is an interior subregion of the shared texture VRTrackedCameraFrameType_MaximumUndistorted.
+ * Instead, use GetVideoStreamTextureSize() with VRTrackedCameraFrameType_Undistorted to determine the proper interior subregion bounds along with GetVideoStreamTextureD3D11() with
+ * VRTrackedCameraFrameType_MaximumUndistorted to provide the texture. The VRTrackedCameraFrameType_MaximumUndistorted will yield an image where the invalid regions are decoded
+ * by the alpha channel having a zero component. The valid regions all have a non-zero alpha component. The subregion as described by VRTrackedCameraFrameType_Undistorted
+ * guarantees a rectangle where all pixels are valid. */
+ virtual vr::EVRTrackedCameraError GetVideoStreamTextureD3D11( vr::TrackedCameraHandle_t hTrackedCamera, vr::EVRTrackedCameraFrameType eFrameType, void *pD3D11DeviceOrResource, void **ppD3D11ShaderResourceView, vr::CameraVideoStreamFrameHeader_t *pFrameHeader, uint32_t nFrameHeaderSize ) = 0;
+
+ /** Access a shared GL texture for the specified tracked camera stream */
+ virtual vr::EVRTrackedCameraError GetVideoStreamTextureGL( vr::TrackedCameraHandle_t hTrackedCamera, vr::EVRTrackedCameraFrameType eFrameType, vr::glUInt_t *pglTextureId, vr::CameraVideoStreamFrameHeader_t *pFrameHeader, uint32_t nFrameHeaderSize ) = 0;
+ virtual vr::EVRTrackedCameraError ReleaseVideoStreamTextureGL( vr::TrackedCameraHandle_t hTrackedCamera, vr::glUInt_t glTextureId ) = 0;
+};
+
+static const char * const IVRTrackedCamera_Version = "IVRTrackedCamera_003";
+
+} // namespace vr
+
+
+// ivrscreenshots.h
+namespace vr
+{
+
+/** Errors that can occur with the VR compositor */
+enum EVRScreenshotError
+{
+ VRScreenshotError_None = 0,
+ VRScreenshotError_RequestFailed = 1,
+ VRScreenshotError_IncompatibleVersion = 100,
+ VRScreenshotError_NotFound = 101,
+ VRScreenshotError_BufferTooSmall = 102,
+ VRScreenshotError_ScreenshotAlreadyInProgress = 108,
+};
+
+/** Allows the application to generate screenshots */
+class IVRScreenshots
+{
+public:
+ /** Request a screenshot of the requested type.
+ * A request of the VRScreenshotType_Stereo type will always
+ * work. Other types will depend on the underlying application
+ * support.
+ * The first file name is for the preview image and should be a
+ * regular screenshot (ideally from the left eye). The second
+ * is the VR screenshot in the correct format. They should be
+ * in the same aspect ratio. Formats per type:
+ * VRScreenshotType_Mono: the VR filename is ignored (can be
+ * nullptr), this is a normal flat single shot.
+ * VRScreenshotType_Stereo: The VR image should be a
+ * side-by-side with the left eye image on the left.
+ * VRScreenshotType_Cubemap: The VR image should be six square
+ * images composited horizontally.
+ * VRScreenshotType_StereoPanorama: above/below with left eye
+ * panorama being the above image. Image is typically square
+ * with the panorama being 2x horizontal.
+ *
+ * Note that the VR dashboard will call this function when
+ * the user presses the screenshot binding (currently System
+ * Button + Trigger). If Steam is running, the destination
+ * file names will be in %TEMP% and will be copied into
+ * Steam's screenshot library for the running application
+ * once SubmitScreenshot() is called.
+ * If Steam is not running, the paths will be in the user's
+ * documents folder under Documents\SteamVR\Screenshots.
+ * Other VR applications can call this to initiate a
+ * screenshot outside of user control.
+ * The destination file names do not need an extension,
+ * will be replaced with the correct one for the format
+ * which is currently .png. */
+ virtual vr::EVRScreenshotError RequestScreenshot( vr::ScreenshotHandle_t *pOutScreenshotHandle, vr::EVRScreenshotType type, const char *pchPreviewFilename, const char *pchVRFilename ) = 0;
+
+ /** Called by the running VR application to indicate that it
+ * wishes to be in charge of screenshots. If the
+ * application does not call this, the Compositor will only
+ * support VRScreenshotType_Stereo screenshots that will be
+ * captured without notification to the running app.
+ * Once hooked your application will receive a
+ * VREvent_RequestScreenshot event when the user presses the
+ * buttons to take a screenshot. */
+ virtual vr::EVRScreenshotError HookScreenshot( VR_ARRAY_COUNT( numTypes ) const vr::EVRScreenshotType *pSupportedTypes, int numTypes ) = 0;
+
+ /** When your application receives a
+ * VREvent_RequestScreenshot event, call these functions to get
+ * the details of the screenshot request. */
+ virtual vr::EVRScreenshotType GetScreenshotPropertyType( vr::ScreenshotHandle_t screenshotHandle, vr::EVRScreenshotError *pError ) = 0;
+
+ /** Get the filename for the preview or vr image (see
+ * vr::EScreenshotPropertyFilenames). The return value is
+ * the size of the string. */
+ virtual uint32_t GetScreenshotPropertyFilename( vr::ScreenshotHandle_t screenshotHandle, vr::EVRScreenshotPropertyFilenames filenameType, VR_OUT_STRING() char *pchFilename, uint32_t cchFilename, vr::EVRScreenshotError *pError ) = 0;
+
+ /** Call this if the application is taking the screen shot
+ * will take more than a few ms processing. This will result
+ * in an overlay being presented that shows a completion
+ * bar. */
+ virtual vr::EVRScreenshotError UpdateScreenshotProgress( vr::ScreenshotHandle_t screenshotHandle, float flProgress ) = 0;
+
+ /** Tells the compositor to take an internal screenshot of
+ * type VRScreenshotType_Stereo. It will take the current
+ * submitted scene textures of the running application and
+ * write them into the preview image and a side-by-side file
+ * for the VR image.
+ * This is similar to request screenshot, but doesn't ever
+ * talk to the application, just takes the shot and submits. */
+ virtual vr::EVRScreenshotError TakeStereoScreenshot( vr::ScreenshotHandle_t *pOutScreenshotHandle, const char *pchPreviewFilename, const char *pchVRFilename ) = 0;
+
+ /** Submit the completed screenshot. If Steam is running
+ * this will call into the Steam client and upload the
+ * screenshot to the screenshots section of the library for
+ * the running application. If Steam is not running, this
+ * function will display a notification to the user that the
+ * screenshot was taken. The paths should be full paths with
+ * extensions.
+ * File paths should be absolute including extensions.
+ * screenshotHandle can be k_unScreenshotHandleInvalid if this
+ * was a new shot taking by the app to be saved and not
+ * initiated by a user (achievement earned or something) */
+ virtual vr::EVRScreenshotError SubmitScreenshot( vr::ScreenshotHandle_t screenshotHandle, vr::EVRScreenshotType type, const char *pchSourcePreviewFilename, const char *pchSourceVRFilename ) = 0;
+};
+
+static const char * const IVRScreenshots_Version = "IVRScreenshots_001";
+
+} // namespace vr
+
+
+
+// ivrresources.h
+namespace vr
+{
+
+class IVRResources
+{
+public:
+
+ // ------------------------------------
+ // Shared Resource Methods
+ // ------------------------------------
+
+ /** Loads the specified resource into the provided buffer if large enough.
+ * Returns the size in bytes of the buffer required to hold the specified resource. */
+ virtual uint32_t LoadSharedResource( const char *pchResourceName, char *pchBuffer, uint32_t unBufferLen ) = 0;
+
+ /** Provides the full path to the specified resource. Resource names can include named directories for
+ * drivers and other things, and this resolves all of those and returns the actual physical path.
+ * pchResourceTypeDirectory is the subdirectory of resources to look in. */
+ virtual uint32_t GetResourceFullPath( const char *pchResourceName, const char *pchResourceTypeDirectory, char *pchPathBuffer, uint32_t unBufferLen ) = 0;
+};
+
+static const char * const IVRResources_Version = "IVRResources_001";
+
+
+}
+// ivrdrivermanager.h
+namespace vr
+{
+
+class IVRDriverManager
+{
+public:
+ virtual uint32_t GetDriverCount() const = 0;
+
+ /** Returns the length of the number of bytes necessary to hold this string including the trailing null. */
+ virtual uint32_t GetDriverName( vr::DriverId_t nDriver, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0;
+};
+
+static const char * const IVRDriverManager_Version = "IVRDriverManager_001";
+
+} // namespace vr
+
+
+// End
+
+#endif // _OPENVR_API
+
+
+namespace vr
+{
+ /** Finds the active installation of the VR API and initializes it. The provided path must be absolute
+ * or relative to the current working directory. These are the local install versions of the equivalent
+ * functions in steamvr.h and will work without a local Steam install.
+ *
+ * This path is to the "root" of the VR API install. That's the directory with
+ * the "drivers" directory and a platform (i.e. "win32") directory in it, not the directory with the DLL itself.
+ */
+ inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType );
+
+ /** unloads vrclient.dll. Any interface pointers from the interface are
+ * invalid after this point */
+ inline void VR_Shutdown();
+
+ /** Returns true if there is an HMD attached. This check is as lightweight as possible and
+ * can be called outside of VR_Init/VR_Shutdown. It should be used when an application wants
+ * to know if initializing VR is a possibility but isn't ready to take that step yet.
+ */
+ VR_INTERFACE bool VR_CALLTYPE VR_IsHmdPresent();
+
+ /** Returns true if the OpenVR runtime is installed. */
+ VR_INTERFACE bool VR_CALLTYPE VR_IsRuntimeInstalled();
+
+ /** Returns where the OpenVR runtime is installed. */
+ VR_INTERFACE const char *VR_CALLTYPE VR_RuntimePath();
+
+ /** Returns the name of the enum value for an EVRInitError. This function may be called outside of VR_Init()/VR_Shutdown(). */
+ VR_INTERFACE const char *VR_CALLTYPE VR_GetVRInitErrorAsSymbol( EVRInitError error );
+
+ /** Returns an English string for an EVRInitError. Applications should call VR_GetVRInitErrorAsSymbol instead and
+ * use that as a key to look up their own localized error message. This function may be called outside of VR_Init()/VR_Shutdown(). */
+ VR_INTERFACE const char *VR_CALLTYPE VR_GetVRInitErrorAsEnglishDescription( EVRInitError error );
+
+ /** Returns the interface of the specified version. This method must be called after VR_Init. The
+ * pointer returned is valid until VR_Shutdown is called.
+ */
+ VR_INTERFACE void *VR_CALLTYPE VR_GetGenericInterface( const char *pchInterfaceVersion, EVRInitError *peError );
+
+ /** Returns whether the interface of the specified version exists.
+ */
+ VR_INTERFACE bool VR_CALLTYPE VR_IsInterfaceVersionValid( const char *pchInterfaceVersion );
+
+ /** Returns a token that represents whether the VR interface handles need to be reloaded */
+ VR_INTERFACE uint32_t VR_CALLTYPE VR_GetInitToken();
+
+ // These typedefs allow old enum names from SDK 0.9.11 to be used in applications.
+ // They will go away in the future.
+ typedef EVRInitError HmdError;
+ typedef EVREye Hmd_Eye;
+ typedef EColorSpace ColorSpace;
+ typedef ETrackingResult HmdTrackingResult;
+ typedef ETrackedDeviceClass TrackedDeviceClass;
+ typedef ETrackingUniverseOrigin TrackingUniverseOrigin;
+ typedef ETrackedDeviceProperty TrackedDeviceProperty;
+ typedef ETrackedPropertyError TrackedPropertyError;
+ typedef EVRSubmitFlags VRSubmitFlags_t;
+ typedef EVRState VRState_t;
+ typedef ECollisionBoundsStyle CollisionBoundsStyle_t;
+ typedef EVROverlayError VROverlayError;
+ typedef EVRFirmwareError VRFirmwareError;
+ typedef EVRCompositorError VRCompositorError;
+ typedef EVRScreenshotError VRScreenshotsError;
+
+ inline uint32_t &VRToken()
+ {
+ static uint32_t token;
+ return token;
+ }
+
+ class COpenVRContext
+ {
+ public:
+ COpenVRContext() { Clear(); }
+ void Clear();
+
+ inline void CheckClear()
+ {
+ if ( VRToken() != VR_GetInitToken() )
+ {
+ Clear();
+ VRToken() = VR_GetInitToken();
+ }
+ }
+
+ IVRSystem *VRSystem()
+ {
+ CheckClear();
+ if ( m_pVRSystem == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRSystem = ( IVRSystem * )VR_GetGenericInterface( IVRSystem_Version, &eError );
+ }
+ return m_pVRSystem;
+ }
+ IVRChaperone *VRChaperone()
+ {
+ CheckClear();
+ if ( m_pVRChaperone == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRChaperone = ( IVRChaperone * )VR_GetGenericInterface( IVRChaperone_Version, &eError );
+ }
+ return m_pVRChaperone;
+ }
+
+ IVRChaperoneSetup *VRChaperoneSetup()
+ {
+ CheckClear();
+ if ( m_pVRChaperoneSetup == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRChaperoneSetup = ( IVRChaperoneSetup * )VR_GetGenericInterface( IVRChaperoneSetup_Version, &eError );
+ }
+ return m_pVRChaperoneSetup;
+ }
+
+ IVRCompositor *VRCompositor()
+ {
+ CheckClear();
+ if ( m_pVRCompositor == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRCompositor = ( IVRCompositor * )VR_GetGenericInterface( IVRCompositor_Version, &eError );
+ }
+ return m_pVRCompositor;
+ }
+
+ IVROverlay *VROverlay()
+ {
+ CheckClear();
+ if ( m_pVROverlay == nullptr )
+ {
+ EVRInitError eError;
+ m_pVROverlay = ( IVROverlay * )VR_GetGenericInterface( IVROverlay_Version, &eError );
+ }
+ return m_pVROverlay;
+ }
+
+ IVRResources *VRResources()
+ {
+ CheckClear();
+ if ( m_pVRResources == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRResources = (IVRResources *)VR_GetGenericInterface( IVRResources_Version, &eError );
+ }
+ return m_pVRResources;
+ }
+
+ IVRScreenshots *VRScreenshots()
+ {
+ CheckClear();
+ if ( m_pVRScreenshots == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRScreenshots = ( IVRScreenshots * )VR_GetGenericInterface( IVRScreenshots_Version, &eError );
+ }
+ return m_pVRScreenshots;
+ }
+
+ IVRRenderModels *VRRenderModels()
+ {
+ CheckClear();
+ if ( m_pVRRenderModels == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRRenderModels = ( IVRRenderModels * )VR_GetGenericInterface( IVRRenderModels_Version, &eError );
+ }
+ return m_pVRRenderModels;
+ }
+
+ IVRExtendedDisplay *VRExtendedDisplay()
+ {
+ CheckClear();
+ if ( m_pVRExtendedDisplay == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRExtendedDisplay = ( IVRExtendedDisplay * )VR_GetGenericInterface( IVRExtendedDisplay_Version, &eError );
+ }
+ return m_pVRExtendedDisplay;
+ }
+
+ IVRSettings *VRSettings()
+ {
+ CheckClear();
+ if ( m_pVRSettings == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRSettings = ( IVRSettings * )VR_GetGenericInterface( IVRSettings_Version, &eError );
+ }
+ return m_pVRSettings;
+ }
+
+ IVRApplications *VRApplications()
+ {
+ CheckClear();
+ if ( m_pVRApplications == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRApplications = ( IVRApplications * )VR_GetGenericInterface( IVRApplications_Version, &eError );
+ }
+ return m_pVRApplications;
+ }
+
+ IVRTrackedCamera *VRTrackedCamera()
+ {
+ CheckClear();
+ if ( m_pVRTrackedCamera == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRTrackedCamera = ( IVRTrackedCamera * )VR_GetGenericInterface( IVRTrackedCamera_Version, &eError );
+ }
+ return m_pVRTrackedCamera;
+ }
+
+ IVRDriverManager *VRDriverManager()
+ {
+ CheckClear();
+ if ( !m_pVRDriverManager )
+ {
+ EVRInitError eError;
+ m_pVRDriverManager = ( IVRDriverManager * )VR_GetGenericInterface( IVRDriverManager_Version, &eError );
+ }
+ return m_pVRDriverManager;
+ }
+
+ private:
+ IVRSystem *m_pVRSystem;
+ IVRChaperone *m_pVRChaperone;
+ IVRChaperoneSetup *m_pVRChaperoneSetup;
+ IVRCompositor *m_pVRCompositor;
+ IVROverlay *m_pVROverlay;
+ IVRResources *m_pVRResources;
+ IVRRenderModels *m_pVRRenderModels;
+ IVRExtendedDisplay *m_pVRExtendedDisplay;
+ IVRSettings *m_pVRSettings;
+ IVRApplications *m_pVRApplications;
+ IVRTrackedCamera *m_pVRTrackedCamera;
+ IVRScreenshots *m_pVRScreenshots;
+ IVRDriverManager *m_pVRDriverManager;
+ };
+
+ inline COpenVRContext &OpenVRInternal_ModuleContext()
+ {
+ static void *ctx[ sizeof( COpenVRContext ) / sizeof( void * ) ];
+ return *( COpenVRContext * )ctx; // bypass zero-init constructor
+ }
+
+ inline IVRSystem *VR_CALLTYPE VRSystem() { return OpenVRInternal_ModuleContext().VRSystem(); }
+ inline IVRChaperone *VR_CALLTYPE VRChaperone() { return OpenVRInternal_ModuleContext().VRChaperone(); }
+ inline IVRChaperoneSetup *VR_CALLTYPE VRChaperoneSetup() { return OpenVRInternal_ModuleContext().VRChaperoneSetup(); }
+ inline IVRCompositor *VR_CALLTYPE VRCompositor() { return OpenVRInternal_ModuleContext().VRCompositor(); }
+ inline IVROverlay *VR_CALLTYPE VROverlay() { return OpenVRInternal_ModuleContext().VROverlay(); }
+ inline IVRScreenshots *VR_CALLTYPE VRScreenshots() { return OpenVRInternal_ModuleContext().VRScreenshots(); }
+ inline IVRRenderModels *VR_CALLTYPE VRRenderModels() { return OpenVRInternal_ModuleContext().VRRenderModels(); }
+ inline IVRApplications *VR_CALLTYPE VRApplications() { return OpenVRInternal_ModuleContext().VRApplications(); }
+ inline IVRSettings *VR_CALLTYPE VRSettings() { return OpenVRInternal_ModuleContext().VRSettings(); }
+ inline IVRResources *VR_CALLTYPE VRResources() { return OpenVRInternal_ModuleContext().VRResources(); }
+ inline IVRExtendedDisplay *VR_CALLTYPE VRExtendedDisplay() { return OpenVRInternal_ModuleContext().VRExtendedDisplay(); }
+ inline IVRTrackedCamera *VR_CALLTYPE VRTrackedCamera() { return OpenVRInternal_ModuleContext().VRTrackedCamera(); }
+ inline IVRDriverManager *VR_CALLTYPE VRDriverManager() { return OpenVRInternal_ModuleContext().VRDriverManager(); }
+
+ inline void COpenVRContext::Clear()
+ {
+ m_pVRSystem = nullptr;
+ m_pVRChaperone = nullptr;
+ m_pVRChaperoneSetup = nullptr;
+ m_pVRCompositor = nullptr;
+ m_pVROverlay = nullptr;
+ m_pVRRenderModels = nullptr;
+ m_pVRExtendedDisplay = nullptr;
+ m_pVRSettings = nullptr;
+ m_pVRApplications = nullptr;
+ m_pVRTrackedCamera = nullptr;
+ m_pVRResources = nullptr;
+ m_pVRScreenshots = nullptr;
+ m_pVRDriverManager = nullptr;
+ }
+
+ VR_INTERFACE uint32_t VR_CALLTYPE VR_InitInternal( EVRInitError *peError, EVRApplicationType eApplicationType );
+ VR_INTERFACE void VR_CALLTYPE VR_ShutdownInternal();
+
+ /** Finds the active installation of vrclient.dll and initializes it */
+ inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType )
+ {
+ IVRSystem *pVRSystem = nullptr;
+
+ EVRInitError eError;
+ VRToken() = VR_InitInternal( &eError, eApplicationType );
+ COpenVRContext &ctx = OpenVRInternal_ModuleContext();
+ ctx.Clear();
+
+ if ( eError == VRInitError_None )
+ {
+ if ( VR_IsInterfaceVersionValid( IVRSystem_Version ) )
+ {
+ pVRSystem = VRSystem();
+ }
+ else
+ {
+ VR_ShutdownInternal();
+ eError = VRInitError_Init_InterfaceNotFound;
+ }
+ }
+
+ if ( peError )
+ *peError = eError;
+ return pVRSystem;
+ }
+
+ /** unloads vrclient.dll. Any interface pointers from the interface are
+ * invalid after this point */
+ inline void VR_Shutdown()
+ {
+ VR_ShutdownInternal();
+ }
+}
diff --git a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.cs b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.cs
new file mode 100644
index 0000000..2596b37
--- /dev/null
+++ b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.cs
@@ -0,0 +1,4997 @@
+//======= Copyright (c) Valve Corporation, All rights reserved. ===============
+//
+// Purpose: This file contains C#/managed code bindings for the OpenVR interfaces
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+using System;
+using System.Runtime.InteropServices;
+using Valve.VR;
+
+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)]
+ 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)]
+ 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);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetOutputDevice GetOutputDevice;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _IsDisplayOnDesktop();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _IsDisplayOnDesktop IsDisplayOnDesktop;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _SetDisplayVisibility(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 void _ResetSeatedZeroPose();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _ResetSeatedZeroPose ResetSeatedZeroPose;
+
+ [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)]
+ internal delegate bool _IsTrackedDeviceConnected(uint unDeviceIndex);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _IsTrackedDeviceConnected IsTrackedDeviceConnected;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ 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 _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)]
+ internal delegate bool _PollNextEvent(ref VREvent_t pEvent, uint uncbVREvent);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _PollNextEvent PollNextEvent;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ 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)]
+ internal delegate bool _GetControllerState(uint unControllerDeviceIndex, ref VRControllerState_t pControllerState, uint unControllerStateSize);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetControllerState GetControllerState;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ 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, char 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)]
+ internal delegate bool _CaptureInputFocus();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _CaptureInputFocus CaptureInputFocus;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _ReleaseInputFocus();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _ReleaseInputFocus ReleaseInputFocus;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _IsInputFocusCapturedByAnotherProcess();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _IsInputFocusCapturedByAnotherProcess IsInputFocusCapturedByAnotherProcess;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _DriverDebugRequest(uint unDeviceIndex, string pchRequest, string pchResponseBuffer, uint unResponseBufferSize);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _DriverDebugRequest DriverDebugRequest;
+
+ [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 void _AcknowledgeQuit_UserPrompt();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _AcknowledgeQuit_UserPrompt AcknowledgeQuit_UserPrompt;
+
+}
+
+[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, 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, 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, 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;
+
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct IVRApplications
+{
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _AddApplicationManifest(string pchApplicationManifestFullPath, bool bTemporary);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _AddApplicationManifest AddApplicationManifest;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _RemoveApplicationManifest(string pchApplicationManifestFullPath);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _RemoveApplicationManifest RemoveApplicationManifest;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _IsApplicationInstalled(string 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, string pchAppKeyBuffer, uint unAppKeyBufferLen);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetApplicationKeyByProcessId GetApplicationKeyByProcessId;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _LaunchApplication(string pchAppKey);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _LaunchApplication LaunchApplication;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _LaunchTemplateApplication(string pchTemplateAppKey, string pchNewAppKey, [In, Out] AppOverrideKeys_t[] pKeys, uint unKeys);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _LaunchTemplateApplication LaunchTemplateApplication;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _LaunchApplicationFromMimeType(string pchMimeType, string pchArgs);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _LaunchApplicationFromMimeType LaunchApplicationFromMimeType;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _LaunchDashboardOverlay(string pchAppKey);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _LaunchDashboardOverlay LaunchDashboardOverlay;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _CancelApplicationLaunch(string pchAppKey);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _CancelApplicationLaunch CancelApplicationLaunch;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _IdentifyApplication(uint unProcessId, string pchAppKey);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _IdentifyApplication IdentifyApplication;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _GetApplicationProcessId(string 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(string pchAppKey, EVRApplicationProperty eProperty, System.Text.StringBuilder pchPropertyValueBuffer, uint unPropertyValueBufferLen, ref EVRApplicationError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetApplicationPropertyString GetApplicationPropertyString;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetApplicationPropertyBool(string pchAppKey, EVRApplicationProperty eProperty, ref EVRApplicationError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetApplicationPropertyBool GetApplicationPropertyBool;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate ulong _GetApplicationPropertyUint64(string pchAppKey, EVRApplicationProperty eProperty, ref EVRApplicationError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetApplicationPropertyUint64 GetApplicationPropertyUint64;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _SetApplicationAutoLaunch(string pchAppKey, bool bAutoLaunch);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetApplicationAutoLaunch SetApplicationAutoLaunch;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetApplicationAutoLaunch(string pchAppKey);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetApplicationAutoLaunch GetApplicationAutoLaunch;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _SetDefaultApplicationForMimeType(string pchAppKey, string pchMimeType);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetDefaultApplicationForMimeType SetDefaultApplicationForMimeType;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetDefaultApplicationForMimeType(string pchMimeType, string pchAppKeyBuffer, uint unAppKeyBufferLen);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetDefaultApplicationForMimeType GetDefaultApplicationForMimeType;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetApplicationSupportedMimeTypes(string pchAppKey, string pchMimeTypesBuffer, uint unMimeTypesBuffer);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetApplicationSupportedMimeTypes GetApplicationSupportedMimeTypes;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _GetApplicationsThatSupportMimeType(string pchMimeType, string pchAppKeysThatSupportBuffer, uint unAppKeysThatSupportBuffer);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetApplicationsThatSupportMimeType GetApplicationsThatSupportMimeType;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _GetApplicationLaunchArguments(uint unHandle, string pchArgs, uint unArgs);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetApplicationLaunchArguments GetApplicationLaunchArguments;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _GetStartingApplication(string pchAppKeyBuffer, uint unAppKeyBufferLen);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetStartingApplication GetStartingApplication;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationTransitionState _GetTransitionState();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetTransitionState GetTransitionState;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _PerformApplicationPrelaunchCheck(string pchAppKey);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _PerformApplicationPrelaunchCheck PerformApplicationPrelaunchCheck;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate IntPtr _GetApplicationsTransitionStateNameFromEnum(EVRApplicationTransitionState state);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetApplicationsTransitionStateNameFromEnum GetApplicationsTransitionStateNameFromEnum;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _IsQuitUserPromptRequested();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _IsQuitUserPromptRequested IsQuitUserPromptRequested;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRApplicationError _LaunchInternalProcess(string pchBinaryPath, string pchArguments, string 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)]
+ internal delegate bool _GetPlayAreaSize(ref float pSizeX, ref float pSizeZ);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetPlayAreaSize GetPlayAreaSize;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ 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)]
+ internal delegate bool _AreBoundsVisible();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _AreBoundsVisible AreBoundsVisible;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _ForceBoundsVisible(bool bForce);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _ForceBoundsVisible ForceBoundsVisible;
+
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct IVRChaperoneSetup
+{
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ 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)]
+ internal delegate bool _GetWorkingPlayAreaSize(ref float pSizeX, ref float pSizeZ);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetWorkingPlayAreaSize GetWorkingPlayAreaSize;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetWorkingPlayAreaRect(ref HmdQuad_t rect);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetWorkingPlayAreaRect GetWorkingPlayAreaRect;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetWorkingCollisionBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, ref uint punQuadsCount);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetWorkingCollisionBoundsInfo GetWorkingCollisionBoundsInfo;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetLiveCollisionBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, ref uint punQuadsCount);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetLiveCollisionBoundsInfo GetLiveCollisionBoundsInfo;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetWorkingSeatedZeroPoseToRawTrackingPose GetWorkingSeatedZeroPoseToRawTrackingPose;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ 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 _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)]
+ internal delegate bool _GetLiveSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetLiveSeatedZeroPoseToRawTrackingPose GetLiveSeatedZeroPoseToRawTrackingPose;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _SetWorkingCollisionBoundsTagsInfo([In, Out] byte[] pTagsBuffer, uint unTagCount);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetWorkingCollisionBoundsTagsInfo SetWorkingCollisionBoundsTagsInfo;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetLiveCollisionBoundsTagsInfo([In, Out] byte[] pTagsBuffer, ref uint punTagCount);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetLiveCollisionBoundsTagsInfo GetLiveCollisionBoundsTagsInfo;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _SetWorkingPhysicalBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, uint unQuadsCount);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetWorkingPhysicalBoundsInfo SetWorkingPhysicalBoundsInfo;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetLivePhysicalBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, ref uint punQuadsCount);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetLivePhysicalBoundsInfo GetLivePhysicalBoundsInfo;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _ExportLiveToBuffer(System.Text.StringBuilder pBuffer, ref uint pnBufferLength);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _ExportLiveToBuffer ExportLiveToBuffer;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _ImportFromBufferToWorking(string pBuffer, uint nImportFlags);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _ImportFromBufferToWorking ImportFromBufferToWorking;
+
+}
+
+[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 void _ClearLastSubmittedFrame();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _ClearLastSubmittedFrame ClearLastSubmittedFrame;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _PostPresentHandoff();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _PostPresentHandoff PostPresentHandoff;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetFrameTiming(ref Compositor_FrameTiming pTiming, uint unFramesAgo);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetFrameTiming GetFrameTiming;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _GetFrameTimings(ref 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, bool bBackground);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _FadeToColor FadeToColor;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate HmdColor_t _GetCurrentFadeColor(bool bBackground);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetCurrentFadeColor GetCurrentFadeColor;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _FadeGrid(float fSeconds, bool bFadeIn);
+ [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)]
+ 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)]
+ 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)]
+ 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)]
+ internal delegate bool _ShouldAppRenderWithLowResources();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _ShouldAppRenderWithLowResources ShouldAppRenderWithLowResources;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _ForceInterleavedReprojectionOn(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(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)]
+ 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;
+
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct IVROverlay
+{
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _FindOverlay(string pchOverlayKey, ref ulong pOverlayHandle);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _FindOverlay FindOverlay;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _CreateOverlay(string pchOverlayKey, string pchOverlayName, ref ulong pOverlayHandle);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _CreateOverlay CreateOverlay;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _DestroyOverlay(ulong ulOverlayHandle);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _DestroyOverlay DestroyOverlay;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _SetHighQualityOverlay(ulong ulOverlayHandle);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetHighQualityOverlay SetHighQualityOverlay;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate ulong _GetHighQualityOverlay();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetHighQualityOverlay GetHighQualityOverlay;
+
+ [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, string 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, bool bEnabled);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetOverlayFlag SetOverlayFlag;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _GetOverlayFlag(ulong ulOverlayHandle, VROverlayFlags eOverlayFlag, ref bool pbEnabled);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetOverlayFlag GetOverlayFlag;
+
+ [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 _SetOverlayAutoCurveDistanceRangeInMeters(ulong ulOverlayHandle, float fMinDistanceInMeters, float fMaxDistanceInMeters);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetOverlayAutoCurveDistanceRangeInMeters SetOverlayAutoCurveDistanceRangeInMeters;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _GetOverlayAutoCurveDistanceRangeInMeters(ulong ulOverlayHandle, ref float pfMinDistanceInMeters, ref float pfMaxDistanceInMeters);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetOverlayAutoCurveDistanceRangeInMeters GetOverlayAutoCurveDistanceRangeInMeters;
+
+ [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 uint _GetOverlayRenderModel(ulong ulOverlayHandle, string pchValue, uint unBufferSize, ref HmdColor_t pColor, ref EVROverlayError pError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetOverlayRenderModel GetOverlayRenderModel;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _SetOverlayRenderModel(ulong ulOverlayHandle, string pchRenderModel, ref HmdColor_t pColor);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetOverlayRenderModel SetOverlayRenderModel;
+
+ [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, string pchComponentName);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetOverlayTransformTrackedDeviceComponent SetOverlayTransformTrackedDeviceComponent;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _GetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle, ref uint punDeviceIndex, string pchComponentName, uint unComponentNameSize);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetOverlayTransformTrackedDeviceComponent GetOverlayTransformTrackedDeviceComponent;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _GetOverlayTransformOverlayRelative(ulong ulOverlayHandle, ref ulong ulOverlayHandleParent, ref HmdMatrix34_t pmatParentOverlayToOverlayTransform);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetOverlayTransformOverlayRelative GetOverlayTransformOverlayRelative;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _SetOverlayTransformOverlayRelative(ulong ulOverlayHandle, ulong ulOverlayHandleParent, ref HmdMatrix34_t pmatParentOverlayToOverlayTransform);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetOverlayTransformOverlayRelative SetOverlayTransformOverlayRelative;
+
+ [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)]
+ 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 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)]
+ internal delegate bool _ComputeOverlayIntersection(ulong ulOverlayHandle, ref VROverlayIntersectionParams_t pParams, ref VROverlayIntersectionResults_t pResults);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _ComputeOverlayIntersection ComputeOverlayIntersection;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _HandleControllerOverlayInteractionAsMouse(ulong ulOverlayHandle, uint unControllerDeviceIndex);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _HandleControllerOverlayInteractionAsMouse HandleControllerOverlayInteractionAsMouse;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _IsHoverTargetOverlay(ulong ulOverlayHandle);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _IsHoverTargetOverlay IsHoverTargetOverlay;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate ulong _GetGamepadFocusOverlay();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetGamepadFocusOverlay GetGamepadFocusOverlay;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _SetGamepadFocusOverlay(ulong ulNewFocusOverlay);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetGamepadFocusOverlay SetGamepadFocusOverlay;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _SetOverlayNeighbor(EOverlayDirection eDirection, ulong ulFrom, ulong ulTo);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetOverlayNeighbor SetOverlayNeighbor;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _MoveGamepadFocusToNeighbor(EOverlayDirection eDirection, ulong ulFrom);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _MoveGamepadFocusToNeighbor MoveGamepadFocusToNeighbor;
+
+ [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 unDepth);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetOverlayRaw SetOverlayRaw;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _SetOverlayFromFile(ulong ulOverlayHandle, string 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(string pchOverlayKey, string pchOverlayFriendlyName, ref ulong pMainHandle, ref ulong pThumbnailHandle);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _CreateDashboardOverlay CreateDashboardOverlay;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _IsDashboardVisible();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _IsDashboardVisible IsDashboardVisible;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ 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(string 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, string pchDescription, uint unCharMax, string pchExistingText, bool bUseMinimalMode, ulong uUserValue);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _ShowKeyboard ShowKeyboard;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _ShowKeyboardForOverlay(ulong ulOverlayHandle, int eInputMode, int eLineInputMode, string pchDescription, uint unCharMax, string pchExistingText, bool bUseMinimalMode, 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 EVROverlayError _SetOverlayIntersectionMask(ulong ulOverlayHandle, ref VROverlayIntersectionMaskPrimitive_t pMaskPrimitives, uint unNumMaskPrimitives, uint unPrimitiveSize);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetOverlayIntersectionMask SetOverlayIntersectionMask;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVROverlayError _GetOverlayFlags(ulong ulOverlayHandle, ref uint pFlags);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetOverlayFlags GetOverlayFlags;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate VRMessageOverlayResponse _ShowMessageOverlay(string pchText, string pchCaption, string pchButton0Text, string pchButton1Text, string pchButton2Text, string pchButton3Text);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _ShowMessageOverlay ShowMessageOverlay;
+
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct IVRRenderModels
+{
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRRenderModelError _LoadRenderModel_Async(string 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(string pchRenderModelName);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetComponentCount GetComponentCount;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _GetComponentName(string pchRenderModelName, uint unComponentIndex, System.Text.StringBuilder pchComponentName, uint unComponentNameLen);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetComponentName GetComponentName;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate ulong _GetComponentButtonMask(string pchRenderModelName, string pchComponentName);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetComponentButtonMask GetComponentButtonMask;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _GetComponentRenderModelName(string pchRenderModelName, string pchComponentName, System.Text.StringBuilder pchComponentRenderModelName, uint unComponentRenderModelNameLen);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetComponentRenderModelName GetComponentRenderModelName;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetComponentState(string pchRenderModelName, string 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)]
+ internal delegate bool _RenderModelHasComponent(string pchRenderModelName, string pchComponentName);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _RenderModelHasComponent RenderModelHasComponent;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _GetRenderModelThumbnailURL(string pchRenderModelName, System.Text.StringBuilder pchThumbnailURL, uint unThumbnailURLLen, ref EVRRenderModelError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetRenderModelThumbnailURL GetRenderModelThumbnailURL;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _GetRenderModelOriginalPath(string 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, string 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 bool _Sync(bool bForce, ref EVRSettingsError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _Sync Sync;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _SetBool(string pchSection, string pchSettingsKey, bool bValue, ref EVRSettingsError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetBool SetBool;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _SetInt32(string pchSection, string pchSettingsKey, int nValue, ref EVRSettingsError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetInt32 SetInt32;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _SetFloat(string pchSection, string pchSettingsKey, float flValue, ref EVRSettingsError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetFloat SetFloat;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _SetString(string pchSection, string pchSettingsKey, string pchValue, ref EVRSettingsError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetString SetString;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate bool _GetBool(string pchSection, string pchSettingsKey, ref EVRSettingsError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetBool GetBool;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate int _GetInt32(string pchSection, string pchSettingsKey, ref EVRSettingsError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetInt32 GetInt32;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate float _GetFloat(string pchSection, string pchSettingsKey, ref EVRSettingsError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetFloat GetFloat;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _GetString(string pchSection, string pchSettingsKey, System.Text.StringBuilder pchValue, uint unValueLen, ref EVRSettingsError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetString GetString;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _RemoveSection(string pchSection, ref EVRSettingsError peError);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _RemoveSection RemoveSection;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _RemoveKeyInSection(string pchSection, string 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, string pchPreviewFilename, string 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, string pchPreviewFilename, string pchVRFilename);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _TakeStereoScreenshot TakeStereoScreenshot;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRScreenshotError _SubmitScreenshot(uint screenshotHandle, EVRScreenshotType type, string pchSourcePreviewFilename, string pchSourceVRFilename);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SubmitScreenshot SubmitScreenshot;
+
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct IVRResources
+{
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _LoadSharedResource(string pchResourceName, string pchBuffer, uint unBufferLen);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _LoadSharedResource LoadSharedResource;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _GetResourceFullPath(string pchResourceName, string pchResourceTypeDirectory, string 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;
+
+}
+
+
+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)
+ {
+ pnDevice = 0;
+ FnTable.GetOutputDevice(ref pnDevice,textureType);
+ }
+ 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 void ResetSeatedZeroPose()
+ {
+ FnTable.ResetSeatedZeroPose();
+ }
+ 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 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 ((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;
+ }
+ 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 ((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;
+ }
+ 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 ((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;
+ }
+ bool result = FnTable.GetControllerStateWithPose(eOrigin,unControllerDeviceIndex,ref pControllerState,unControllerStateSize,ref pTrackedDevicePose);
+ return result;
+ }
+ public void TriggerHapticPulse(uint unControllerDeviceIndex,uint unAxisId,char 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 CaptureInputFocus()
+ {
+ bool result = FnTable.CaptureInputFocus();
+ return result;
+ }
+ public void ReleaseInputFocus()
+ {
+ FnTable.ReleaseInputFocus();
+ }
+ public bool IsInputFocusCapturedByAnotherProcess()
+ {
+ bool result = FnTable.IsInputFocusCapturedByAnotherProcess();
+ return result;
+ }
+ public uint DriverDebugRequest(uint unDeviceIndex,string pchRequest,string pchResponseBuffer,uint unResponseBufferSize)
+ {
+ uint result = FnTable.DriverDebugRequest(unDeviceIndex,pchRequest,pchResponseBuffer,unResponseBufferSize);
+ return result;
+ }
+ public EVRFirmwareError PerformFirmwareUpdate(uint unDeviceIndex)
+ {
+ EVRFirmwareError result = FnTable.PerformFirmwareUpdate(unDeviceIndex);
+ return result;
+ }
+ public void AcknowledgeQuit_Exiting()
+ {
+ FnTable.AcknowledgeQuit_Exiting();
+ }
+ public void AcknowledgeQuit_UserPrompt()
+ {
+ FnTable.AcknowledgeQuit_UserPrompt();
+ }
+}
+
+
+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,EVRTrackedCameraFrameType eFrameType,ref HmdVector2_t pFocalLength,ref HmdVector2_t pCenter)
+ {
+ EVRTrackedCameraError result = FnTable.GetCameraIntrinsics(nDeviceIndex,eFrameType,ref pFocalLength,ref pCenter);
+ return result;
+ }
+ public EVRTrackedCameraError GetCameraProjection(uint nDeviceIndex,EVRTrackedCameraFrameType eFrameType,float flZNear,float flZFar,ref HmdMatrix44_t pProjection)
+ {
+ EVRTrackedCameraError result = FnTable.GetCameraProjection(nDeviceIndex,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 class CVRApplications
+{
+ IVRApplications FnTable;
+ internal CVRApplications(IntPtr pInterface)
+ {
+ FnTable = (IVRApplications)Marshal.PtrToStructure(pInterface, typeof(IVRApplications));
+ }
+ public EVRApplicationError AddApplicationManifest(string pchApplicationManifestFullPath,bool bTemporary)
+ {
+ EVRApplicationError result = FnTable.AddApplicationManifest(pchApplicationManifestFullPath,bTemporary);
+ return result;
+ }
+ public EVRApplicationError RemoveApplicationManifest(string pchApplicationManifestFullPath)
+ {
+ EVRApplicationError result = FnTable.RemoveApplicationManifest(pchApplicationManifestFullPath);
+ return result;
+ }
+ public bool IsApplicationInstalled(string pchAppKey)
+ {
+ bool result = FnTable.IsApplicationInstalled(pchAppKey);
+ 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,string pchAppKeyBuffer,uint unAppKeyBufferLen)
+ {
+ EVRApplicationError result = FnTable.GetApplicationKeyByProcessId(unProcessId,pchAppKeyBuffer,unAppKeyBufferLen);
+ return result;
+ }
+ public EVRApplicationError LaunchApplication(string pchAppKey)
+ {
+ EVRApplicationError result = FnTable.LaunchApplication(pchAppKey);
+ return result;
+ }
+ public EVRApplicationError LaunchTemplateApplication(string pchTemplateAppKey,string pchNewAppKey,AppOverrideKeys_t [] pKeys)
+ {
+ EVRApplicationError result = FnTable.LaunchTemplateApplication(pchTemplateAppKey,pchNewAppKey,pKeys,(uint) pKeys.Length);
+ return result;
+ }
+ public EVRApplicationError LaunchApplicationFromMimeType(string pchMimeType,string pchArgs)
+ {
+ EVRApplicationError result = FnTable.LaunchApplicationFromMimeType(pchMimeType,pchArgs);
+ return result;
+ }
+ public EVRApplicationError LaunchDashboardOverlay(string pchAppKey)
+ {
+ EVRApplicationError result = FnTable.LaunchDashboardOverlay(pchAppKey);
+ return result;
+ }
+ public bool CancelApplicationLaunch(string pchAppKey)
+ {
+ bool result = FnTable.CancelApplicationLaunch(pchAppKey);
+ return result;
+ }
+ public EVRApplicationError IdentifyApplication(uint unProcessId,string pchAppKey)
+ {
+ EVRApplicationError result = FnTable.IdentifyApplication(unProcessId,pchAppKey);
+ return result;
+ }
+ public uint GetApplicationProcessId(string pchAppKey)
+ {
+ uint result = FnTable.GetApplicationProcessId(pchAppKey);
+ 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)
+ {
+ uint result = FnTable.GetApplicationPropertyString(pchAppKey,eProperty,pchPropertyValueBuffer,unPropertyValueBufferLen,ref peError);
+ return result;
+ }
+ public bool GetApplicationPropertyBool(string pchAppKey,EVRApplicationProperty eProperty,ref EVRApplicationError peError)
+ {
+ bool result = FnTable.GetApplicationPropertyBool(pchAppKey,eProperty,ref peError);
+ return result;
+ }
+ public ulong GetApplicationPropertyUint64(string pchAppKey,EVRApplicationProperty eProperty,ref EVRApplicationError peError)
+ {
+ ulong result = FnTable.GetApplicationPropertyUint64(pchAppKey,eProperty,ref peError);
+ return result;
+ }
+ public EVRApplicationError SetApplicationAutoLaunch(string pchAppKey,bool bAutoLaunch)
+ {
+ EVRApplicationError result = FnTable.SetApplicationAutoLaunch(pchAppKey,bAutoLaunch);
+ return result;
+ }
+ public bool GetApplicationAutoLaunch(string pchAppKey)
+ {
+ bool result = FnTable.GetApplicationAutoLaunch(pchAppKey);
+ return result;
+ }
+ public EVRApplicationError SetDefaultApplicationForMimeType(string pchAppKey,string pchMimeType)
+ {
+ EVRApplicationError result = FnTable.SetDefaultApplicationForMimeType(pchAppKey,pchMimeType);
+ return result;
+ }
+ public bool GetDefaultApplicationForMimeType(string pchMimeType,string pchAppKeyBuffer,uint unAppKeyBufferLen)
+ {
+ bool result = FnTable.GetDefaultApplicationForMimeType(pchMimeType,pchAppKeyBuffer,unAppKeyBufferLen);
+ return result;
+ }
+ public bool GetApplicationSupportedMimeTypes(string pchAppKey,string pchMimeTypesBuffer,uint unMimeTypesBuffer)
+ {
+ bool result = FnTable.GetApplicationSupportedMimeTypes(pchAppKey,pchMimeTypesBuffer,unMimeTypesBuffer);
+ return result;
+ }
+ public uint GetApplicationsThatSupportMimeType(string pchMimeType,string pchAppKeysThatSupportBuffer,uint unAppKeysThatSupportBuffer)
+ {
+ uint result = FnTable.GetApplicationsThatSupportMimeType(pchMimeType,pchAppKeysThatSupportBuffer,unAppKeysThatSupportBuffer);
+ return result;
+ }
+ public uint GetApplicationLaunchArguments(uint unHandle,string pchArgs,uint unArgs)
+ {
+ uint result = FnTable.GetApplicationLaunchArguments(unHandle,pchArgs,unArgs);
+ return result;
+ }
+ public EVRApplicationError GetStartingApplication(string pchAppKeyBuffer,uint unAppKeyBufferLen)
+ {
+ EVRApplicationError result = FnTable.GetStartingApplication(pchAppKeyBuffer,unAppKeyBufferLen);
+ return result;
+ }
+ public EVRApplicationTransitionState GetTransitionState()
+ {
+ EVRApplicationTransitionState result = FnTable.GetTransitionState();
+ return result;
+ }
+ public EVRApplicationError PerformApplicationPrelaunchCheck(string pchAppKey)
+ {
+ EVRApplicationError result = FnTable.PerformApplicationPrelaunchCheck(pchAppKey);
+ return result;
+ }
+ public string GetApplicationsTransitionStateNameFromEnum(EVRApplicationTransitionState state)
+ {
+ IntPtr result = FnTable.GetApplicationsTransitionStateNameFromEnum(state);
+ return Marshal.PtrToStringAnsi(result);
+ }
+ public bool IsQuitUserPromptRequested()
+ {
+ bool result = FnTable.IsQuitUserPromptRequested();
+ return result;
+ }
+ public EVRApplicationError LaunchInternalProcess(string pchBinaryPath,string pchArguments,string pchWorkingDirectory)
+ {
+ EVRApplicationError result = FnTable.LaunchInternalProcess(pchBinaryPath,pchArguments,pchWorkingDirectory);
+ 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 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 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 void SetWorkingCollisionBoundsTagsInfo(byte [] pTagsBuffer)
+ {
+ FnTable.SetWorkingCollisionBoundsTagsInfo(pTagsBuffer,(uint) pTagsBuffer.Length);
+ }
+ public bool GetLiveCollisionBoundsTagsInfo(out byte [] pTagsBuffer)
+ {
+ uint punTagCount = 0;
+ bool result = FnTable.GetLiveCollisionBoundsTagsInfo(null,ref punTagCount);
+ pTagsBuffer= new byte[punTagCount];
+ result = FnTable.GetLiveCollisionBoundsTagsInfo(pTagsBuffer,ref punTagCount);
+ return result;
+ }
+ public bool SetWorkingPhysicalBoundsInfo(HmdQuad_t [] pQuadsBuffer)
+ {
+ bool result = FnTable.SetWorkingPhysicalBoundsInfo(pQuadsBuffer,(uint) pQuadsBuffer.Length);
+ return result;
+ }
+ public bool GetLivePhysicalBoundsInfo(out HmdQuad_t [] pQuadsBuffer)
+ {
+ uint punQuadsCount = 0;
+ bool result = FnTable.GetLivePhysicalBoundsInfo(null,ref punQuadsCount);
+ pQuadsBuffer= new HmdQuad_t[punQuadsCount];
+ result = FnTable.GetLivePhysicalBoundsInfo(pQuadsBuffer,ref punQuadsCount);
+ 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)
+ {
+ bool result = FnTable.ImportFromBufferToWorking(pBuffer,nImportFlags);
+ return result;
+ }
+}
+
+
+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 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(ref Compositor_FrameTiming pTiming,uint nFrames)
+ {
+ uint result = FnTable.GetFrameTimings(ref pTiming,nFrames);
+ 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 bFadeIn)
+ {
+ FnTable.FadeGrid(fSeconds,bFadeIn);
+ }
+ 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 class CVROverlay
+{
+ IVROverlay FnTable;
+ internal CVROverlay(IntPtr pInterface)
+ {
+ FnTable = (IVROverlay)Marshal.PtrToStructure(pInterface, typeof(IVROverlay));
+ }
+ public EVROverlayError FindOverlay(string pchOverlayKey,ref ulong pOverlayHandle)
+ {
+ pOverlayHandle = 0;
+ EVROverlayError result = FnTable.FindOverlay(pchOverlayKey,ref pOverlayHandle);
+ return result;
+ }
+ public EVROverlayError CreateOverlay(string pchOverlayKey,string pchOverlayName,ref ulong pOverlayHandle)
+ {
+ pOverlayHandle = 0;
+ EVROverlayError result = FnTable.CreateOverlay(pchOverlayKey,pchOverlayName,ref pOverlayHandle);
+ return result;
+ }
+ public EVROverlayError DestroyOverlay(ulong ulOverlayHandle)
+ {
+ EVROverlayError result = FnTable.DestroyOverlay(ulOverlayHandle);
+ return result;
+ }
+ public EVROverlayError SetHighQualityOverlay(ulong ulOverlayHandle)
+ {
+ EVROverlayError result = FnTable.SetHighQualityOverlay(ulOverlayHandle);
+ return result;
+ }
+ public ulong GetHighQualityOverlay()
+ {
+ ulong result = FnTable.GetHighQualityOverlay();
+ 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)
+ {
+ EVROverlayError result = FnTable.SetOverlayName(ulOverlayHandle,pchName);
+ 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 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 SetOverlayAutoCurveDistanceRangeInMeters(ulong ulOverlayHandle,float fMinDistanceInMeters,float fMaxDistanceInMeters)
+ {
+ EVROverlayError result = FnTable.SetOverlayAutoCurveDistanceRangeInMeters(ulOverlayHandle,fMinDistanceInMeters,fMaxDistanceInMeters);
+ return result;
+ }
+ public EVROverlayError GetOverlayAutoCurveDistanceRangeInMeters(ulong ulOverlayHandle,ref float pfMinDistanceInMeters,ref float pfMaxDistanceInMeters)
+ {
+ pfMinDistanceInMeters = 0;
+ pfMaxDistanceInMeters = 0;
+ EVROverlayError result = FnTable.GetOverlayAutoCurveDistanceRangeInMeters(ulOverlayHandle,ref pfMinDistanceInMeters,ref pfMaxDistanceInMeters);
+ 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 uint GetOverlayRenderModel(ulong ulOverlayHandle,string pchValue,uint unBufferSize,ref HmdColor_t pColor,ref EVROverlayError pError)
+ {
+ uint result = FnTable.GetOverlayRenderModel(ulOverlayHandle,pchValue,unBufferSize,ref pColor,ref pError);
+ return result;
+ }
+ public EVROverlayError SetOverlayRenderModel(ulong ulOverlayHandle,string pchRenderModel,ref HmdColor_t pColor)
+ {
+ EVROverlayError result = FnTable.SetOverlayRenderModel(ulOverlayHandle,pchRenderModel,ref pColor);
+ 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)
+ {
+ EVROverlayError result = FnTable.SetOverlayTransformTrackedDeviceComponent(ulOverlayHandle,unDeviceIndex,pchComponentName);
+ return result;
+ }
+ public EVROverlayError GetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle,ref uint punDeviceIndex,string pchComponentName,uint unComponentNameSize)
+ {
+ punDeviceIndex = 0;
+ EVROverlayError result = FnTable.GetOverlayTransformTrackedDeviceComponent(ulOverlayHandle,ref punDeviceIndex,pchComponentName,unComponentNameSize);
+ return result;
+ }
+ public EVROverlayError GetOverlayTransformOverlayRelative(ulong ulOverlayHandle,ref ulong ulOverlayHandleParent,ref HmdMatrix34_t pmatParentOverlayToOverlayTransform)
+ {
+ ulOverlayHandleParent = 0;
+ EVROverlayError result = FnTable.GetOverlayTransformOverlayRelative(ulOverlayHandle,ref ulOverlayHandleParent,ref pmatParentOverlayToOverlayTransform);
+ return result;
+ }
+ public EVROverlayError SetOverlayTransformOverlayRelative(ulong ulOverlayHandle,ulong ulOverlayHandleParent,ref HmdMatrix34_t pmatParentOverlayToOverlayTransform)
+ {
+ EVROverlayError result = FnTable.SetOverlayTransformOverlayRelative(ulOverlayHandle,ulOverlayHandleParent,ref pmatParentOverlayToOverlayTransform);
+ 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;
+ }
+// 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 ((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;
+ }
+ 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 HandleControllerOverlayInteractionAsMouse(ulong ulOverlayHandle,uint unControllerDeviceIndex)
+ {
+ bool result = FnTable.HandleControllerOverlayInteractionAsMouse(ulOverlayHandle,unControllerDeviceIndex);
+ return result;
+ }
+ public bool IsHoverTargetOverlay(ulong ulOverlayHandle)
+ {
+ bool result = FnTable.IsHoverTargetOverlay(ulOverlayHandle);
+ return result;
+ }
+ public ulong GetGamepadFocusOverlay()
+ {
+ ulong result = FnTable.GetGamepadFocusOverlay();
+ return result;
+ }
+ public EVROverlayError SetGamepadFocusOverlay(ulong ulNewFocusOverlay)
+ {
+ EVROverlayError result = FnTable.SetGamepadFocusOverlay(ulNewFocusOverlay);
+ return result;
+ }
+ public EVROverlayError SetOverlayNeighbor(EOverlayDirection eDirection,ulong ulFrom,ulong ulTo)
+ {
+ EVROverlayError result = FnTable.SetOverlayNeighbor(eDirection,ulFrom,ulTo);
+ return result;
+ }
+ public EVROverlayError MoveGamepadFocusToNeighbor(EOverlayDirection eDirection,ulong ulFrom)
+ {
+ EVROverlayError result = FnTable.MoveGamepadFocusToNeighbor(eDirection,ulFrom);
+ 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 unDepth)
+ {
+ EVROverlayError result = FnTable.SetOverlayRaw(ulOverlayHandle,pvBuffer,unWidth,unHeight,unDepth);
+ return result;
+ }
+ public EVROverlayError SetOverlayFromFile(ulong ulOverlayHandle,string pchFilePath)
+ {
+ EVROverlayError result = FnTable.SetOverlayFromFile(ulOverlayHandle,pchFilePath);
+ 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)
+ {
+ pMainHandle = 0;
+ pThumbnailHandle = 0;
+ EVROverlayError result = FnTable.CreateDashboardOverlay(pchOverlayKey,pchOverlayFriendlyName,ref pMainHandle,ref pThumbnailHandle);
+ 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)
+ {
+ FnTable.ShowDashboard(pchOverlayToShow);
+ }
+ public uint GetPrimaryDashboardDevice()
+ {
+ uint result = FnTable.GetPrimaryDashboardDevice();
+ return result;
+ }
+ public EVROverlayError ShowKeyboard(int eInputMode,int eLineInputMode,string pchDescription,uint unCharMax,string pchExistingText,bool bUseMinimalMode,ulong uUserValue)
+ {
+ EVROverlayError result = FnTable.ShowKeyboard(eInputMode,eLineInputMode,pchDescription,unCharMax,pchExistingText,bUseMinimalMode,uUserValue);
+ return result;
+ }
+ public EVROverlayError ShowKeyboardForOverlay(ulong ulOverlayHandle,int eInputMode,int eLineInputMode,string pchDescription,uint unCharMax,string pchExistingText,bool bUseMinimalMode,ulong uUserValue)
+ {
+ EVROverlayError result = FnTable.ShowKeyboardForOverlay(ulOverlayHandle,eInputMode,eLineInputMode,pchDescription,unCharMax,pchExistingText,bUseMinimalMode,uUserValue);
+ 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 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 GetOverlayFlags(ulong ulOverlayHandle,ref uint pFlags)
+ {
+ pFlags = 0;
+ EVROverlayError result = FnTable.GetOverlayFlags(ulOverlayHandle,ref pFlags);
+ return result;
+ }
+ public VRMessageOverlayResponse ShowMessageOverlay(string pchText,string pchCaption,string pchButton0Text,string pchButton1Text,string pchButton2Text,string pchButton3Text)
+ {
+ VRMessageOverlayResponse result = FnTable.ShowMessageOverlay(pchText,pchCaption,pchButton0Text,pchButton1Text,pchButton2Text,pchButton3Text);
+ return result;
+ }
+}
+
+
+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)
+ {
+ EVRRenderModelError result = FnTable.LoadRenderModel_Async(pchRenderModelName,ref ppRenderModel);
+ 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)
+ {
+ uint result = FnTable.GetComponentCount(pchRenderModelName);
+ return result;
+ }
+ public uint GetComponentName(string pchRenderModelName,uint unComponentIndex,System.Text.StringBuilder pchComponentName,uint unComponentNameLen)
+ {
+ uint result = FnTable.GetComponentName(pchRenderModelName,unComponentIndex,pchComponentName,unComponentNameLen);
+ return result;
+ }
+ public ulong GetComponentButtonMask(string pchRenderModelName,string pchComponentName)
+ {
+ ulong result = FnTable.GetComponentButtonMask(pchRenderModelName,pchComponentName);
+ return result;
+ }
+ public uint GetComponentRenderModelName(string pchRenderModelName,string pchComponentName,System.Text.StringBuilder pchComponentRenderModelName,uint unComponentRenderModelNameLen)
+ {
+ uint result = FnTable.GetComponentRenderModelName(pchRenderModelName,pchComponentName,pchComponentRenderModelName,unComponentRenderModelNameLen);
+ 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(string pchRenderModelName,string 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)
+ {
+ 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(pchRenderModelName,pchComponentName,ref state_packed,ref pState,ref pComponentState);
+
+ state_packed.Unpack(ref pControllerState);
+ return packed_result;
+ }
+ bool result = FnTable.GetComponentState(pchRenderModelName,pchComponentName,ref pControllerState,ref pState,ref pComponentState);
+ return result;
+ }
+ public bool RenderModelHasComponent(string pchRenderModelName,string pchComponentName)
+ {
+ bool result = FnTable.RenderModelHasComponent(pchRenderModelName,pchComponentName);
+ return result;
+ }
+ public uint GetRenderModelThumbnailURL(string pchRenderModelName,System.Text.StringBuilder pchThumbnailURL,uint unThumbnailURLLen,ref EVRRenderModelError peError)
+ {
+ uint result = FnTable.GetRenderModelThumbnailURL(pchRenderModelName,pchThumbnailURL,unThumbnailURLLen,ref peError);
+ return result;
+ }
+ public uint GetRenderModelOriginalPath(string pchRenderModelName,System.Text.StringBuilder pchOriginalPath,uint unOriginalPathLen,ref EVRRenderModelError peError)
+ {
+ uint result = FnTable.GetRenderModelOriginalPath(pchRenderModelName,pchOriginalPath,unOriginalPathLen,ref peError);
+ 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)
+ {
+ pNotificationId = 0;
+ EVRNotificationError result = FnTable.CreateNotification(ulOverlayHandle,ulUserValue,type,pchText,style,ref pImage,ref pNotificationId);
+ 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 bool Sync(bool bForce,ref EVRSettingsError peError)
+ {
+ bool result = FnTable.Sync(bForce,ref peError);
+ return result;
+ }
+ public void SetBool(string pchSection,string pchSettingsKey,bool bValue,ref EVRSettingsError peError)
+ {
+ FnTable.SetBool(pchSection,pchSettingsKey,bValue,ref peError);
+ }
+ public void SetInt32(string pchSection,string pchSettingsKey,int nValue,ref EVRSettingsError peError)
+ {
+ FnTable.SetInt32(pchSection,pchSettingsKey,nValue,ref peError);
+ }
+ public void SetFloat(string pchSection,string pchSettingsKey,float flValue,ref EVRSettingsError peError)
+ {
+ FnTable.SetFloat(pchSection,pchSettingsKey,flValue,ref peError);
+ }
+ public void SetString(string pchSection,string pchSettingsKey,string pchValue,ref EVRSettingsError peError)
+ {
+ FnTable.SetString(pchSection,pchSettingsKey,pchValue,ref peError);
+ }
+ public bool GetBool(string pchSection,string pchSettingsKey,ref EVRSettingsError peError)
+ {
+ bool result = FnTable.GetBool(pchSection,pchSettingsKey,ref peError);
+ return result;
+ }
+ public int GetInt32(string pchSection,string pchSettingsKey,ref EVRSettingsError peError)
+ {
+ int result = FnTable.GetInt32(pchSection,pchSettingsKey,ref peError);
+ return result;
+ }
+ public float GetFloat(string pchSection,string pchSettingsKey,ref EVRSettingsError peError)
+ {
+ float result = FnTable.GetFloat(pchSection,pchSettingsKey,ref peError);
+ return result;
+ }
+ public void GetString(string pchSection,string pchSettingsKey,System.Text.StringBuilder pchValue,uint unValueLen,ref EVRSettingsError peError)
+ {
+ FnTable.GetString(pchSection,pchSettingsKey,pchValue,unValueLen,ref peError);
+ }
+ public void RemoveSection(string pchSection,ref EVRSettingsError peError)
+ {
+ FnTable.RemoveSection(pchSection,ref peError);
+ }
+ public void RemoveKeyInSection(string pchSection,string pchSettingsKey,ref EVRSettingsError peError)
+ {
+ FnTable.RemoveKeyInSection(pchSection,pchSettingsKey,ref peError);
+ }
+}
+
+
+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;
+ EVRScreenshotError result = FnTable.RequestScreenshot(ref pOutScreenshotHandle,type,pchPreviewFilename,pchVRFilename);
+ 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;
+ EVRScreenshotError result = FnTable.TakeStereoScreenshot(ref pOutScreenshotHandle,pchPreviewFilename,pchVRFilename);
+ return result;
+ }
+ public EVRScreenshotError SubmitScreenshot(uint screenshotHandle,EVRScreenshotType type,string pchSourcePreviewFilename,string pchSourceVRFilename)
+ {
+ EVRScreenshotError result = FnTable.SubmitScreenshot(screenshotHandle,type,pchSourcePreviewFilename,pchSourceVRFilename);
+ 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)
+ {
+ uint result = FnTable.LoadSharedResource(pchResourceName,pchBuffer,unBufferLen);
+ return result;
+ }
+ public uint GetResourceFullPath(string pchResourceName,string pchResourceTypeDirectory,string pchPathBuffer,uint unBufferLen)
+ {
+ uint result = FnTable.GetResourceFullPath(pchResourceName,pchResourceTypeDirectory,pchPathBuffer,unBufferLen);
+ 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 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_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_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
+{
+ DirectX = 0,
+ OpenGL = 1,
+ Vulkan = 2,
+ IOSurface = 3,
+ DirectX12 = 4,
+}
+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,
+}
+public enum ETrackedDeviceClass
+{
+ Invalid = 0,
+ HMD = 1,
+ Controller = 2,
+ GenericTracker = 3,
+ TrackingReference = 4,
+ DisplayRedirect = 5,
+}
+public enum ETrackedControllerRole
+{
+ Invalid = 0,
+ LeftHand = 1,
+ RightHand = 2,
+}
+public enum ETrackingUniverseOrigin
+{
+ TrackingUniverseSeated = 0,
+ TrackingUniverseStanding = 1,
+ TrackingUniverseRawAndUncalibrated = 2,
+}
+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_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_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_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_DisplayHiddenArea_Binary_Start = 5100,
+ Prop_DisplayHiddenArea_Binary_End = 5150,
+ 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_VendorSpecific_Reserved_Start = 10000,
+ Prop_VendorSpecific_Reserved_End = 10999,
+}
+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,
+}
+public enum EVRSubmitFlags
+{
+ Submit_Default = 0,
+ Submit_LensDistortionAlreadyApplied = 1,
+ Submit_GlRenderBuffer = 2,
+ Submit_Reserved = 4,
+}
+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_ButtonPress = 200,
+ VREvent_ButtonUnpress = 201,
+ VREvent_ButtonTouch = 202,
+ VREvent_ButtonUntouch = 203,
+ VREvent_MouseMove = 300,
+ VREvent_MouseButtonDown = 301,
+ VREvent_MouseButtonUp = 302,
+ VREvent_FocusEnter = 303,
+ VREvent_FocusLeave = 304,
+ VREvent_Scroll = 305,
+ VREvent_TouchPadMove = 306,
+ VREvent_OverlayFocusChanged = 307,
+ VREvent_InputFocusCaptured = 400,
+ VREvent_InputFocusReleased = 401,
+ VREvent_SceneFocusLost = 402,
+ VREvent_SceneFocusGained = 403,
+ VREvent_SceneApplicationChanged = 404,
+ VREvent_SceneFocusChanged = 405,
+ VREvent_InputFocusChanged = 406,
+ VREvent_SceneApplicationSecondaryRenderingStarted = 407,
+ VREvent_HideRenderModels = 410,
+ VREvent_ShowRenderModels = 411,
+ VREvent_OverlayShown = 500,
+ VREvent_OverlayHidden = 501,
+ VREvent_DashboardActivated = 502,
+ VREvent_DashboardDeactivated = 503,
+ VREvent_DashboardThumbSelected = 504,
+ VREvent_DashboardRequested = 505,
+ VREvent_ResetDashboard = 506,
+ VREvent_RenderToast = 507,
+ VREvent_ImageLoaded = 508,
+ VREvent_ShowKeyboard = 509,
+ VREvent_HideKeyboard = 510,
+ VREvent_OverlayGamepadFocusGained = 511,
+ VREvent_OverlayGamepadFocusLost = 512,
+ VREvent_OverlaySharedTextureChanged = 513,
+ VREvent_DashboardGuideButtonDown = 514,
+ VREvent_DashboardGuideButtonUp = 515,
+ VREvent_ScreenshotTriggered = 516,
+ VREvent_ImageFailed = 517,
+ VREvent_DashboardOverlayCreated = 518,
+ VREvent_RequestScreenshot = 520,
+ VREvent_ScreenshotTaken = 521,
+ VREvent_ScreenshotFailed = 522,
+ VREvent_SubmitScreenshotToDashboard = 523,
+ VREvent_ScreenshotProgressToDashboard = 524,
+ VREvent_PrimaryDashboardDeviceChanged = 525,
+ VREvent_Notification_Shown = 600,
+ VREvent_Notification_Hidden = 601,
+ VREvent_Notification_BeginInteraction = 602,
+ VREvent_Notification_Destroyed = 603,
+ VREvent_Quit = 700,
+ VREvent_ProcessQuit = 701,
+ VREvent_QuitAborted_UserPrompt = 702,
+ VREvent_QuitAcknowledged = 703,
+ VREvent_DriverRequestedQuit = 704,
+ VREvent_ChaperoneDataHasChanged = 800,
+ VREvent_ChaperoneUniverseHasChanged = 801,
+ VREvent_ChaperoneTempDataHasChanged = 802,
+ VREvent_ChaperoneSettingsHaveChanged = 803,
+ VREvent_SeatedZeroPoseReset = 804,
+ 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_StatusUpdate = 900,
+ VREvent_MCImageUpdated = 1000,
+ VREvent_FirmwareUpdateStarted = 1100,
+ VREvent_FirmwareUpdateFinished = 1101,
+ VREvent_KeyboardClosed = 1200,
+ VREvent_KeyboardCharInput = 1201,
+ VREvent_KeyboardDone = 1202,
+ VREvent_ApplicationTransitionStarted = 1300,
+ VREvent_ApplicationTransitionAborted = 1301,
+ VREvent_ApplicationTransitionNewAppStarted = 1302,
+ VREvent_ApplicationListUpdated = 1303,
+ VREvent_ApplicationMimeTypeLoad = 1304,
+ VREvent_ApplicationTransitionNewAppLaunchComplete = 1305,
+ VREvent_ProcessConnected = 1306,
+ VREvent_ProcessDisconnected = 1307,
+ VREvent_Compositor_MirrorWindowShown = 1400,
+ VREvent_Compositor_MirrorWindowHidden = 1401,
+ VREvent_Compositor_ChaperoneBoundsShown = 1410,
+ VREvent_Compositor_ChaperoneBoundsHidden = 1411,
+ 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_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,
+}
+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_Max = 64,
+}
+public enum EVRMouseButton
+{
+ Left = 1,
+ Right = 2,
+ Middle = 4,
+}
+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,
+}
+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_Max = 8,
+}
+public enum EVRFirmwareError
+{
+ None = 0,
+ Success = 1,
+ Fail = 2,
+}
+public enum EVRNotificationError
+{
+ OK = 0,
+ InvalidNotificationId = 100,
+ NotificationQueueFull = 101,
+ InvalidOverlayHandle = 102,
+ SystemWithUserValueAlreadyExists = 103,
+}
+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,
+ 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,
+ 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,
+ Compositor_Failed = 400,
+ Compositor_D3D11HardwareRequired = 401,
+ Compositor_FirmwareRequiresUpdate = 402,
+ Compositor_OverlayInitFailed = 403,
+ Compositor_ScreenshotsInitFailed = 404,
+ Compositor_UnableToCreateDevice = 405,
+ VendorSpecific_UnableToConnectToOculusRuntime = 1000,
+ 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,
+ Steam_SteamInstallationNotFound = 2000,
+}
+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 EVRTrackedCameraFrameType
+{
+ Distorted = 0,
+ Undistorted = 1,
+ MaximumUndistorted = 2,
+ MAX_CAMERA_FRAME_TYPES = 3,
+}
+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,
+ BufferTooSmall = 200,
+ PropertyNotSet = 201,
+ UnknownProperty = 202,
+ InvalidParameter = 203,
+}
+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,
+ IsDashboardOverlay_Bool = 60,
+ IsTemplate_Bool = 61,
+ IsInstanced_Bool = 62,
+ IsInternal_Bool = 63,
+ LastLaunchTime_Uint64 = 70,
+}
+public enum EVRApplicationTransitionState
+{
+ VRApplicationTransition_None = 0,
+ VRApplicationTransition_OldAppQuitSent = 10,
+ VRApplicationTransition_WaitingForExternalLaunch = 11,
+ VRApplicationTransition_NewAppLaunched = 20,
+}
+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,
+}
+public enum VROverlayInputMethod
+{
+ None = 0,
+ Mouse = 1,
+}
+public enum VROverlayTransformType
+{
+ VROverlayTransform_Absolute = 0,
+ VROverlayTransform_TrackedDeviceRelative = 1,
+ VROverlayTransform_SystemOverlay = 2,
+ VROverlayTransform_TrackedComponent = 3,
+}
+public enum VROverlayFlags
+{
+ None = 0,
+ Curved = 1,
+ RGSS4X = 2,
+ NoDashboardTab = 3,
+ AcceptsGamepadEvents = 4,
+ ShowGamepadFocus = 5,
+ SendVRScrollEvents = 6,
+ SendVRTouchpadEvents = 7,
+ ShowTouchPadScrollWheel = 8,
+ TransferOwnershipToInternalProcess = 9,
+ SideBySide_Parallel = 10,
+ SideBySide_Crossed = 11,
+ Panorama = 12,
+ StereoPanorama = 13,
+ SortWithNonSceneOverlays = 14,
+ VisibleInDashboard = 15,
+}
+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 EOverlayDirection
+{
+ Up = 0,
+ Down = 1,
+ Left = 2,
+ Right = 3,
+ Count = 4,
+}
+public enum EVROverlayIntersectionMaskPrimitiveType
+{
+ OverlayIntersectionPrimitiveType_Rectangle = 0,
+ OverlayIntersectionPrimitiveType_Circle = 1,
+}
+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 EVRComponentProperty
+{
+ IsStatic = 1,
+ IsVisible = 2,
+ IsTouched = 4,
+ IsPressed = 8,
+ IsScrolled = 16,
+}
+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,
+}
+public enum EVRScreenshotError
+{
+ None = 0,
+ RequestFailed = 1,
+ IncompatibleVersion = 100,
+ NotFound = 101,
+ BufferTooSmall = 102,
+ ScreenshotAlreadyInProgress = 108,
+}
+
+[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_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;
+}
+[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 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 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 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 VRTextureBounds_t
+{
+ public float uMin;
+ public float vMin;
+ public float uMax;
+ public float vMax;
+}
+[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 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;
+}
+[StructLayout(LayoutKind.Sequential)] public struct VREvent_Scroll_t
+{
+ public float xdelta;
+ public float ydelta;
+ public uint repeatCount;
+}
+[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;
+}
+[StructLayout(LayoutKind.Sequential)] public struct VREvent_Overlay_t
+{
+ public ulong overlayHandle;
+}
+[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 ulong uUserValue;
+}
+[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;
+}
+[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_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 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)
+ {
+ 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 Compositor_OverlaySettings
+{
+ public uint size;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool curved;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool antialias;
+ public float scale;
+ public float distance;
+ public float alpha;
+ public float uOffset;
+ public float vOffset;
+ public float uScale;
+ public float vScale;
+ public float gridDivs;
+ public float gridWidth;
+ public float gridScale;
+ public HmdMatrix44_t transform;
+}
+[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 standingTrackedDevicePose;
+}
+[StructLayout(LayoutKind.Sequential)] public struct AppOverrideKeys_t
+{
+ public IntPtr pchKey; // const char *
+ public IntPtr pchValue; // const char *
+}
+[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;
+}
+[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;
+}
+[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 RenderModel_ComponentState_t
+{
+ public HmdMatrix34_t mTrackingToComponentRenderModel;
+ public HmdMatrix34_t mTrackingToComponentLocal;
+ public uint uProperties;
+}
+[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 char unWidth;
+ public char unHeight;
+ public IntPtr rubTextureMapData; // const uint8_t *
+}
+// This structure is for backwards binary compatibility on Linux and OSX only
+[StructLayout(LayoutKind.Sequential, Pack = 4)] public struct RenderModel_TextureMap_t_Packed
+{
+ public char unWidth;
+ public char unHeight;
+ public IntPtr rubTextureMapData; // const uint8_t *
+ public RenderModel_TextureMap_t_Packed(RenderModel_TextureMap_t unpacked)
+ {
+ this.unWidth = unpacked.unWidth;
+ this.unHeight = unpacked.unHeight;
+ this.rubTextureMapData = unpacked.rubTextureMapData;
+ }
+ public void Unpack(ref RenderModel_TextureMap_t unpacked)
+ {
+ unpacked.unWidth = this.unWidth;
+ unpacked.unHeight = this.unHeight;
+ unpacked.rubTextureMapData = this.rubTextureMapData;
+ }
+}
+[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 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_pVROverlay; // class vr::IVROverlay *
+ 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 class OpenVR
+{
+
+ public static uint InitInternal(ref EVRInitError peError, EVRApplicationType eApplicationType)
+ {
+ return OpenVRInterop.InitInternal(ref peError, eApplicationType);
+ }
+
+ public static void ShutdownInternal()
+ {
+ OpenVRInterop.ShutdownInternal();
+ }
+
+ public static bool IsHmdPresent()
+ {
+ return OpenVRInterop.IsHmdPresent();
+ }
+
+ public static bool IsRuntimeInstalled()
+ {
+ return OpenVRInterop.IsRuntimeInstalled();
+ }
+
+ 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 k_nDriverNone = 4294967295;
+ public const uint k_unMaxDriverDebugResponseSize = 32768;
+ public const uint k_unTrackedDeviceIndex_Hmd = 0;
+ public const uint k_unMaxTrackedDeviceCount = 16;
+ 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 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_unHmdMatrix34PropertyTag = 20;
+ public const uint k_unHmdMatrix44PropertyTag = 21;
+ public const uint k_unHmdVector3PropertyTag = 22;
+ public const uint k_unHmdVector4PropertyTag = 23;
+ public const uint k_unHiddenAreaPropertyTag = 30;
+ public const uint k_unOpenVRInternalReserved_Start = 1000;
+ public const uint k_unOpenVRInternalReserved_End = 10000;
+ public const uint k_unMaxPropertyStringSize = 32768;
+ public const uint k_unControllerStateAxisCount = 5;
+ public const ulong k_ulOverlayHandleInvalid = 0;
+ public const uint k_unScreenshotHandleInvalid = 0;
+ public const string IVRSystem_Version = "IVRSystem_016";
+ public const string IVRExtendedDisplay_Version = "IVRExtendedDisplay_001";
+ public const string IVRTrackedCamera_Version = "IVRTrackedCamera_003";
+ 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_006";
+ public const string IVRChaperone_Version = "IVRChaperone_003";
+ public const string IVRChaperoneSetup_Version = "IVRChaperoneSetup_005";
+ public const string IVRCompositor_Version = "IVRCompositor_020";
+ public const uint k_unVROverlayMaxKeyLength = 128;
+ public const uint k_unVROverlayMaxNameLength = 128;
+ public const uint k_unMaxOverlayCount = 64;
+ public const uint k_unMaxOverlayIntersectionMaskPrimitivesCount = 32;
+ public const string IVROverlay_Version = "IVROverlay_016";
+ 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_HandGrip = "handgrip";
+ public const string k_pch_Controller_Component_Status = "status";
+ public const string IVRRenderModels_Version = "IVRRenderModels_005";
+ 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_002";
+ 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_ShowStage_Bool = "showStage";
+ public const string k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers";
+ public const string k_pch_SteamVR_DirectMode_Bool = "directMode";
+ public const string k_pch_SteamVR_DirectModeEdidVid_Int32 = "directModeEdidVid";
+ public const string k_pch_SteamVR_DirectModeEdidPid_Int32 = "directModeEdidPid";
+ 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_Bool = "basestationPowerManagement";
+ public const string k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses";
+ public const string k_pch_SteamVR_SupersampleScale_Float = "supersampleScale";
+ public const string k_pch_SteamVR_AllowAsyncReprojection_Bool = "allowAsyncReprojection";
+ public const string k_pch_SteamVR_AllowReprojection_Bool = "allowInterleavedReprojection";
+ public const string k_pch_SteamVR_ForceReprojection_Bool = "forceReprojection";
+ public const string k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking";
+ public const string k_pch_SteamVR_DefaultMirrorView_Int32 = "defaultMirrorView";
+ public const string k_pch_SteamVR_ShowMirrorView_Bool = "showMirrorView";
+ public const string k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry";
+ 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_Lighthouse_Section = "driver_lighthouse";
+ public const string k_pch_Lighthouse_DisableIMU_Bool = "disableimu";
+ 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_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_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_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_HeuristicActive_Bool = "heuristicActive";
+ public const string k_pch_Perf_NotifyInHMD_Bool = "warnInHMD";
+ public const string k_pch_Perf_NotifyOnlyOnce_Bool = "warnOnlyOnce";
+ 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_LinuxGPUProfiling_Bool = "linuxGPUProfiling";
+ 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_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_Camera_Section = "camera";
+ public const string k_pch_Camera_EnableCamera_Bool = "enableCamera";
+ public const string k_pch_Camera_EnableCameraInDashboard_Bool = "enableCameraInDashboard";
+ public const string k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds";
+ public const string k_pch_Camera_EnableCameraForRoomView_Bool = "enableCameraForRoomView";
+ 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_audio_Section = "audio";
+ public const string k_pch_audio_OnPlaybackDevice_String = "onPlaybackDevice";
+ public const string k_pch_audio_OnRecordDevice_String = "onRecordDevice";
+ public const string k_pch_audio_OnPlaybackMirrorDevice_String = "onPlaybackMirrorDevice";
+ public const string k_pch_audio_OffPlaybackDevice_String = "offPlaybackDevice";
+ public const string k_pch_audio_OffRecordDevice_String = "offRecordDevice";
+ public const string k_pch_audio_VIVEHDMIGain = "viveHDMIGain";
+ 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_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_modelskin_Section = "modelskins";
+ public const string k_pch_Driver_Enable_Bool = "enable";
+ public const string IVRScreenshots_Version = "IVRScreenshots_001";
+ public const string IVRResources_Version = "IVRResources_001";
+ public const string IVRDriverManager_Version = "IVRDriverManager_001";
+
+ 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_pVROverlay = null;
+ m_pVRRenderModels = null;
+ m_pVRExtendedDisplay = null;
+ m_pVRSettings = null;
+ m_pVRApplications = null;
+ m_pVRScreenshots = null;
+ m_pVRTrackedCamera = 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 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 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;
+ }
+
+ private CVRSystem m_pVRSystem;
+ private CVRChaperone m_pVRChaperone;
+ private CVRChaperoneSetup m_pVRChaperoneSetup;
+ private CVRCompositor m_pVRCompositor;
+ private CVROverlay m_pVROverlay;
+ 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 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 CVROverlay Overlay { get { return OpenVRInternal_ModuleContext.VROverlay(); } }
+ 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(); } }
+
+ /** Finds the active installation of vrclient.dll and initializes it */
+ public static CVRSystem Init(ref EVRInitError peError, EVRApplicationType eApplicationType = EVRApplicationType.VRApplication_Scene)
+ {
+ 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();
+ }
+
+}
+
+
+
+}
+
diff --git a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.json b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.json
new file mode 100644
index 0000000..bd76ded
--- /dev/null
+++ b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.json
@@ -0,0 +1,3887 @@
+{"typedefs":[{"typedef": "vr::glSharedTextureHandle_t","type": "void *"}
+,{"typedef": "vr::glInt_t","type": "int32_t"}
+,{"typedef": "vr::glUInt_t","type": "uint32_t"}
+,{"typedef": "vr::SharedTextureHandle_t","type": "uint64_t"}
+,{"typedef": "vr::DriverId_t","type": "uint32_t"}
+,{"typedef": "vr::TrackedDeviceIndex_t","type": "uint32_t"}
+,{"typedef": "vr::PropertyContainerHandle_t","type": "uint64_t"}
+,{"typedef": "vr::PropertyTypeTag_t","type": "uint32_t"}
+,{"typedef": "vr::VREvent_Data_t","type": "union VREvent_Data_t"}
+,{"typedef": "vr::VRControllerState_t","type": "struct vr::VRControllerState001_t"}
+,{"typedef": "vr::VROverlayHandle_t","type": "uint64_t"}
+,{"typedef": "vr::TrackedCameraHandle_t","type": "uint64_t"}
+,{"typedef": "vr::ScreenshotHandle_t","type": "uint32_t"}
+,{"typedef": "vr::VROverlayIntersectionMaskPrimitive_Data_t","type": "union VROverlayIntersectionMaskPrimitive_Data_t"}
+,{"typedef": "vr::VRComponentProperties","type": "uint32_t"}
+,{"typedef": "vr::TextureID_t","type": "int32_t"}
+,{"typedef": "vr::VRNotificationId","type": "uint32_t"}
+,{"typedef": "vr::HmdError","type": "enum vr::EVRInitError"}
+,{"typedef": "vr::Hmd_Eye","type": "enum vr::EVREye"}
+,{"typedef": "vr::ColorSpace","type": "enum vr::EColorSpace"}
+,{"typedef": "vr::HmdTrackingResult","type": "enum vr::ETrackingResult"}
+,{"typedef": "vr::TrackedDeviceClass","type": "enum vr::ETrackedDeviceClass"}
+,{"typedef": "vr::TrackingUniverseOrigin","type": "enum vr::ETrackingUniverseOrigin"}
+,{"typedef": "vr::TrackedDeviceProperty","type": "enum vr::ETrackedDeviceProperty"}
+,{"typedef": "vr::TrackedPropertyError","type": "enum vr::ETrackedPropertyError"}
+,{"typedef": "vr::VRSubmitFlags_t","type": "enum vr::EVRSubmitFlags"}
+,{"typedef": "vr::VRState_t","type": "enum vr::EVRState"}
+,{"typedef": "vr::CollisionBoundsStyle_t","type": "enum vr::ECollisionBoundsStyle"}
+,{"typedef": "vr::VROverlayError","type": "enum vr::EVROverlayError"}
+,{"typedef": "vr::VRFirmwareError","type": "enum vr::EVRFirmwareError"}
+,{"typedef": "vr::VRCompositorError","type": "enum vr::EVRCompositorError"}
+,{"typedef": "vr::VRScreenshotsError","type": "enum vr::EVRScreenshotError"}
+],
+"enums":[
+ {"enumname": "vr::EVREye","values": [
+ {"name": "Eye_Left","value": "0"}
+ ,{"name": "Eye_Right","value": "1"}
+]}
+, {"enumname": "vr::ETextureType","values": [
+ {"name": "TextureType_DirectX","value": "0"}
+ ,{"name": "TextureType_OpenGL","value": "1"}
+ ,{"name": "TextureType_Vulkan","value": "2"}
+ ,{"name": "TextureType_IOSurface","value": "3"}
+ ,{"name": "TextureType_DirectX12","value": "4"}
+]}
+, {"enumname": "vr::EColorSpace","values": [
+ {"name": "ColorSpace_Auto","value": "0"}
+ ,{"name": "ColorSpace_Gamma","value": "1"}
+ ,{"name": "ColorSpace_Linear","value": "2"}
+]}
+, {"enumname": "vr::ETrackingResult","values": [
+ {"name": "TrackingResult_Uninitialized","value": "1"}
+ ,{"name": "TrackingResult_Calibrating_InProgress","value": "100"}
+ ,{"name": "TrackingResult_Calibrating_OutOfRange","value": "101"}
+ ,{"name": "TrackingResult_Running_OK","value": "200"}
+ ,{"name": "TrackingResult_Running_OutOfRange","value": "201"}
+]}
+, {"enumname": "vr::ETrackedDeviceClass","values": [
+ {"name": "TrackedDeviceClass_Invalid","value": "0"}
+ ,{"name": "TrackedDeviceClass_HMD","value": "1"}
+ ,{"name": "TrackedDeviceClass_Controller","value": "2"}
+ ,{"name": "TrackedDeviceClass_GenericTracker","value": "3"}
+ ,{"name": "TrackedDeviceClass_TrackingReference","value": "4"}
+ ,{"name": "TrackedDeviceClass_DisplayRedirect","value": "5"}
+]}
+, {"enumname": "vr::ETrackedControllerRole","values": [
+ {"name": "TrackedControllerRole_Invalid","value": "0"}
+ ,{"name": "TrackedControllerRole_LeftHand","value": "1"}
+ ,{"name": "TrackedControllerRole_RightHand","value": "2"}
+]}
+, {"enumname": "vr::ETrackingUniverseOrigin","values": [
+ {"name": "TrackingUniverseSeated","value": "0"}
+ ,{"name": "TrackingUniverseStanding","value": "1"}
+ ,{"name": "TrackingUniverseRawAndUncalibrated","value": "2"}
+]}
+, {"enumname": "vr::ETrackedDeviceProperty","values": [
+ {"name": "Prop_Invalid","value": "0"}
+ ,{"name": "Prop_TrackingSystemName_String","value": "1000"}
+ ,{"name": "Prop_ModelNumber_String","value": "1001"}
+ ,{"name": "Prop_SerialNumber_String","value": "1002"}
+ ,{"name": "Prop_RenderModelName_String","value": "1003"}
+ ,{"name": "Prop_WillDriftInYaw_Bool","value": "1004"}
+ ,{"name": "Prop_ManufacturerName_String","value": "1005"}
+ ,{"name": "Prop_TrackingFirmwareVersion_String","value": "1006"}
+ ,{"name": "Prop_HardwareRevision_String","value": "1007"}
+ ,{"name": "Prop_AllWirelessDongleDescriptions_String","value": "1008"}
+ ,{"name": "Prop_ConnectedWirelessDongle_String","value": "1009"}
+ ,{"name": "Prop_DeviceIsWireless_Bool","value": "1010"}
+ ,{"name": "Prop_DeviceIsCharging_Bool","value": "1011"}
+ ,{"name": "Prop_DeviceBatteryPercentage_Float","value": "1012"}
+ ,{"name": "Prop_StatusDisplayTransform_Matrix34","value": "1013"}
+ ,{"name": "Prop_Firmware_UpdateAvailable_Bool","value": "1014"}
+ ,{"name": "Prop_Firmware_ManualUpdate_Bool","value": "1015"}
+ ,{"name": "Prop_Firmware_ManualUpdateURL_String","value": "1016"}
+ ,{"name": "Prop_HardwareRevision_Uint64","value": "1017"}
+ ,{"name": "Prop_FirmwareVersion_Uint64","value": "1018"}
+ ,{"name": "Prop_FPGAVersion_Uint64","value": "1019"}
+ ,{"name": "Prop_VRCVersion_Uint64","value": "1020"}
+ ,{"name": "Prop_RadioVersion_Uint64","value": "1021"}
+ ,{"name": "Prop_DongleVersion_Uint64","value": "1022"}
+ ,{"name": "Prop_BlockServerShutdown_Bool","value": "1023"}
+ ,{"name": "Prop_CanUnifyCoordinateSystemWithHmd_Bool","value": "1024"}
+ ,{"name": "Prop_ContainsProximitySensor_Bool","value": "1025"}
+ ,{"name": "Prop_DeviceProvidesBatteryStatus_Bool","value": "1026"}
+ ,{"name": "Prop_DeviceCanPowerOff_Bool","value": "1027"}
+ ,{"name": "Prop_Firmware_ProgrammingTarget_String","value": "1028"}
+ ,{"name": "Prop_DeviceClass_Int32","value": "1029"}
+ ,{"name": "Prop_HasCamera_Bool","value": "1030"}
+ ,{"name": "Prop_DriverVersion_String","value": "1031"}
+ ,{"name": "Prop_Firmware_ForceUpdateRequired_Bool","value": "1032"}
+ ,{"name": "Prop_ViveSystemButtonFixRequired_Bool","value": "1033"}
+ ,{"name": "Prop_ParentDriver_Uint64","value": "1034"}
+ ,{"name": "Prop_ResourceRoot_String","value": "1035"}
+ ,{"name": "Prop_ReportsTimeSinceVSync_Bool","value": "2000"}
+ ,{"name": "Prop_SecondsFromVsyncToPhotons_Float","value": "2001"}
+ ,{"name": "Prop_DisplayFrequency_Float","value": "2002"}
+ ,{"name": "Prop_UserIpdMeters_Float","value": "2003"}
+ ,{"name": "Prop_CurrentUniverseId_Uint64","value": "2004"}
+ ,{"name": "Prop_PreviousUniverseId_Uint64","value": "2005"}
+ ,{"name": "Prop_DisplayFirmwareVersion_Uint64","value": "2006"}
+ ,{"name": "Prop_IsOnDesktop_Bool","value": "2007"}
+ ,{"name": "Prop_DisplayMCType_Int32","value": "2008"}
+ ,{"name": "Prop_DisplayMCOffset_Float","value": "2009"}
+ ,{"name": "Prop_DisplayMCScale_Float","value": "2010"}
+ ,{"name": "Prop_EdidVendorID_Int32","value": "2011"}
+ ,{"name": "Prop_DisplayMCImageLeft_String","value": "2012"}
+ ,{"name": "Prop_DisplayMCImageRight_String","value": "2013"}
+ ,{"name": "Prop_DisplayGCBlackClamp_Float","value": "2014"}
+ ,{"name": "Prop_EdidProductID_Int32","value": "2015"}
+ ,{"name": "Prop_CameraToHeadTransform_Matrix34","value": "2016"}
+ ,{"name": "Prop_DisplayGCType_Int32","value": "2017"}
+ ,{"name": "Prop_DisplayGCOffset_Float","value": "2018"}
+ ,{"name": "Prop_DisplayGCScale_Float","value": "2019"}
+ ,{"name": "Prop_DisplayGCPrescale_Float","value": "2020"}
+ ,{"name": "Prop_DisplayGCImage_String","value": "2021"}
+ ,{"name": "Prop_LensCenterLeftU_Float","value": "2022"}
+ ,{"name": "Prop_LensCenterLeftV_Float","value": "2023"}
+ ,{"name": "Prop_LensCenterRightU_Float","value": "2024"}
+ ,{"name": "Prop_LensCenterRightV_Float","value": "2025"}
+ ,{"name": "Prop_UserHeadToEyeDepthMeters_Float","value": "2026"}
+ ,{"name": "Prop_CameraFirmwareVersion_Uint64","value": "2027"}
+ ,{"name": "Prop_CameraFirmwareDescription_String","value": "2028"}
+ ,{"name": "Prop_DisplayFPGAVersion_Uint64","value": "2029"}
+ ,{"name": "Prop_DisplayBootloaderVersion_Uint64","value": "2030"}
+ ,{"name": "Prop_DisplayHardwareVersion_Uint64","value": "2031"}
+ ,{"name": "Prop_AudioFirmwareVersion_Uint64","value": "2032"}
+ ,{"name": "Prop_CameraCompatibilityMode_Int32","value": "2033"}
+ ,{"name": "Prop_ScreenshotHorizontalFieldOfViewDegrees_Float","value": "2034"}
+ ,{"name": "Prop_ScreenshotVerticalFieldOfViewDegrees_Float","value": "2035"}
+ ,{"name": "Prop_DisplaySuppressed_Bool","value": "2036"}
+ ,{"name": "Prop_DisplayAllowNightMode_Bool","value": "2037"}
+ ,{"name": "Prop_DisplayMCImageWidth_Int32","value": "2038"}
+ ,{"name": "Prop_DisplayMCImageHeight_Int32","value": "2039"}
+ ,{"name": "Prop_DisplayMCImageNumChannels_Int32","value": "2040"}
+ ,{"name": "Prop_DisplayMCImageData_Binary","value": "2041"}
+ ,{"name": "Prop_SecondsFromPhotonsToVblank_Float","value": "2042"}
+ ,{"name": "Prop_DriverDirectModeSendsVsyncEvents_Bool","value": "2043"}
+ ,{"name": "Prop_DisplayDebugMode_Bool","value": "2044"}
+ ,{"name": "Prop_GraphicsAdapterLuid_Uint64","value": "2045"}
+ ,{"name": "Prop_AttachedDeviceId_String","value": "3000"}
+ ,{"name": "Prop_SupportedButtons_Uint64","value": "3001"}
+ ,{"name": "Prop_Axis0Type_Int32","value": "3002"}
+ ,{"name": "Prop_Axis1Type_Int32","value": "3003"}
+ ,{"name": "Prop_Axis2Type_Int32","value": "3004"}
+ ,{"name": "Prop_Axis3Type_Int32","value": "3005"}
+ ,{"name": "Prop_Axis4Type_Int32","value": "3006"}
+ ,{"name": "Prop_ControllerRoleHint_Int32","value": "3007"}
+ ,{"name": "Prop_FieldOfViewLeftDegrees_Float","value": "4000"}
+ ,{"name": "Prop_FieldOfViewRightDegrees_Float","value": "4001"}
+ ,{"name": "Prop_FieldOfViewTopDegrees_Float","value": "4002"}
+ ,{"name": "Prop_FieldOfViewBottomDegrees_Float","value": "4003"}
+ ,{"name": "Prop_TrackingRangeMinimumMeters_Float","value": "4004"}
+ ,{"name": "Prop_TrackingRangeMaximumMeters_Float","value": "4005"}
+ ,{"name": "Prop_ModeLabel_String","value": "4006"}
+ ,{"name": "Prop_IconPathName_String","value": "5000"}
+ ,{"name": "Prop_NamedIconPathDeviceOff_String","value": "5001"}
+ ,{"name": "Prop_NamedIconPathDeviceSearching_String","value": "5002"}
+ ,{"name": "Prop_NamedIconPathDeviceSearchingAlert_String","value": "5003"}
+ ,{"name": "Prop_NamedIconPathDeviceReady_String","value": "5004"}
+ ,{"name": "Prop_NamedIconPathDeviceReadyAlert_String","value": "5005"}
+ ,{"name": "Prop_NamedIconPathDeviceNotReady_String","value": "5006"}
+ ,{"name": "Prop_NamedIconPathDeviceStandby_String","value": "5007"}
+ ,{"name": "Prop_NamedIconPathDeviceAlertLow_String","value": "5008"}
+ ,{"name": "Prop_DisplayHiddenArea_Binary_Start","value": "5100"}
+ ,{"name": "Prop_DisplayHiddenArea_Binary_End","value": "5150"}
+ ,{"name": "Prop_UserConfigPath_String","value": "6000"}
+ ,{"name": "Prop_InstallPath_String","value": "6001"}
+ ,{"name": "Prop_HasDisplayComponent_Bool","value": "6002"}
+ ,{"name": "Prop_HasControllerComponent_Bool","value": "6003"}
+ ,{"name": "Prop_HasCameraComponent_Bool","value": "6004"}
+ ,{"name": "Prop_HasDriverDirectModeComponent_Bool","value": "6005"}
+ ,{"name": "Prop_HasVirtualDisplayComponent_Bool","value": "6006"}
+ ,{"name": "Prop_VendorSpecific_Reserved_Start","value": "10000"}
+ ,{"name": "Prop_VendorSpecific_Reserved_End","value": "10999"}
+]}
+, {"enumname": "vr::ETrackedPropertyError","values": [
+ {"name": "TrackedProp_Success","value": "0"}
+ ,{"name": "TrackedProp_WrongDataType","value": "1"}
+ ,{"name": "TrackedProp_WrongDeviceClass","value": "2"}
+ ,{"name": "TrackedProp_BufferTooSmall","value": "3"}
+ ,{"name": "TrackedProp_UnknownProperty","value": "4"}
+ ,{"name": "TrackedProp_InvalidDevice","value": "5"}
+ ,{"name": "TrackedProp_CouldNotContactServer","value": "6"}
+ ,{"name": "TrackedProp_ValueNotProvidedByDevice","value": "7"}
+ ,{"name": "TrackedProp_StringExceedsMaximumLength","value": "8"}
+ ,{"name": "TrackedProp_NotYetAvailable","value": "9"}
+ ,{"name": "TrackedProp_PermissionDenied","value": "10"}
+ ,{"name": "TrackedProp_InvalidOperation","value": "11"}
+]}
+, {"enumname": "vr::EVRSubmitFlags","values": [
+ {"name": "Submit_Default","value": "0"}
+ ,{"name": "Submit_LensDistortionAlreadyApplied","value": "1"}
+ ,{"name": "Submit_GlRenderBuffer","value": "2"}
+ ,{"name": "Submit_Reserved","value": "4"}
+]}
+, {"enumname": "vr::EVRState","values": [
+ {"name": "VRState_Undefined","value": "-1"}
+ ,{"name": "VRState_Off","value": "0"}
+ ,{"name": "VRState_Searching","value": "1"}
+ ,{"name": "VRState_Searching_Alert","value": "2"}
+ ,{"name": "VRState_Ready","value": "3"}
+ ,{"name": "VRState_Ready_Alert","value": "4"}
+ ,{"name": "VRState_NotReady","value": "5"}
+ ,{"name": "VRState_Standby","value": "6"}
+ ,{"name": "VRState_Ready_Alert_Low","value": "7"}
+]}
+, {"enumname": "vr::EVREventType","values": [
+ {"name": "VREvent_None","value": "0"}
+ ,{"name": "VREvent_TrackedDeviceActivated","value": "100"}
+ ,{"name": "VREvent_TrackedDeviceDeactivated","value": "101"}
+ ,{"name": "VREvent_TrackedDeviceUpdated","value": "102"}
+ ,{"name": "VREvent_TrackedDeviceUserInteractionStarted","value": "103"}
+ ,{"name": "VREvent_TrackedDeviceUserInteractionEnded","value": "104"}
+ ,{"name": "VREvent_IpdChanged","value": "105"}
+ ,{"name": "VREvent_EnterStandbyMode","value": "106"}
+ ,{"name": "VREvent_LeaveStandbyMode","value": "107"}
+ ,{"name": "VREvent_TrackedDeviceRoleChanged","value": "108"}
+ ,{"name": "VREvent_WatchdogWakeUpRequested","value": "109"}
+ ,{"name": "VREvent_LensDistortionChanged","value": "110"}
+ ,{"name": "VREvent_PropertyChanged","value": "111"}
+ ,{"name": "VREvent_ButtonPress","value": "200"}
+ ,{"name": "VREvent_ButtonUnpress","value": "201"}
+ ,{"name": "VREvent_ButtonTouch","value": "202"}
+ ,{"name": "VREvent_ButtonUntouch","value": "203"}
+ ,{"name": "VREvent_MouseMove","value": "300"}
+ ,{"name": "VREvent_MouseButtonDown","value": "301"}
+ ,{"name": "VREvent_MouseButtonUp","value": "302"}
+ ,{"name": "VREvent_FocusEnter","value": "303"}
+ ,{"name": "VREvent_FocusLeave","value": "304"}
+ ,{"name": "VREvent_Scroll","value": "305"}
+ ,{"name": "VREvent_TouchPadMove","value": "306"}
+ ,{"name": "VREvent_OverlayFocusChanged","value": "307"}
+ ,{"name": "VREvent_InputFocusCaptured","value": "400"}
+ ,{"name": "VREvent_InputFocusReleased","value": "401"}
+ ,{"name": "VREvent_SceneFocusLost","value": "402"}
+ ,{"name": "VREvent_SceneFocusGained","value": "403"}
+ ,{"name": "VREvent_SceneApplicationChanged","value": "404"}
+ ,{"name": "VREvent_SceneFocusChanged","value": "405"}
+ ,{"name": "VREvent_InputFocusChanged","value": "406"}
+ ,{"name": "VREvent_SceneApplicationSecondaryRenderingStarted","value": "407"}
+ ,{"name": "VREvent_HideRenderModels","value": "410"}
+ ,{"name": "VREvent_ShowRenderModels","value": "411"}
+ ,{"name": "VREvent_OverlayShown","value": "500"}
+ ,{"name": "VREvent_OverlayHidden","value": "501"}
+ ,{"name": "VREvent_DashboardActivated","value": "502"}
+ ,{"name": "VREvent_DashboardDeactivated","value": "503"}
+ ,{"name": "VREvent_DashboardThumbSelected","value": "504"}
+ ,{"name": "VREvent_DashboardRequested","value": "505"}
+ ,{"name": "VREvent_ResetDashboard","value": "506"}
+ ,{"name": "VREvent_RenderToast","value": "507"}
+ ,{"name": "VREvent_ImageLoaded","value": "508"}
+ ,{"name": "VREvent_ShowKeyboard","value": "509"}
+ ,{"name": "VREvent_HideKeyboard","value": "510"}
+ ,{"name": "VREvent_OverlayGamepadFocusGained","value": "511"}
+ ,{"name": "VREvent_OverlayGamepadFocusLost","value": "512"}
+ ,{"name": "VREvent_OverlaySharedTextureChanged","value": "513"}
+ ,{"name": "VREvent_DashboardGuideButtonDown","value": "514"}
+ ,{"name": "VREvent_DashboardGuideButtonUp","value": "515"}
+ ,{"name": "VREvent_ScreenshotTriggered","value": "516"}
+ ,{"name": "VREvent_ImageFailed","value": "517"}
+ ,{"name": "VREvent_DashboardOverlayCreated","value": "518"}
+ ,{"name": "VREvent_RequestScreenshot","value": "520"}
+ ,{"name": "VREvent_ScreenshotTaken","value": "521"}
+ ,{"name": "VREvent_ScreenshotFailed","value": "522"}
+ ,{"name": "VREvent_SubmitScreenshotToDashboard","value": "523"}
+ ,{"name": "VREvent_ScreenshotProgressToDashboard","value": "524"}
+ ,{"name": "VREvent_PrimaryDashboardDeviceChanged","value": "525"}
+ ,{"name": "VREvent_Notification_Shown","value": "600"}
+ ,{"name": "VREvent_Notification_Hidden","value": "601"}
+ ,{"name": "VREvent_Notification_BeginInteraction","value": "602"}
+ ,{"name": "VREvent_Notification_Destroyed","value": "603"}
+ ,{"name": "VREvent_Quit","value": "700"}
+ ,{"name": "VREvent_ProcessQuit","value": "701"}
+ ,{"name": "VREvent_QuitAborted_UserPrompt","value": "702"}
+ ,{"name": "VREvent_QuitAcknowledged","value": "703"}
+ ,{"name": "VREvent_DriverRequestedQuit","value": "704"}
+ ,{"name": "VREvent_ChaperoneDataHasChanged","value": "800"}
+ ,{"name": "VREvent_ChaperoneUniverseHasChanged","value": "801"}
+ ,{"name": "VREvent_ChaperoneTempDataHasChanged","value": "802"}
+ ,{"name": "VREvent_ChaperoneSettingsHaveChanged","value": "803"}
+ ,{"name": "VREvent_SeatedZeroPoseReset","value": "804"}
+ ,{"name": "VREvent_AudioSettingsHaveChanged","value": "820"}
+ ,{"name": "VREvent_BackgroundSettingHasChanged","value": "850"}
+ ,{"name": "VREvent_CameraSettingsHaveChanged","value": "851"}
+ ,{"name": "VREvent_ReprojectionSettingHasChanged","value": "852"}
+ ,{"name": "VREvent_ModelSkinSettingsHaveChanged","value": "853"}
+ ,{"name": "VREvent_EnvironmentSettingsHaveChanged","value": "854"}
+ ,{"name": "VREvent_PowerSettingsHaveChanged","value": "855"}
+ ,{"name": "VREvent_EnableHomeAppSettingsHaveChanged","value": "856"}
+ ,{"name": "VREvent_StatusUpdate","value": "900"}
+ ,{"name": "VREvent_MCImageUpdated","value": "1000"}
+ ,{"name": "VREvent_FirmwareUpdateStarted","value": "1100"}
+ ,{"name": "VREvent_FirmwareUpdateFinished","value": "1101"}
+ ,{"name": "VREvent_KeyboardClosed","value": "1200"}
+ ,{"name": "VREvent_KeyboardCharInput","value": "1201"}
+ ,{"name": "VREvent_KeyboardDone","value": "1202"}
+ ,{"name": "VREvent_ApplicationTransitionStarted","value": "1300"}
+ ,{"name": "VREvent_ApplicationTransitionAborted","value": "1301"}
+ ,{"name": "VREvent_ApplicationTransitionNewAppStarted","value": "1302"}
+ ,{"name": "VREvent_ApplicationListUpdated","value": "1303"}
+ ,{"name": "VREvent_ApplicationMimeTypeLoad","value": "1304"}
+ ,{"name": "VREvent_ApplicationTransitionNewAppLaunchComplete","value": "1305"}
+ ,{"name": "VREvent_ProcessConnected","value": "1306"}
+ ,{"name": "VREvent_ProcessDisconnected","value": "1307"}
+ ,{"name": "VREvent_Compositor_MirrorWindowShown","value": "1400"}
+ ,{"name": "VREvent_Compositor_MirrorWindowHidden","value": "1401"}
+ ,{"name": "VREvent_Compositor_ChaperoneBoundsShown","value": "1410"}
+ ,{"name": "VREvent_Compositor_ChaperoneBoundsHidden","value": "1411"}
+ ,{"name": "VREvent_TrackedCamera_StartVideoStream","value": "1500"}
+ ,{"name": "VREvent_TrackedCamera_StopVideoStream","value": "1501"}
+ ,{"name": "VREvent_TrackedCamera_PauseVideoStream","value": "1502"}
+ ,{"name": "VREvent_TrackedCamera_ResumeVideoStream","value": "1503"}
+ ,{"name": "VREvent_TrackedCamera_EditingSurface","value": "1550"}
+ ,{"name": "VREvent_PerformanceTest_EnableCapture","value": "1600"}
+ ,{"name": "VREvent_PerformanceTest_DisableCapture","value": "1601"}
+ ,{"name": "VREvent_PerformanceTest_FidelityLevel","value": "1602"}
+ ,{"name": "VREvent_MessageOverlay_Closed","value": "1650"}
+ ,{"name": "VREvent_VendorSpecific_Reserved_Start","value": "10000"}
+ ,{"name": "VREvent_VendorSpecific_Reserved_End","value": "19999"}
+]}
+, {"enumname": "vr::EDeviceActivityLevel","values": [
+ {"name": "k_EDeviceActivityLevel_Unknown","value": "-1"}
+ ,{"name": "k_EDeviceActivityLevel_Idle","value": "0"}
+ ,{"name": "k_EDeviceActivityLevel_UserInteraction","value": "1"}
+ ,{"name": "k_EDeviceActivityLevel_UserInteraction_Timeout","value": "2"}
+ ,{"name": "k_EDeviceActivityLevel_Standby","value": "3"}
+]}
+, {"enumname": "vr::EVRButtonId","values": [
+ {"name": "k_EButton_System","value": "0"}
+ ,{"name": "k_EButton_ApplicationMenu","value": "1"}
+ ,{"name": "k_EButton_Grip","value": "2"}
+ ,{"name": "k_EButton_DPad_Left","value": "3"}
+ ,{"name": "k_EButton_DPad_Up","value": "4"}
+ ,{"name": "k_EButton_DPad_Right","value": "5"}
+ ,{"name": "k_EButton_DPad_Down","value": "6"}
+ ,{"name": "k_EButton_A","value": "7"}
+ ,{"name": "k_EButton_ProximitySensor","value": "31"}
+ ,{"name": "k_EButton_Axis0","value": "32"}
+ ,{"name": "k_EButton_Axis1","value": "33"}
+ ,{"name": "k_EButton_Axis2","value": "34"}
+ ,{"name": "k_EButton_Axis3","value": "35"}
+ ,{"name": "k_EButton_Axis4","value": "36"}
+ ,{"name": "k_EButton_SteamVR_Touchpad","value": "32"}
+ ,{"name": "k_EButton_SteamVR_Trigger","value": "33"}
+ ,{"name": "k_EButton_Dashboard_Back","value": "2"}
+ ,{"name": "k_EButton_Max","value": "64"}
+]}
+, {"enumname": "vr::EVRMouseButton","values": [
+ {"name": "VRMouseButton_Left","value": "1"}
+ ,{"name": "VRMouseButton_Right","value": "2"}
+ ,{"name": "VRMouseButton_Middle","value": "4"}
+]}
+, {"enumname": "vr::EHiddenAreaMeshType","values": [
+ {"name": "k_eHiddenAreaMesh_Standard","value": "0"}
+ ,{"name": "k_eHiddenAreaMesh_Inverse","value": "1"}
+ ,{"name": "k_eHiddenAreaMesh_LineLoop","value": "2"}
+ ,{"name": "k_eHiddenAreaMesh_Max","value": "3"}
+]}
+, {"enumname": "vr::EVRControllerAxisType","values": [
+ {"name": "k_eControllerAxis_None","value": "0"}
+ ,{"name": "k_eControllerAxis_TrackPad","value": "1"}
+ ,{"name": "k_eControllerAxis_Joystick","value": "2"}
+ ,{"name": "k_eControllerAxis_Trigger","value": "3"}
+]}
+, {"enumname": "vr::EVRControllerEventOutputType","values": [
+ {"name": "ControllerEventOutput_OSEvents","value": "0"}
+ ,{"name": "ControllerEventOutput_VREvents","value": "1"}
+]}
+, {"enumname": "vr::ECollisionBoundsStyle","values": [
+ {"name": "COLLISION_BOUNDS_STYLE_BEGINNER","value": "0"}
+ ,{"name": "COLLISION_BOUNDS_STYLE_INTERMEDIATE","value": "1"}
+ ,{"name": "COLLISION_BOUNDS_STYLE_SQUARES","value": "2"}
+ ,{"name": "COLLISION_BOUNDS_STYLE_ADVANCED","value": "3"}
+ ,{"name": "COLLISION_BOUNDS_STYLE_NONE","value": "4"}
+ ,{"name": "COLLISION_BOUNDS_STYLE_COUNT","value": "5"}
+]}
+, {"enumname": "vr::EVROverlayError","values": [
+ {"name": "VROverlayError_None","value": "0"}
+ ,{"name": "VROverlayError_UnknownOverlay","value": "10"}
+ ,{"name": "VROverlayError_InvalidHandle","value": "11"}
+ ,{"name": "VROverlayError_PermissionDenied","value": "12"}
+ ,{"name": "VROverlayError_OverlayLimitExceeded","value": "13"}
+ ,{"name": "VROverlayError_WrongVisibilityType","value": "14"}
+ ,{"name": "VROverlayError_KeyTooLong","value": "15"}
+ ,{"name": "VROverlayError_NameTooLong","value": "16"}
+ ,{"name": "VROverlayError_KeyInUse","value": "17"}
+ ,{"name": "VROverlayError_WrongTransformType","value": "18"}
+ ,{"name": "VROverlayError_InvalidTrackedDevice","value": "19"}
+ ,{"name": "VROverlayError_InvalidParameter","value": "20"}
+ ,{"name": "VROverlayError_ThumbnailCantBeDestroyed","value": "21"}
+ ,{"name": "VROverlayError_ArrayTooSmall","value": "22"}
+ ,{"name": "VROverlayError_RequestFailed","value": "23"}
+ ,{"name": "VROverlayError_InvalidTexture","value": "24"}
+ ,{"name": "VROverlayError_UnableToLoadFile","value": "25"}
+ ,{"name": "VROverlayError_KeyboardAlreadyInUse","value": "26"}
+ ,{"name": "VROverlayError_NoNeighbor","value": "27"}
+ ,{"name": "VROverlayError_TooManyMaskPrimitives","value": "29"}
+ ,{"name": "VROverlayError_BadMaskPrimitive","value": "30"}
+]}
+, {"enumname": "vr::EVRApplicationType","values": [
+ {"name": "VRApplication_Other","value": "0"}
+ ,{"name": "VRApplication_Scene","value": "1"}
+ ,{"name": "VRApplication_Overlay","value": "2"}
+ ,{"name": "VRApplication_Background","value": "3"}
+ ,{"name": "VRApplication_Utility","value": "4"}
+ ,{"name": "VRApplication_VRMonitor","value": "5"}
+ ,{"name": "VRApplication_SteamWatchdog","value": "6"}
+ ,{"name": "VRApplication_Bootstrapper","value": "7"}
+ ,{"name": "VRApplication_Max","value": "8"}
+]}
+, {"enumname": "vr::EVRFirmwareError","values": [
+ {"name": "VRFirmwareError_None","value": "0"}
+ ,{"name": "VRFirmwareError_Success","value": "1"}
+ ,{"name": "VRFirmwareError_Fail","value": "2"}
+]}
+, {"enumname": "vr::EVRNotificationError","values": [
+ {"name": "VRNotificationError_OK","value": "0"}
+ ,{"name": "VRNotificationError_InvalidNotificationId","value": "100"}
+ ,{"name": "VRNotificationError_NotificationQueueFull","value": "101"}
+ ,{"name": "VRNotificationError_InvalidOverlayHandle","value": "102"}
+ ,{"name": "VRNotificationError_SystemWithUserValueAlreadyExists","value": "103"}
+]}
+, {"enumname": "vr::EVRInitError","values": [
+ {"name": "VRInitError_None","value": "0"}
+ ,{"name": "VRInitError_Unknown","value": "1"}
+ ,{"name": "VRInitError_Init_InstallationNotFound","value": "100"}
+ ,{"name": "VRInitError_Init_InstallationCorrupt","value": "101"}
+ ,{"name": "VRInitError_Init_VRClientDLLNotFound","value": "102"}
+ ,{"name": "VRInitError_Init_FileNotFound","value": "103"}
+ ,{"name": "VRInitError_Init_FactoryNotFound","value": "104"}
+ ,{"name": "VRInitError_Init_InterfaceNotFound","value": "105"}
+ ,{"name": "VRInitError_Init_InvalidInterface","value": "106"}
+ ,{"name": "VRInitError_Init_UserConfigDirectoryInvalid","value": "107"}
+ ,{"name": "VRInitError_Init_HmdNotFound","value": "108"}
+ ,{"name": "VRInitError_Init_NotInitialized","value": "109"}
+ ,{"name": "VRInitError_Init_PathRegistryNotFound","value": "110"}
+ ,{"name": "VRInitError_Init_NoConfigPath","value": "111"}
+ ,{"name": "VRInitError_Init_NoLogPath","value": "112"}
+ ,{"name": "VRInitError_Init_PathRegistryNotWritable","value": "113"}
+ ,{"name": "VRInitError_Init_AppInfoInitFailed","value": "114"}
+ ,{"name": "VRInitError_Init_Retry","value": "115"}
+ ,{"name": "VRInitError_Init_InitCanceledByUser","value": "116"}
+ ,{"name": "VRInitError_Init_AnotherAppLaunching","value": "117"}
+ ,{"name": "VRInitError_Init_SettingsInitFailed","value": "118"}
+ ,{"name": "VRInitError_Init_ShuttingDown","value": "119"}
+ ,{"name": "VRInitError_Init_TooManyObjects","value": "120"}
+ ,{"name": "VRInitError_Init_NoServerForBackgroundApp","value": "121"}
+ ,{"name": "VRInitError_Init_NotSupportedWithCompositor","value": "122"}
+ ,{"name": "VRInitError_Init_NotAvailableToUtilityApps","value": "123"}
+ ,{"name": "VRInitError_Init_Internal","value": "124"}
+ ,{"name": "VRInitError_Init_HmdDriverIdIsNone","value": "125"}
+ ,{"name": "VRInitError_Init_HmdNotFoundPresenceFailed","value": "126"}
+ ,{"name": "VRInitError_Init_VRMonitorNotFound","value": "127"}
+ ,{"name": "VRInitError_Init_VRMonitorStartupFailed","value": "128"}
+ ,{"name": "VRInitError_Init_LowPowerWatchdogNotSupported","value": "129"}
+ ,{"name": "VRInitError_Init_InvalidApplicationType","value": "130"}
+ ,{"name": "VRInitError_Init_NotAvailableToWatchdogApps","value": "131"}
+ ,{"name": "VRInitError_Init_WatchdogDisabledInSettings","value": "132"}
+ ,{"name": "VRInitError_Init_VRDashboardNotFound","value": "133"}
+ ,{"name": "VRInitError_Init_VRDashboardStartupFailed","value": "134"}
+ ,{"name": "VRInitError_Init_VRHomeNotFound","value": "135"}
+ ,{"name": "VRInitError_Init_VRHomeStartupFailed","value": "136"}
+ ,{"name": "VRInitError_Driver_Failed","value": "200"}
+ ,{"name": "VRInitError_Driver_Unknown","value": "201"}
+ ,{"name": "VRInitError_Driver_HmdUnknown","value": "202"}
+ ,{"name": "VRInitError_Driver_NotLoaded","value": "203"}
+ ,{"name": "VRInitError_Driver_RuntimeOutOfDate","value": "204"}
+ ,{"name": "VRInitError_Driver_HmdInUse","value": "205"}
+ ,{"name": "VRInitError_Driver_NotCalibrated","value": "206"}
+ ,{"name": "VRInitError_Driver_CalibrationInvalid","value": "207"}
+ ,{"name": "VRInitError_Driver_HmdDisplayNotFound","value": "208"}
+ ,{"name": "VRInitError_Driver_TrackedDeviceInterfaceUnknown","value": "209"}
+ ,{"name": "VRInitError_Driver_HmdDriverIdOutOfBounds","value": "211"}
+ ,{"name": "VRInitError_Driver_HmdDisplayMirrored","value": "212"}
+ ,{"name": "VRInitError_IPC_ServerInitFailed","value": "300"}
+ ,{"name": "VRInitError_IPC_ConnectFailed","value": "301"}
+ ,{"name": "VRInitError_IPC_SharedStateInitFailed","value": "302"}
+ ,{"name": "VRInitError_IPC_CompositorInitFailed","value": "303"}
+ ,{"name": "VRInitError_IPC_MutexInitFailed","value": "304"}
+ ,{"name": "VRInitError_IPC_Failed","value": "305"}
+ ,{"name": "VRInitError_IPC_CompositorConnectFailed","value": "306"}
+ ,{"name": "VRInitError_IPC_CompositorInvalidConnectResponse","value": "307"}
+ ,{"name": "VRInitError_IPC_ConnectFailedAfterMultipleAttempts","value": "308"}
+ ,{"name": "VRInitError_Compositor_Failed","value": "400"}
+ ,{"name": "VRInitError_Compositor_D3D11HardwareRequired","value": "401"}
+ ,{"name": "VRInitError_Compositor_FirmwareRequiresUpdate","value": "402"}
+ ,{"name": "VRInitError_Compositor_OverlayInitFailed","value": "403"}
+ ,{"name": "VRInitError_Compositor_ScreenshotsInitFailed","value": "404"}
+ ,{"name": "VRInitError_Compositor_UnableToCreateDevice","value": "405"}
+ ,{"name": "VRInitError_VendorSpecific_UnableToConnectToOculusRuntime","value": "1000"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_CantOpenDevice","value": "1101"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart","value": "1102"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_NoStoredConfig","value": "1103"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_ConfigTooBig","value": "1104"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_ConfigTooSmall","value": "1105"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_UnableToInitZLib","value": "1106"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion","value": "1107"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart","value": "1108"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart","value": "1109"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext","value": "1110"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_UserDataAddressRange","value": "1111"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_UserDataError","value": "1112"}
+ ,{"name": "VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck","value": "1113"}
+ ,{"name": "VRInitError_Steam_SteamInstallationNotFound","value": "2000"}
+]}
+, {"enumname": "vr::EVRScreenshotType","values": [
+ {"name": "VRScreenshotType_None","value": "0"}
+ ,{"name": "VRScreenshotType_Mono","value": "1"}
+ ,{"name": "VRScreenshotType_Stereo","value": "2"}
+ ,{"name": "VRScreenshotType_Cubemap","value": "3"}
+ ,{"name": "VRScreenshotType_MonoPanorama","value": "4"}
+ ,{"name": "VRScreenshotType_StereoPanorama","value": "5"}
+]}
+, {"enumname": "vr::EVRScreenshotPropertyFilenames","values": [
+ {"name": "VRScreenshotPropertyFilenames_Preview","value": "0"}
+ ,{"name": "VRScreenshotPropertyFilenames_VR","value": "1"}
+]}
+, {"enumname": "vr::EVRTrackedCameraError","values": [
+ {"name": "VRTrackedCameraError_None","value": "0"}
+ ,{"name": "VRTrackedCameraError_OperationFailed","value": "100"}
+ ,{"name": "VRTrackedCameraError_InvalidHandle","value": "101"}
+ ,{"name": "VRTrackedCameraError_InvalidFrameHeaderVersion","value": "102"}
+ ,{"name": "VRTrackedCameraError_OutOfHandles","value": "103"}
+ ,{"name": "VRTrackedCameraError_IPCFailure","value": "104"}
+ ,{"name": "VRTrackedCameraError_NotSupportedForThisDevice","value": "105"}
+ ,{"name": "VRTrackedCameraError_SharedMemoryFailure","value": "106"}
+ ,{"name": "VRTrackedCameraError_FrameBufferingFailure","value": "107"}
+ ,{"name": "VRTrackedCameraError_StreamSetupFailure","value": "108"}
+ ,{"name": "VRTrackedCameraError_InvalidGLTextureId","value": "109"}
+ ,{"name": "VRTrackedCameraError_InvalidSharedTextureHandle","value": "110"}
+ ,{"name": "VRTrackedCameraError_FailedToGetGLTextureId","value": "111"}
+ ,{"name": "VRTrackedCameraError_SharedTextureFailure","value": "112"}
+ ,{"name": "VRTrackedCameraError_NoFrameAvailable","value": "113"}
+ ,{"name": "VRTrackedCameraError_InvalidArgument","value": "114"}
+ ,{"name": "VRTrackedCameraError_InvalidFrameBufferSize","value": "115"}
+]}
+, {"enumname": "vr::EVRTrackedCameraFrameType","values": [
+ {"name": "VRTrackedCameraFrameType_Distorted","value": "0"}
+ ,{"name": "VRTrackedCameraFrameType_Undistorted","value": "1"}
+ ,{"name": "VRTrackedCameraFrameType_MaximumUndistorted","value": "2"}
+ ,{"name": "MAX_CAMERA_FRAME_TYPES","value": "3"}
+]}
+, {"enumname": "vr::EVRApplicationError","values": [
+ {"name": "VRApplicationError_None","value": "0"}
+ ,{"name": "VRApplicationError_AppKeyAlreadyExists","value": "100"}
+ ,{"name": "VRApplicationError_NoManifest","value": "101"}
+ ,{"name": "VRApplicationError_NoApplication","value": "102"}
+ ,{"name": "VRApplicationError_InvalidIndex","value": "103"}
+ ,{"name": "VRApplicationError_UnknownApplication","value": "104"}
+ ,{"name": "VRApplicationError_IPCFailed","value": "105"}
+ ,{"name": "VRApplicationError_ApplicationAlreadyRunning","value": "106"}
+ ,{"name": "VRApplicationError_InvalidManifest","value": "107"}
+ ,{"name": "VRApplicationError_InvalidApplication","value": "108"}
+ ,{"name": "VRApplicationError_LaunchFailed","value": "109"}
+ ,{"name": "VRApplicationError_ApplicationAlreadyStarting","value": "110"}
+ ,{"name": "VRApplicationError_LaunchInProgress","value": "111"}
+ ,{"name": "VRApplicationError_OldApplicationQuitting","value": "112"}
+ ,{"name": "VRApplicationError_TransitionAborted","value": "113"}
+ ,{"name": "VRApplicationError_IsTemplate","value": "114"}
+ ,{"name": "VRApplicationError_BufferTooSmall","value": "200"}
+ ,{"name": "VRApplicationError_PropertyNotSet","value": "201"}
+ ,{"name": "VRApplicationError_UnknownProperty","value": "202"}
+ ,{"name": "VRApplicationError_InvalidParameter","value": "203"}
+]}
+, {"enumname": "vr::EVRApplicationProperty","values": [
+ {"name": "VRApplicationProperty_Name_String","value": "0"}
+ ,{"name": "VRApplicationProperty_LaunchType_String","value": "11"}
+ ,{"name": "VRApplicationProperty_WorkingDirectory_String","value": "12"}
+ ,{"name": "VRApplicationProperty_BinaryPath_String","value": "13"}
+ ,{"name": "VRApplicationProperty_Arguments_String","value": "14"}
+ ,{"name": "VRApplicationProperty_URL_String","value": "15"}
+ ,{"name": "VRApplicationProperty_Description_String","value": "50"}
+ ,{"name": "VRApplicationProperty_NewsURL_String","value": "51"}
+ ,{"name": "VRApplicationProperty_ImagePath_String","value": "52"}
+ ,{"name": "VRApplicationProperty_Source_String","value": "53"}
+ ,{"name": "VRApplicationProperty_IsDashboardOverlay_Bool","value": "60"}
+ ,{"name": "VRApplicationProperty_IsTemplate_Bool","value": "61"}
+ ,{"name": "VRApplicationProperty_IsInstanced_Bool","value": "62"}
+ ,{"name": "VRApplicationProperty_IsInternal_Bool","value": "63"}
+ ,{"name": "VRApplicationProperty_LastLaunchTime_Uint64","value": "70"}
+]}
+, {"enumname": "vr::EVRApplicationTransitionState","values": [
+ {"name": "VRApplicationTransition_None","value": "0"}
+ ,{"name": "VRApplicationTransition_OldAppQuitSent","value": "10"}
+ ,{"name": "VRApplicationTransition_WaitingForExternalLaunch","value": "11"}
+ ,{"name": "VRApplicationTransition_NewAppLaunched","value": "20"}
+]}
+, {"enumname": "vr::ChaperoneCalibrationState","values": [
+ {"name": "ChaperoneCalibrationState_OK","value": "1"}
+ ,{"name": "ChaperoneCalibrationState_Warning","value": "100"}
+ ,{"name": "ChaperoneCalibrationState_Warning_BaseStationMayHaveMoved","value": "101"}
+ ,{"name": "ChaperoneCalibrationState_Warning_BaseStationRemoved","value": "102"}
+ ,{"name": "ChaperoneCalibrationState_Warning_SeatedBoundsInvalid","value": "103"}
+ ,{"name": "ChaperoneCalibrationState_Error","value": "200"}
+ ,{"name": "ChaperoneCalibrationState_Error_BaseStationUninitialized","value": "201"}
+ ,{"name": "ChaperoneCalibrationState_Error_BaseStationConflict","value": "202"}
+ ,{"name": "ChaperoneCalibrationState_Error_PlayAreaInvalid","value": "203"}
+ ,{"name": "ChaperoneCalibrationState_Error_CollisionBoundsInvalid","value": "204"}
+]}
+, {"enumname": "vr::EChaperoneConfigFile","values": [
+ {"name": "EChaperoneConfigFile_Live","value": "1"}
+ ,{"name": "EChaperoneConfigFile_Temp","value": "2"}
+]}
+, {"enumname": "vr::EChaperoneImportFlags","values": [
+ {"name": "EChaperoneImport_BoundsOnly","value": "1"}
+]}
+, {"enumname": "vr::EVRCompositorError","values": [
+ {"name": "VRCompositorError_None","value": "0"}
+ ,{"name": "VRCompositorError_RequestFailed","value": "1"}
+ ,{"name": "VRCompositorError_IncompatibleVersion","value": "100"}
+ ,{"name": "VRCompositorError_DoNotHaveFocus","value": "101"}
+ ,{"name": "VRCompositorError_InvalidTexture","value": "102"}
+ ,{"name": "VRCompositorError_IsNotSceneApplication","value": "103"}
+ ,{"name": "VRCompositorError_TextureIsOnWrongDevice","value": "104"}
+ ,{"name": "VRCompositorError_TextureUsesUnsupportedFormat","value": "105"}
+ ,{"name": "VRCompositorError_SharedTexturesNotSupported","value": "106"}
+ ,{"name": "VRCompositorError_IndexOutOfRange","value": "107"}
+ ,{"name": "VRCompositorError_AlreadySubmitted","value": "108"}
+]}
+, {"enumname": "vr::VROverlayInputMethod","values": [
+ {"name": "VROverlayInputMethod_None","value": "0"}
+ ,{"name": "VROverlayInputMethod_Mouse","value": "1"}
+]}
+, {"enumname": "vr::VROverlayTransformType","values": [
+ {"name": "VROverlayTransform_Absolute","value": "0"}
+ ,{"name": "VROverlayTransform_TrackedDeviceRelative","value": "1"}
+ ,{"name": "VROverlayTransform_SystemOverlay","value": "2"}
+ ,{"name": "VROverlayTransform_TrackedComponent","value": "3"}
+]}
+, {"enumname": "vr::VROverlayFlags","values": [
+ {"name": "VROverlayFlags_None","value": "0"}
+ ,{"name": "VROverlayFlags_Curved","value": "1"}
+ ,{"name": "VROverlayFlags_RGSS4X","value": "2"}
+ ,{"name": "VROverlayFlags_NoDashboardTab","value": "3"}
+ ,{"name": "VROverlayFlags_AcceptsGamepadEvents","value": "4"}
+ ,{"name": "VROverlayFlags_ShowGamepadFocus","value": "5"}
+ ,{"name": "VROverlayFlags_SendVRScrollEvents","value": "6"}
+ ,{"name": "VROverlayFlags_SendVRTouchpadEvents","value": "7"}
+ ,{"name": "VROverlayFlags_ShowTouchPadScrollWheel","value": "8"}
+ ,{"name": "VROverlayFlags_TransferOwnershipToInternalProcess","value": "9"}
+ ,{"name": "VROverlayFlags_SideBySide_Parallel","value": "10"}
+ ,{"name": "VROverlayFlags_SideBySide_Crossed","value": "11"}
+ ,{"name": "VROverlayFlags_Panorama","value": "12"}
+ ,{"name": "VROverlayFlags_StereoPanorama","value": "13"}
+ ,{"name": "VROverlayFlags_SortWithNonSceneOverlays","value": "14"}
+ ,{"name": "VROverlayFlags_VisibleInDashboard","value": "15"}
+]}
+, {"enumname": "vr::VRMessageOverlayResponse","values": [
+ {"name": "VRMessageOverlayResponse_ButtonPress_0","value": "0"}
+ ,{"name": "VRMessageOverlayResponse_ButtonPress_1","value": "1"}
+ ,{"name": "VRMessageOverlayResponse_ButtonPress_2","value": "2"}
+ ,{"name": "VRMessageOverlayResponse_ButtonPress_3","value": "3"}
+ ,{"name": "VRMessageOverlayResponse_CouldntFindSystemOverlay","value": "4"}
+ ,{"name": "VRMessageOverlayResponse_CouldntFindOrCreateClientOverlay","value": "5"}
+ ,{"name": "VRMessageOverlayResponse_ApplicationQuit","value": "6"}
+]}
+, {"enumname": "vr::EGamepadTextInputMode","values": [
+ {"name": "k_EGamepadTextInputModeNormal","value": "0"}
+ ,{"name": "k_EGamepadTextInputModePassword","value": "1"}
+ ,{"name": "k_EGamepadTextInputModeSubmit","value": "2"}
+]}
+, {"enumname": "vr::EGamepadTextInputLineMode","values": [
+ {"name": "k_EGamepadTextInputLineModeSingleLine","value": "0"}
+ ,{"name": "k_EGamepadTextInputLineModeMultipleLines","value": "1"}
+]}
+, {"enumname": "vr::EOverlayDirection","values": [
+ {"name": "OverlayDirection_Up","value": "0"}
+ ,{"name": "OverlayDirection_Down","value": "1"}
+ ,{"name": "OverlayDirection_Left","value": "2"}
+ ,{"name": "OverlayDirection_Right","value": "3"}
+ ,{"name": "OverlayDirection_Count","value": "4"}
+]}
+, {"enumname": "vr::EVROverlayIntersectionMaskPrimitiveType","values": [
+ {"name": "OverlayIntersectionPrimitiveType_Rectangle","value": "0"}
+ ,{"name": "OverlayIntersectionPrimitiveType_Circle","value": "1"}
+]}
+, {"enumname": "vr::EVRRenderModelError","values": [
+ {"name": "VRRenderModelError_None","value": "0"}
+ ,{"name": "VRRenderModelError_Loading","value": "100"}
+ ,{"name": "VRRenderModelError_NotSupported","value": "200"}
+ ,{"name": "VRRenderModelError_InvalidArg","value": "300"}
+ ,{"name": "VRRenderModelError_InvalidModel","value": "301"}
+ ,{"name": "VRRenderModelError_NoShapes","value": "302"}
+ ,{"name": "VRRenderModelError_MultipleShapes","value": "303"}
+ ,{"name": "VRRenderModelError_TooManyVertices","value": "304"}
+ ,{"name": "VRRenderModelError_MultipleTextures","value": "305"}
+ ,{"name": "VRRenderModelError_BufferTooSmall","value": "306"}
+ ,{"name": "VRRenderModelError_NotEnoughNormals","value": "307"}
+ ,{"name": "VRRenderModelError_NotEnoughTexCoords","value": "308"}
+ ,{"name": "VRRenderModelError_InvalidTexture","value": "400"}
+]}
+, {"enumname": "vr::EVRComponentProperty","values": [
+ {"name": "VRComponentProperty_IsStatic","value": "1"}
+ ,{"name": "VRComponentProperty_IsVisible","value": "2"}
+ ,{"name": "VRComponentProperty_IsTouched","value": "4"}
+ ,{"name": "VRComponentProperty_IsPressed","value": "8"}
+ ,{"name": "VRComponentProperty_IsScrolled","value": "16"}
+]}
+, {"enumname": "vr::EVRNotificationType","values": [
+ {"name": "EVRNotificationType_Transient","value": "0"}
+ ,{"name": "EVRNotificationType_Persistent","value": "1"}
+ ,{"name": "EVRNotificationType_Transient_SystemWithUserValue","value": "2"}
+]}
+, {"enumname": "vr::EVRNotificationStyle","values": [
+ {"name": "EVRNotificationStyle_None","value": "0"}
+ ,{"name": "EVRNotificationStyle_Application","value": "100"}
+ ,{"name": "EVRNotificationStyle_Contact_Disabled","value": "200"}
+ ,{"name": "EVRNotificationStyle_Contact_Enabled","value": "201"}
+ ,{"name": "EVRNotificationStyle_Contact_Active","value": "202"}
+]}
+, {"enumname": "vr::EVRSettingsError","values": [
+ {"name": "VRSettingsError_None","value": "0"}
+ ,{"name": "VRSettingsError_IPCFailed","value": "1"}
+ ,{"name": "VRSettingsError_WriteFailed","value": "2"}
+ ,{"name": "VRSettingsError_ReadFailed","value": "3"}
+ ,{"name": "VRSettingsError_JsonParseFailed","value": "4"}
+ ,{"name": "VRSettingsError_UnsetSettingHasNoDefault","value": "5"}
+]}
+, {"enumname": "vr::EVRScreenshotError","values": [
+ {"name": "VRScreenshotError_None","value": "0"}
+ ,{"name": "VRScreenshotError_RequestFailed","value": "1"}
+ ,{"name": "VRScreenshotError_IncompatibleVersion","value": "100"}
+ ,{"name": "VRScreenshotError_NotFound","value": "101"}
+ ,{"name": "VRScreenshotError_BufferTooSmall","value": "102"}
+ ,{"name": "VRScreenshotError_ScreenshotAlreadyInProgress","value": "108"}
+]}
+],
+"consts":[{
+ "constname": "k_nDriverNone","consttype": "const uint32_t", "constval": "4294967295"}
+,{
+ "constname": "k_unMaxDriverDebugResponseSize","consttype": "const uint32_t", "constval": "32768"}
+,{
+ "constname": "k_unTrackedDeviceIndex_Hmd","consttype": "const uint32_t", "constval": "0"}
+,{
+ "constname": "k_unMaxTrackedDeviceCount","consttype": "const uint32_t", "constval": "16"}
+,{
+ "constname": "k_unTrackedDeviceIndexOther","consttype": "const uint32_t", "constval": "4294967294"}
+,{
+ "constname": "k_unTrackedDeviceIndexInvalid","consttype": "const uint32_t", "constval": "4294967295"}
+,{
+ "constname": "k_ulInvalidPropertyContainer","consttype": "const PropertyContainerHandle_t", "constval": "0"}
+,{
+ "constname": "k_unInvalidPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "0"}
+,{
+ "constname": "k_unFloatPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "1"}
+,{
+ "constname": "k_unInt32PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "2"}
+,{
+ "constname": "k_unUint64PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "3"}
+,{
+ "constname": "k_unBoolPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "4"}
+,{
+ "constname": "k_unStringPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "5"}
+,{
+ "constname": "k_unHmdMatrix34PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "20"}
+,{
+ "constname": "k_unHmdMatrix44PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "21"}
+,{
+ "constname": "k_unHmdVector3PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "22"}
+,{
+ "constname": "k_unHmdVector4PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "23"}
+,{
+ "constname": "k_unHiddenAreaPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "30"}
+,{
+ "constname": "k_unOpenVRInternalReserved_Start","consttype": "const PropertyTypeTag_t", "constval": "1000"}
+,{
+ "constname": "k_unOpenVRInternalReserved_End","consttype": "const PropertyTypeTag_t", "constval": "10000"}
+,{
+ "constname": "k_unMaxPropertyStringSize","consttype": "const uint32_t", "constval": "32768"}
+,{
+ "constname": "k_unControllerStateAxisCount","consttype": "const uint32_t", "constval": "5"}
+,{
+ "constname": "k_ulOverlayHandleInvalid","consttype": "const VROverlayHandle_t", "constval": "0"}
+,{
+ "constname": "k_unScreenshotHandleInvalid","consttype": "const uint32_t", "constval": "0"}
+,{
+ "constname": "IVRSystem_Version","consttype": "const char *const", "constval": "IVRSystem_016"}
+,{
+ "constname": "IVRExtendedDisplay_Version","consttype": "const char *const", "constval": "IVRExtendedDisplay_001"}
+,{
+ "constname": "IVRTrackedCamera_Version","consttype": "const char *const", "constval": "IVRTrackedCamera_003"}
+,{
+ "constname": "k_unMaxApplicationKeyLength","consttype": "const uint32_t", "constval": "128"}
+,{
+ "constname": "k_pch_MimeType_HomeApp","consttype": "const char *const", "constval": "vr/home"}
+,{
+ "constname": "k_pch_MimeType_GameTheater","consttype": "const char *const", "constval": "vr/game_theater"}
+,{
+ "constname": "IVRApplications_Version","consttype": "const char *const", "constval": "IVRApplications_006"}
+,{
+ "constname": "IVRChaperone_Version","consttype": "const char *const", "constval": "IVRChaperone_003"}
+,{
+ "constname": "IVRChaperoneSetup_Version","consttype": "const char *const", "constval": "IVRChaperoneSetup_005"}
+,{
+ "constname": "IVRCompositor_Version","consttype": "const char *const", "constval": "IVRCompositor_020"}
+,{
+ "constname": "k_unVROverlayMaxKeyLength","consttype": "const uint32_t", "constval": "128"}
+,{
+ "constname": "k_unVROverlayMaxNameLength","consttype": "const uint32_t", "constval": "128"}
+,{
+ "constname": "k_unMaxOverlayCount","consttype": "const uint32_t", "constval": "64"}
+,{
+ "constname": "k_unMaxOverlayIntersectionMaskPrimitivesCount","consttype": "const uint32_t", "constval": "32"}
+,{
+ "constname": "IVROverlay_Version","consttype": "const char *const", "constval": "IVROverlay_016"}
+,{
+ "constname": "k_pch_Controller_Component_GDC2015","consttype": "const char *const", "constval": "gdc2015"}
+,{
+ "constname": "k_pch_Controller_Component_Base","consttype": "const char *const", "constval": "base"}
+,{
+ "constname": "k_pch_Controller_Component_Tip","consttype": "const char *const", "constval": "tip"}
+,{
+ "constname": "k_pch_Controller_Component_HandGrip","consttype": "const char *const", "constval": "handgrip"}
+,{
+ "constname": "k_pch_Controller_Component_Status","consttype": "const char *const", "constval": "status"}
+,{
+ "constname": "IVRRenderModels_Version","consttype": "const char *const", "constval": "IVRRenderModels_005"}
+,{
+ "constname": "k_unNotificationTextMaxSize","consttype": "const uint32_t", "constval": "256"}
+,{
+ "constname": "IVRNotifications_Version","consttype": "const char *const", "constval": "IVRNotifications_002"}
+,{
+ "constname": "k_unMaxSettingsKeyLength","consttype": "const uint32_t", "constval": "128"}
+,{
+ "constname": "IVRSettings_Version","consttype": "const char *const", "constval": "IVRSettings_002"}
+,{
+ "constname": "k_pch_SteamVR_Section","consttype": "const char *const", "constval": "steamvr"}
+,{
+ "constname": "k_pch_SteamVR_RequireHmd_String","consttype": "const char *const", "constval": "requireHmd"}
+,{
+ "constname": "k_pch_SteamVR_ForcedDriverKey_String","consttype": "const char *const", "constval": "forcedDriver"}
+,{
+ "constname": "k_pch_SteamVR_ForcedHmdKey_String","consttype": "const char *const", "constval": "forcedHmd"}
+,{
+ "constname": "k_pch_SteamVR_DisplayDebug_Bool","consttype": "const char *const", "constval": "displayDebug"}
+,{
+ "constname": "k_pch_SteamVR_DebugProcessPipe_String","consttype": "const char *const", "constval": "debugProcessPipe"}
+,{
+ "constname": "k_pch_SteamVR_DisplayDebugX_Int32","consttype": "const char *const", "constval": "displayDebugX"}
+,{
+ "constname": "k_pch_SteamVR_DisplayDebugY_Int32","consttype": "const char *const", "constval": "displayDebugY"}
+,{
+ "constname": "k_pch_SteamVR_SendSystemButtonToAllApps_Bool","consttype": "const char *const", "constval": "sendSystemButtonToAllApps"}
+,{
+ "constname": "k_pch_SteamVR_LogLevel_Int32","consttype": "const char *const", "constval": "loglevel"}
+,{
+ "constname": "k_pch_SteamVR_IPD_Float","consttype": "const char *const", "constval": "ipd"}
+,{
+ "constname": "k_pch_SteamVR_Background_String","consttype": "const char *const", "constval": "background"}
+,{
+ "constname": "k_pch_SteamVR_BackgroundUseDomeProjection_Bool","consttype": "const char *const", "constval": "backgroundUseDomeProjection"}
+,{
+ "constname": "k_pch_SteamVR_BackgroundCameraHeight_Float","consttype": "const char *const", "constval": "backgroundCameraHeight"}
+,{
+ "constname": "k_pch_SteamVR_BackgroundDomeRadius_Float","consttype": "const char *const", "constval": "backgroundDomeRadius"}
+,{
+ "constname": "k_pch_SteamVR_GridColor_String","consttype": "const char *const", "constval": "gridColor"}
+,{
+ "constname": "k_pch_SteamVR_PlayAreaColor_String","consttype": "const char *const", "constval": "playAreaColor"}
+,{
+ "constname": "k_pch_SteamVR_ShowStage_Bool","consttype": "const char *const", "constval": "showStage"}
+,{
+ "constname": "k_pch_SteamVR_ActivateMultipleDrivers_Bool","consttype": "const char *const", "constval": "activateMultipleDrivers"}
+,{
+ "constname": "k_pch_SteamVR_DirectMode_Bool","consttype": "const char *const", "constval": "directMode"}
+,{
+ "constname": "k_pch_SteamVR_DirectModeEdidVid_Int32","consttype": "const char *const", "constval": "directModeEdidVid"}
+,{
+ "constname": "k_pch_SteamVR_DirectModeEdidPid_Int32","consttype": "const char *const", "constval": "directModeEdidPid"}
+,{
+ "constname": "k_pch_SteamVR_UsingSpeakers_Bool","consttype": "const char *const", "constval": "usingSpeakers"}
+,{
+ "constname": "k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float","consttype": "const char *const", "constval": "speakersForwardYawOffsetDegrees"}
+,{
+ "constname": "k_pch_SteamVR_BaseStationPowerManagement_Bool","consttype": "const char *const", "constval": "basestationPowerManagement"}
+,{
+ "constname": "k_pch_SteamVR_NeverKillProcesses_Bool","consttype": "const char *const", "constval": "neverKillProcesses"}
+,{
+ "constname": "k_pch_SteamVR_SupersampleScale_Float","consttype": "const char *const", "constval": "supersampleScale"}
+,{
+ "constname": "k_pch_SteamVR_AllowAsyncReprojection_Bool","consttype": "const char *const", "constval": "allowAsyncReprojection"}
+,{
+ "constname": "k_pch_SteamVR_AllowReprojection_Bool","consttype": "const char *const", "constval": "allowInterleavedReprojection"}
+,{
+ "constname": "k_pch_SteamVR_ForceReprojection_Bool","consttype": "const char *const", "constval": "forceReprojection"}
+,{
+ "constname": "k_pch_SteamVR_ForceFadeOnBadTracking_Bool","consttype": "const char *const", "constval": "forceFadeOnBadTracking"}
+,{
+ "constname": "k_pch_SteamVR_DefaultMirrorView_Int32","consttype": "const char *const", "constval": "defaultMirrorView"}
+,{
+ "constname": "k_pch_SteamVR_ShowMirrorView_Bool","consttype": "const char *const", "constval": "showMirrorView"}
+,{
+ "constname": "k_pch_SteamVR_MirrorViewGeometry_String","consttype": "const char *const", "constval": "mirrorViewGeometry"}
+,{
+ "constname": "k_pch_SteamVR_StartMonitorFromAppLaunch","consttype": "const char *const", "constval": "startMonitorFromAppLaunch"}
+,{
+ "constname": "k_pch_SteamVR_StartCompositorFromAppLaunch_Bool","consttype": "const char *const", "constval": "startCompositorFromAppLaunch"}
+,{
+ "constname": "k_pch_SteamVR_StartDashboardFromAppLaunch_Bool","consttype": "const char *const", "constval": "startDashboardFromAppLaunch"}
+,{
+ "constname": "k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool","consttype": "const char *const", "constval": "startOverlayAppsFromDashboard"}
+,{
+ "constname": "k_pch_SteamVR_EnableHomeApp","consttype": "const char *const", "constval": "enableHomeApp"}
+,{
+ "constname": "k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32","consttype": "const char *const", "constval": "CycleBackgroundImageTimeSec"}
+,{
+ "constname": "k_pch_SteamVR_RetailDemo_Bool","consttype": "const char *const", "constval": "retailDemo"}
+,{
+ "constname": "k_pch_SteamVR_IpdOffset_Float","consttype": "const char *const", "constval": "ipdOffset"}
+,{
+ "constname": "k_pch_SteamVR_AllowSupersampleFiltering_Bool","consttype": "const char *const", "constval": "allowSupersampleFiltering"}
+,{
+ "constname": "k_pch_Lighthouse_Section","consttype": "const char *const", "constval": "driver_lighthouse"}
+,{
+ "constname": "k_pch_Lighthouse_DisableIMU_Bool","consttype": "const char *const", "constval": "disableimu"}
+,{
+ "constname": "k_pch_Lighthouse_UseDisambiguation_String","consttype": "const char *const", "constval": "usedisambiguation"}
+,{
+ "constname": "k_pch_Lighthouse_DisambiguationDebug_Int32","consttype": "const char *const", "constval": "disambiguationdebug"}
+,{
+ "constname": "k_pch_Lighthouse_PrimaryBasestation_Int32","consttype": "const char *const", "constval": "primarybasestation"}
+,{
+ "constname": "k_pch_Lighthouse_DBHistory_Bool","consttype": "const char *const", "constval": "dbhistory"}
+,{
+ "constname": "k_pch_Null_Section","consttype": "const char *const", "constval": "driver_null"}
+,{
+ "constname": "k_pch_Null_SerialNumber_String","consttype": "const char *const", "constval": "serialNumber"}
+,{
+ "constname": "k_pch_Null_ModelNumber_String","consttype": "const char *const", "constval": "modelNumber"}
+,{
+ "constname": "k_pch_Null_WindowX_Int32","consttype": "const char *const", "constval": "windowX"}
+,{
+ "constname": "k_pch_Null_WindowY_Int32","consttype": "const char *const", "constval": "windowY"}
+,{
+ "constname": "k_pch_Null_WindowWidth_Int32","consttype": "const char *const", "constval": "windowWidth"}
+,{
+ "constname": "k_pch_Null_WindowHeight_Int32","consttype": "const char *const", "constval": "windowHeight"}
+,{
+ "constname": "k_pch_Null_RenderWidth_Int32","consttype": "const char *const", "constval": "renderWidth"}
+,{
+ "constname": "k_pch_Null_RenderHeight_Int32","consttype": "const char *const", "constval": "renderHeight"}
+,{
+ "constname": "k_pch_Null_SecondsFromVsyncToPhotons_Float","consttype": "const char *const", "constval": "secondsFromVsyncToPhotons"}
+,{
+ "constname": "k_pch_Null_DisplayFrequency_Float","consttype": "const char *const", "constval": "displayFrequency"}
+,{
+ "constname": "k_pch_UserInterface_Section","consttype": "const char *const", "constval": "userinterface"}
+,{
+ "constname": "k_pch_UserInterface_StatusAlwaysOnTop_Bool","consttype": "const char *const", "constval": "StatusAlwaysOnTop"}
+,{
+ "constname": "k_pch_UserInterface_MinimizeToTray_Bool","consttype": "const char *const", "constval": "MinimizeToTray"}
+,{
+ "constname": "k_pch_UserInterface_Screenshots_Bool","consttype": "const char *const", "constval": "screenshots"}
+,{
+ "constname": "k_pch_UserInterface_ScreenshotType_Int","consttype": "const char *const", "constval": "screenshotType"}
+,{
+ "constname": "k_pch_Notifications_Section","consttype": "const char *const", "constval": "notifications"}
+,{
+ "constname": "k_pch_Notifications_DoNotDisturb_Bool","consttype": "const char *const", "constval": "DoNotDisturb"}
+,{
+ "constname": "k_pch_Keyboard_Section","consttype": "const char *const", "constval": "keyboard"}
+,{
+ "constname": "k_pch_Keyboard_TutorialCompletions","consttype": "const char *const", "constval": "TutorialCompletions"}
+,{
+ "constname": "k_pch_Keyboard_ScaleX","consttype": "const char *const", "constval": "ScaleX"}
+,{
+ "constname": "k_pch_Keyboard_ScaleY","consttype": "const char *const", "constval": "ScaleY"}
+,{
+ "constname": "k_pch_Keyboard_OffsetLeftX","consttype": "const char *const", "constval": "OffsetLeftX"}
+,{
+ "constname": "k_pch_Keyboard_OffsetRightX","consttype": "const char *const", "constval": "OffsetRightX"}
+,{
+ "constname": "k_pch_Keyboard_OffsetY","consttype": "const char *const", "constval": "OffsetY"}
+,{
+ "constname": "k_pch_Keyboard_Smoothing","consttype": "const char *const", "constval": "Smoothing"}
+,{
+ "constname": "k_pch_Perf_Section","consttype": "const char *const", "constval": "perfcheck"}
+,{
+ "constname": "k_pch_Perf_HeuristicActive_Bool","consttype": "const char *const", "constval": "heuristicActive"}
+,{
+ "constname": "k_pch_Perf_NotifyInHMD_Bool","consttype": "const char *const", "constval": "warnInHMD"}
+,{
+ "constname": "k_pch_Perf_NotifyOnlyOnce_Bool","consttype": "const char *const", "constval": "warnOnlyOnce"}
+,{
+ "constname": "k_pch_Perf_AllowTimingStore_Bool","consttype": "const char *const", "constval": "allowTimingStore"}
+,{
+ "constname": "k_pch_Perf_SaveTimingsOnExit_Bool","consttype": "const char *const", "constval": "saveTimingsOnExit"}
+,{
+ "constname": "k_pch_Perf_TestData_Float","consttype": "const char *const", "constval": "perfTestData"}
+,{
+ "constname": "k_pch_Perf_LinuxGPUProfiling_Bool","consttype": "const char *const", "constval": "linuxGPUProfiling"}
+,{
+ "constname": "k_pch_CollisionBounds_Section","consttype": "const char *const", "constval": "collisionBounds"}
+,{
+ "constname": "k_pch_CollisionBounds_Style_Int32","consttype": "const char *const", "constval": "CollisionBoundsStyle"}
+,{
+ "constname": "k_pch_CollisionBounds_GroundPerimeterOn_Bool","consttype": "const char *const", "constval": "CollisionBoundsGroundPerimeterOn"}
+,{
+ "constname": "k_pch_CollisionBounds_CenterMarkerOn_Bool","consttype": "const char *const", "constval": "CollisionBoundsCenterMarkerOn"}
+,{
+ "constname": "k_pch_CollisionBounds_PlaySpaceOn_Bool","consttype": "const char *const", "constval": "CollisionBoundsPlaySpaceOn"}
+,{
+ "constname": "k_pch_CollisionBounds_FadeDistance_Float","consttype": "const char *const", "constval": "CollisionBoundsFadeDistance"}
+,{
+ "constname": "k_pch_CollisionBounds_ColorGammaR_Int32","consttype": "const char *const", "constval": "CollisionBoundsColorGammaR"}
+,{
+ "constname": "k_pch_CollisionBounds_ColorGammaG_Int32","consttype": "const char *const", "constval": "CollisionBoundsColorGammaG"}
+,{
+ "constname": "k_pch_CollisionBounds_ColorGammaB_Int32","consttype": "const char *const", "constval": "CollisionBoundsColorGammaB"}
+,{
+ "constname": "k_pch_CollisionBounds_ColorGammaA_Int32","consttype": "const char *const", "constval": "CollisionBoundsColorGammaA"}
+,{
+ "constname": "k_pch_Camera_Section","consttype": "const char *const", "constval": "camera"}
+,{
+ "constname": "k_pch_Camera_EnableCamera_Bool","consttype": "const char *const", "constval": "enableCamera"}
+,{
+ "constname": "k_pch_Camera_EnableCameraInDashboard_Bool","consttype": "const char *const", "constval": "enableCameraInDashboard"}
+,{
+ "constname": "k_pch_Camera_EnableCameraForCollisionBounds_Bool","consttype": "const char *const", "constval": "enableCameraForCollisionBounds"}
+,{
+ "constname": "k_pch_Camera_EnableCameraForRoomView_Bool","consttype": "const char *const", "constval": "enableCameraForRoomView"}
+,{
+ "constname": "k_pch_Camera_BoundsColorGammaR_Int32","consttype": "const char *const", "constval": "cameraBoundsColorGammaR"}
+,{
+ "constname": "k_pch_Camera_BoundsColorGammaG_Int32","consttype": "const char *const", "constval": "cameraBoundsColorGammaG"}
+,{
+ "constname": "k_pch_Camera_BoundsColorGammaB_Int32","consttype": "const char *const", "constval": "cameraBoundsColorGammaB"}
+,{
+ "constname": "k_pch_Camera_BoundsColorGammaA_Int32","consttype": "const char *const", "constval": "cameraBoundsColorGammaA"}
+,{
+ "constname": "k_pch_Camera_BoundsStrength_Int32","consttype": "const char *const", "constval": "cameraBoundsStrength"}
+,{
+ "constname": "k_pch_audio_Section","consttype": "const char *const", "constval": "audio"}
+,{
+ "constname": "k_pch_audio_OnPlaybackDevice_String","consttype": "const char *const", "constval": "onPlaybackDevice"}
+,{
+ "constname": "k_pch_audio_OnRecordDevice_String","consttype": "const char *const", "constval": "onRecordDevice"}
+,{
+ "constname": "k_pch_audio_OnPlaybackMirrorDevice_String","consttype": "const char *const", "constval": "onPlaybackMirrorDevice"}
+,{
+ "constname": "k_pch_audio_OffPlaybackDevice_String","consttype": "const char *const", "constval": "offPlaybackDevice"}
+,{
+ "constname": "k_pch_audio_OffRecordDevice_String","consttype": "const char *const", "constval": "offRecordDevice"}
+,{
+ "constname": "k_pch_audio_VIVEHDMIGain","consttype": "const char *const", "constval": "viveHDMIGain"}
+,{
+ "constname": "k_pch_Power_Section","consttype": "const char *const", "constval": "power"}
+,{
+ "constname": "k_pch_Power_PowerOffOnExit_Bool","consttype": "const char *const", "constval": "powerOffOnExit"}
+,{
+ "constname": "k_pch_Power_TurnOffScreensTimeout_Float","consttype": "const char *const", "constval": "turnOffScreensTimeout"}
+,{
+ "constname": "k_pch_Power_TurnOffControllersTimeout_Float","consttype": "const char *const", "constval": "turnOffControllersTimeout"}
+,{
+ "constname": "k_pch_Power_ReturnToWatchdogTimeout_Float","consttype": "const char *const", "constval": "returnToWatchdogTimeout"}
+,{
+ "constname": "k_pch_Power_AutoLaunchSteamVROnButtonPress","consttype": "const char *const", "constval": "autoLaunchSteamVROnButtonPress"}
+,{
+ "constname": "k_pch_Dashboard_Section","consttype": "const char *const", "constval": "dashboard"}
+,{
+ "constname": "k_pch_Dashboard_EnableDashboard_Bool","consttype": "const char *const", "constval": "enableDashboard"}
+,{
+ "constname": "k_pch_Dashboard_ArcadeMode_Bool","consttype": "const char *const", "constval": "arcadeMode"}
+,{
+ "constname": "k_pch_modelskin_Section","consttype": "const char *const", "constval": "modelskins"}
+,{
+ "constname": "k_pch_Driver_Enable_Bool","consttype": "const char *const", "constval": "enable"}
+,{
+ "constname": "IVRScreenshots_Version","consttype": "const char *const", "constval": "IVRScreenshots_001"}
+,{
+ "constname": "IVRResources_Version","consttype": "const char *const", "constval": "IVRResources_001"}
+,{
+ "constname": "IVRDriverManager_Version","consttype": "const char *const", "constval": "IVRDriverManager_001"}
+],
+"structs":[{"struct": "vr::HmdMatrix34_t","fields": [
+{ "fieldname": "m", "fieldtype": "float [3][4]"}]}
+,{"struct": "vr::HmdMatrix44_t","fields": [
+{ "fieldname": "m", "fieldtype": "float [4][4]"}]}
+,{"struct": "vr::HmdVector3_t","fields": [
+{ "fieldname": "v", "fieldtype": "float [3]"}]}
+,{"struct": "vr::HmdVector4_t","fields": [
+{ "fieldname": "v", "fieldtype": "float [4]"}]}
+,{"struct": "vr::HmdVector3d_t","fields": [
+{ "fieldname": "v", "fieldtype": "double [3]"}]}
+,{"struct": "vr::HmdVector2_t","fields": [
+{ "fieldname": "v", "fieldtype": "float [2]"}]}
+,{"struct": "vr::HmdQuaternion_t","fields": [
+{ "fieldname": "w", "fieldtype": "double"},
+{ "fieldname": "x", "fieldtype": "double"},
+{ "fieldname": "y", "fieldtype": "double"},
+{ "fieldname": "z", "fieldtype": "double"}]}
+,{"struct": "vr::HmdColor_t","fields": [
+{ "fieldname": "r", "fieldtype": "float"},
+{ "fieldname": "g", "fieldtype": "float"},
+{ "fieldname": "b", "fieldtype": "float"},
+{ "fieldname": "a", "fieldtype": "float"}]}
+,{"struct": "vr::HmdQuad_t","fields": [
+{ "fieldname": "vCorners", "fieldtype": "struct vr::HmdVector3_t [4]"}]}
+,{"struct": "vr::HmdRect2_t","fields": [
+{ "fieldname": "vTopLeft", "fieldtype": "struct vr::HmdVector2_t"},
+{ "fieldname": "vBottomRight", "fieldtype": "struct vr::HmdVector2_t"}]}
+,{"struct": "vr::DistortionCoordinates_t","fields": [
+{ "fieldname": "rfRed", "fieldtype": "float [2]"},
+{ "fieldname": "rfGreen", "fieldtype": "float [2]"},
+{ "fieldname": "rfBlue", "fieldtype": "float [2]"}]}
+,{"struct": "vr::Texture_t","fields": [
+{ "fieldname": "handle", "fieldtype": "void *"},
+{ "fieldname": "eType", "fieldtype": "enum vr::ETextureType"},
+{ "fieldname": "eColorSpace", "fieldtype": "enum vr::EColorSpace"}]}
+,{"struct": "vr::TrackedDevicePose_t","fields": [
+{ "fieldname": "mDeviceToAbsoluteTracking", "fieldtype": "struct vr::HmdMatrix34_t"},
+{ "fieldname": "vVelocity", "fieldtype": "struct vr::HmdVector3_t"},
+{ "fieldname": "vAngularVelocity", "fieldtype": "struct vr::HmdVector3_t"},
+{ "fieldname": "eTrackingResult", "fieldtype": "enum vr::ETrackingResult"},
+{ "fieldname": "bPoseIsValid", "fieldtype": "_Bool"},
+{ "fieldname": "bDeviceIsConnected", "fieldtype": "_Bool"}]}
+,{"struct": "vr::VRTextureBounds_t","fields": [
+{ "fieldname": "uMin", "fieldtype": "float"},
+{ "fieldname": "vMin", "fieldtype": "float"},
+{ "fieldname": "uMax", "fieldtype": "float"},
+{ "fieldname": "vMax", "fieldtype": "float"}]}
+,{"struct": "vr::VRVulkanTextureData_t","fields": [
+{ "fieldname": "m_nImage", "fieldtype": "uint64_t"},
+{ "fieldname": "m_pDevice", "fieldtype": "struct VkDevice_T *"},
+{ "fieldname": "m_pPhysicalDevice", "fieldtype": "struct VkPhysicalDevice_T *"},
+{ "fieldname": "m_pInstance", "fieldtype": "struct VkInstance_T *"},
+{ "fieldname": "m_pQueue", "fieldtype": "struct VkQueue_T *"},
+{ "fieldname": "m_nQueueFamilyIndex", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nWidth", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nHeight", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nFormat", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nSampleCount", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::D3D12TextureData_t","fields": [
+{ "fieldname": "m_pResource", "fieldtype": "struct ID3D12Resource *"},
+{ "fieldname": "m_pCommandQueue", "fieldtype": "struct ID3D12CommandQueue *"},
+{ "fieldname": "m_nNodeMask", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VREvent_Controller_t","fields": [
+{ "fieldname": "button", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VREvent_Mouse_t","fields": [
+{ "fieldname": "x", "fieldtype": "float"},
+{ "fieldname": "y", "fieldtype": "float"},
+{ "fieldname": "button", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VREvent_Scroll_t","fields": [
+{ "fieldname": "xdelta", "fieldtype": "float"},
+{ "fieldname": "ydelta", "fieldtype": "float"},
+{ "fieldname": "repeatCount", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VREvent_TouchPadMove_t","fields": [
+{ "fieldname": "bFingerDown", "fieldtype": "_Bool"},
+{ "fieldname": "flSecondsFingerDown", "fieldtype": "float"},
+{ "fieldname": "fValueXFirst", "fieldtype": "float"},
+{ "fieldname": "fValueYFirst", "fieldtype": "float"},
+{ "fieldname": "fValueXRaw", "fieldtype": "float"},
+{ "fieldname": "fValueYRaw", "fieldtype": "float"}]}
+,{"struct": "vr::VREvent_Notification_t","fields": [
+{ "fieldname": "ulUserValue", "fieldtype": "uint64_t"},
+{ "fieldname": "notificationId", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VREvent_Process_t","fields": [
+{ "fieldname": "pid", "fieldtype": "uint32_t"},
+{ "fieldname": "oldPid", "fieldtype": "uint32_t"},
+{ "fieldname": "bForced", "fieldtype": "_Bool"}]}
+,{"struct": "vr::VREvent_Overlay_t","fields": [
+{ "fieldname": "overlayHandle", "fieldtype": "uint64_t"}]}
+,{"struct": "vr::VREvent_Status_t","fields": [
+{ "fieldname": "statusState", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VREvent_Keyboard_t","fields": [
+{ "fieldname": "cNewInput", "fieldtype": "char [8]"},
+{ "fieldname": "uUserValue", "fieldtype": "uint64_t"}]}
+,{"struct": "vr::VREvent_Ipd_t","fields": [
+{ "fieldname": "ipdMeters", "fieldtype": "float"}]}
+,{"struct": "vr::VREvent_Chaperone_t","fields": [
+{ "fieldname": "m_nPreviousUniverse", "fieldtype": "uint64_t"},
+{ "fieldname": "m_nCurrentUniverse", "fieldtype": "uint64_t"}]}
+,{"struct": "vr::VREvent_Reserved_t","fields": [
+{ "fieldname": "reserved0", "fieldtype": "uint64_t"},
+{ "fieldname": "reserved1", "fieldtype": "uint64_t"}]}
+,{"struct": "vr::VREvent_PerformanceTest_t","fields": [
+{ "fieldname": "m_nFidelityLevel", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VREvent_SeatedZeroPoseReset_t","fields": [
+{ "fieldname": "bResetBySystemMenu", "fieldtype": "_Bool"}]}
+,{"struct": "vr::VREvent_Screenshot_t","fields": [
+{ "fieldname": "handle", "fieldtype": "uint32_t"},
+{ "fieldname": "type", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VREvent_ScreenshotProgress_t","fields": [
+{ "fieldname": "progress", "fieldtype": "float"}]}
+,{"struct": "vr::VREvent_ApplicationLaunch_t","fields": [
+{ "fieldname": "pid", "fieldtype": "uint32_t"},
+{ "fieldname": "unArgsHandle", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VREvent_EditingCameraSurface_t","fields": [
+{ "fieldname": "overlayHandle", "fieldtype": "uint64_t"},
+{ "fieldname": "nVisualMode", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VREvent_MessageOverlay_t","fields": [
+{ "fieldname": "unVRMessageOverlayResponse", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VREvent_Property_t","fields": [
+{ "fieldname": "container", "fieldtype": "PropertyContainerHandle_t"},
+{ "fieldname": "prop", "fieldtype": "enum vr::ETrackedDeviceProperty"}]}
+,{"struct": "vr::(anonymous)","fields": [
+{ "fieldname": "reserved", "fieldtype": "struct vr::VREvent_Reserved_t"},
+{ "fieldname": "controller", "fieldtype": "struct vr::VREvent_Controller_t"},
+{ "fieldname": "mouse", "fieldtype": "struct vr::VREvent_Mouse_t"},
+{ "fieldname": "scroll", "fieldtype": "struct vr::VREvent_Scroll_t"},
+{ "fieldname": "process", "fieldtype": "struct vr::VREvent_Process_t"},
+{ "fieldname": "notification", "fieldtype": "struct vr::VREvent_Notification_t"},
+{ "fieldname": "overlay", "fieldtype": "struct vr::VREvent_Overlay_t"},
+{ "fieldname": "status", "fieldtype": "struct vr::VREvent_Status_t"},
+{ "fieldname": "keyboard", "fieldtype": "struct vr::VREvent_Keyboard_t"},
+{ "fieldname": "ipd", "fieldtype": "struct vr::VREvent_Ipd_t"},
+{ "fieldname": "chaperone", "fieldtype": "struct vr::VREvent_Chaperone_t"},
+{ "fieldname": "performanceTest", "fieldtype": "struct vr::VREvent_PerformanceTest_t"},
+{ "fieldname": "touchPadMove", "fieldtype": "struct vr::VREvent_TouchPadMove_t"},
+{ "fieldname": "seatedZeroPoseReset", "fieldtype": "struct vr::VREvent_SeatedZeroPoseReset_t"},
+{ "fieldname": "screenshot", "fieldtype": "struct vr::VREvent_Screenshot_t"},
+{ "fieldname": "screenshotProgress", "fieldtype": "struct vr::VREvent_ScreenshotProgress_t"},
+{ "fieldname": "applicationLaunch", "fieldtype": "struct vr::VREvent_ApplicationLaunch_t"},
+{ "fieldname": "cameraSurface", "fieldtype": "struct vr::VREvent_EditingCameraSurface_t"},
+{ "fieldname": "messageOverlay", "fieldtype": "struct vr::VREvent_MessageOverlay_t"},
+{ "fieldname": "property", "fieldtype": "struct vr::VREvent_Property_t"}]}
+,{"struct": "vr::VREvent_t","fields": [
+{ "fieldname": "eventType", "fieldtype": "uint32_t"},
+{ "fieldname": "trackedDeviceIndex", "fieldtype": "TrackedDeviceIndex_t"},
+{ "fieldname": "eventAgeSeconds", "fieldtype": "float"},
+{ "fieldname": "data", "fieldtype": "VREvent_Data_t"}]}
+,{"struct": "vr::HiddenAreaMesh_t","fields": [
+{ "fieldname": "pVertexData", "fieldtype": "const struct vr::HmdVector2_t *"},
+{ "fieldname": "unTriangleCount", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VRControllerAxis_t","fields": [
+{ "fieldname": "x", "fieldtype": "float"},
+{ "fieldname": "y", "fieldtype": "float"}]}
+,{"struct": "vr::VRControllerState001_t","fields": [
+{ "fieldname": "unPacketNum", "fieldtype": "uint32_t"},
+{ "fieldname": "ulButtonPressed", "fieldtype": "uint64_t"},
+{ "fieldname": "ulButtonTouched", "fieldtype": "uint64_t"},
+{ "fieldname": "rAxis", "fieldtype": "struct vr::VRControllerAxis_t [5]"}]}
+,{"struct": "vr::Compositor_OverlaySettings","fields": [
+{ "fieldname": "size", "fieldtype": "uint32_t"},
+{ "fieldname": "curved", "fieldtype": "_Bool"},
+{ "fieldname": "antialias", "fieldtype": "_Bool"},
+{ "fieldname": "scale", "fieldtype": "float"},
+{ "fieldname": "distance", "fieldtype": "float"},
+{ "fieldname": "alpha", "fieldtype": "float"},
+{ "fieldname": "uOffset", "fieldtype": "float"},
+{ "fieldname": "vOffset", "fieldtype": "float"},
+{ "fieldname": "uScale", "fieldtype": "float"},
+{ "fieldname": "vScale", "fieldtype": "float"},
+{ "fieldname": "gridDivs", "fieldtype": "float"},
+{ "fieldname": "gridWidth", "fieldtype": "float"},
+{ "fieldname": "gridScale", "fieldtype": "float"},
+{ "fieldname": "transform", "fieldtype": "struct vr::HmdMatrix44_t"}]}
+,{"struct": "vr::CameraVideoStreamFrameHeader_t","fields": [
+{ "fieldname": "eFrameType", "fieldtype": "enum vr::EVRTrackedCameraFrameType"},
+{ "fieldname": "nWidth", "fieldtype": "uint32_t"},
+{ "fieldname": "nHeight", "fieldtype": "uint32_t"},
+{ "fieldname": "nBytesPerPixel", "fieldtype": "uint32_t"},
+{ "fieldname": "nFrameSequence", "fieldtype": "uint32_t"},
+{ "fieldname": "standingTrackedDevicePose", "fieldtype": "struct vr::TrackedDevicePose_t"}]}
+,{"struct": "vr::AppOverrideKeys_t","fields": [
+{ "fieldname": "pchKey", "fieldtype": "const char *"},
+{ "fieldname": "pchValue", "fieldtype": "const char *"}]}
+,{"struct": "vr::Compositor_FrameTiming","fields": [
+{ "fieldname": "m_nSize", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nFrameIndex", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumFramePresents", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumMisPresented", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumDroppedFrames", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nReprojectionFlags", "fieldtype": "uint32_t"},
+{ "fieldname": "m_flSystemTimeInSeconds", "fieldtype": "double"},
+{ "fieldname": "m_flPreSubmitGpuMs", "fieldtype": "float"},
+{ "fieldname": "m_flPostSubmitGpuMs", "fieldtype": "float"},
+{ "fieldname": "m_flTotalRenderGpuMs", "fieldtype": "float"},
+{ "fieldname": "m_flCompositorRenderGpuMs", "fieldtype": "float"},
+{ "fieldname": "m_flCompositorRenderCpuMs", "fieldtype": "float"},
+{ "fieldname": "m_flCompositorIdleCpuMs", "fieldtype": "float"},
+{ "fieldname": "m_flClientFrameIntervalMs", "fieldtype": "float"},
+{ "fieldname": "m_flPresentCallCpuMs", "fieldtype": "float"},
+{ "fieldname": "m_flWaitForPresentCpuMs", "fieldtype": "float"},
+{ "fieldname": "m_flSubmitFrameMs", "fieldtype": "float"},
+{ "fieldname": "m_flWaitGetPosesCalledMs", "fieldtype": "float"},
+{ "fieldname": "m_flNewPosesReadyMs", "fieldtype": "float"},
+{ "fieldname": "m_flNewFrameReadyMs", "fieldtype": "float"},
+{ "fieldname": "m_flCompositorUpdateStartMs", "fieldtype": "float"},
+{ "fieldname": "m_flCompositorUpdateEndMs", "fieldtype": "float"},
+{ "fieldname": "m_flCompositorRenderStartMs", "fieldtype": "float"},
+{ "fieldname": "m_HmdPose", "fieldtype": "vr::TrackedDevicePose_t"}]}
+,{"struct": "vr::Compositor_CumulativeStats","fields": [
+{ "fieldname": "m_nPid", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumFramePresents", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumDroppedFrames", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumReprojectedFrames", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumFramePresentsOnStartup", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumDroppedFramesOnStartup", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumReprojectedFramesOnStartup", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumLoading", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumFramePresentsLoading", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumDroppedFramesLoading", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumReprojectedFramesLoading", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumTimedOut", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumFramePresentsTimedOut", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumDroppedFramesTimedOut", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumReprojectedFramesTimedOut", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::VROverlayIntersectionParams_t","fields": [
+{ "fieldname": "vSource", "fieldtype": "struct vr::HmdVector3_t"},
+{ "fieldname": "vDirection", "fieldtype": "struct vr::HmdVector3_t"},
+{ "fieldname": "eOrigin", "fieldtype": "enum vr::ETrackingUniverseOrigin"}]}
+,{"struct": "vr::VROverlayIntersectionResults_t","fields": [
+{ "fieldname": "vPoint", "fieldtype": "struct vr::HmdVector3_t"},
+{ "fieldname": "vNormal", "fieldtype": "struct vr::HmdVector3_t"},
+{ "fieldname": "vUVs", "fieldtype": "struct vr::HmdVector2_t"},
+{ "fieldname": "fDistance", "fieldtype": "float"}]}
+,{"struct": "vr::IntersectionMaskRectangle_t","fields": [
+{ "fieldname": "m_flTopLeftX", "fieldtype": "float"},
+{ "fieldname": "m_flTopLeftY", "fieldtype": "float"},
+{ "fieldname": "m_flWidth", "fieldtype": "float"},
+{ "fieldname": "m_flHeight", "fieldtype": "float"}]}
+,{"struct": "vr::IntersectionMaskCircle_t","fields": [
+{ "fieldname": "m_flCenterX", "fieldtype": "float"},
+{ "fieldname": "m_flCenterY", "fieldtype": "float"},
+{ "fieldname": "m_flRadius", "fieldtype": "float"}]}
+,{"struct": "vr::(anonymous)","fields": [
+{ "fieldname": "m_Rectangle", "fieldtype": "struct vr::IntersectionMaskRectangle_t"},
+{ "fieldname": "m_Circle", "fieldtype": "struct vr::IntersectionMaskCircle_t"}]}
+,{"struct": "vr::VROverlayIntersectionMaskPrimitive_t","fields": [
+{ "fieldname": "m_nPrimitiveType", "fieldtype": "enum vr::EVROverlayIntersectionMaskPrimitiveType"},
+{ "fieldname": "m_Primitive", "fieldtype": "VROverlayIntersectionMaskPrimitive_Data_t"}]}
+,{"struct": "vr::RenderModel_ComponentState_t","fields": [
+{ "fieldname": "mTrackingToComponentRenderModel", "fieldtype": "struct vr::HmdMatrix34_t"},
+{ "fieldname": "mTrackingToComponentLocal", "fieldtype": "struct vr::HmdMatrix34_t"},
+{ "fieldname": "uProperties", "fieldtype": "VRComponentProperties"}]}
+,{"struct": "vr::RenderModel_Vertex_t","fields": [
+{ "fieldname": "vPosition", "fieldtype": "struct vr::HmdVector3_t"},
+{ "fieldname": "vNormal", "fieldtype": "struct vr::HmdVector3_t"},
+{ "fieldname": "rfTextureCoord", "fieldtype": "float [2]"}]}
+,{"struct": "vr::RenderModel_TextureMap_t","fields": [
+{ "fieldname": "unWidth", "fieldtype": "uint16_t"},
+{ "fieldname": "unHeight", "fieldtype": "uint16_t"},
+{ "fieldname": "rubTextureMapData", "fieldtype": "const uint8_t *"}]}
+,{"struct": "vr::RenderModel_t","fields": [
+{ "fieldname": "rVertexData", "fieldtype": "const struct vr::RenderModel_Vertex_t *"},
+{ "fieldname": "unVertexCount", "fieldtype": "uint32_t"},
+{ "fieldname": "rIndexData", "fieldtype": "const uint16_t *"},
+{ "fieldname": "unTriangleCount", "fieldtype": "uint32_t"},
+{ "fieldname": "diffuseTextureId", "fieldtype": "TextureID_t"}]}
+,{"struct": "vr::RenderModel_ControllerMode_State_t","fields": [
+{ "fieldname": "bScrollWheelVisible", "fieldtype": "_Bool"}]}
+,{"struct": "vr::NotificationBitmap_t","fields": [
+{ "fieldname": "m_pImageData", "fieldtype": "void *"},
+{ "fieldname": "m_nWidth", "fieldtype": "int32_t"},
+{ "fieldname": "m_nHeight", "fieldtype": "int32_t"},
+{ "fieldname": "m_nBytesPerPixel", "fieldtype": "int32_t"}]}
+,{"struct": "vr::COpenVRContext","fields": [
+{ "fieldname": "m_pVRSystem", "fieldtype": "class vr::IVRSystem *"},
+{ "fieldname": "m_pVRChaperone", "fieldtype": "class vr::IVRChaperone *"},
+{ "fieldname": "m_pVRChaperoneSetup", "fieldtype": "class vr::IVRChaperoneSetup *"},
+{ "fieldname": "m_pVRCompositor", "fieldtype": "class vr::IVRCompositor *"},
+{ "fieldname": "m_pVROverlay", "fieldtype": "class vr::IVROverlay *"},
+{ "fieldname": "m_pVRResources", "fieldtype": "class vr::IVRResources *"},
+{ "fieldname": "m_pVRRenderModels", "fieldtype": "class vr::IVRRenderModels *"},
+{ "fieldname": "m_pVRExtendedDisplay", "fieldtype": "class vr::IVRExtendedDisplay *"},
+{ "fieldname": "m_pVRSettings", "fieldtype": "class vr::IVRSettings *"},
+{ "fieldname": "m_pVRApplications", "fieldtype": "class vr::IVRApplications *"},
+{ "fieldname": "m_pVRTrackedCamera", "fieldtype": "class vr::IVRTrackedCamera *"},
+{ "fieldname": "m_pVRScreenshots", "fieldtype": "class vr::IVRScreenshots *"},
+{ "fieldname": "m_pVRDriverManager", "fieldtype": "class vr::IVRDriverManager *"}]}
+],
+"methods":[{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetRecommendedRenderTargetSize",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pnWidth" ,"paramtype": "uint32_t *"},
+{ "paramname": "pnHeight" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetProjectionMatrix",
+ "returntype": "struct vr::HmdMatrix44_t",
+ "params": [
+{ "paramname": "eEye" ,"paramtype": "vr::EVREye"},
+{ "paramname": "fNearZ" ,"paramtype": "float"},
+{ "paramname": "fFarZ" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetProjectionRaw",
+ "returntype": "void",
+ "params": [
+{ "paramname": "eEye" ,"paramtype": "vr::EVREye"},
+{ "paramname": "pfLeft" ,"paramtype": "float *"},
+{ "paramname": "pfRight" ,"paramtype": "float *"},
+{ "paramname": "pfTop" ,"paramtype": "float *"},
+{ "paramname": "pfBottom" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "ComputeDistortion",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "eEye" ,"paramtype": "vr::EVREye"},
+{ "paramname": "fU" ,"paramtype": "float"},
+{ "paramname": "fV" ,"paramtype": "float"},
+{ "paramname": "pDistortionCoordinates" ,"paramtype": "struct vr::DistortionCoordinates_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetEyeToHeadTransform",
+ "returntype": "struct vr::HmdMatrix34_t",
+ "params": [
+{ "paramname": "eEye" ,"paramtype": "vr::EVREye"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetTimeSinceLastVsync",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pfSecondsSinceLastVsync" ,"paramtype": "float *"},
+{ "paramname": "pulFrameCounter" ,"paramtype": "uint64_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetD3D9AdapterIndex",
+ "returntype": "int32_t"
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetDXGIOutputInfo",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pnAdapterIndex" ,"paramtype": "int32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetOutputDevice",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pnDevice" ,"paramtype": "uint64_t *"},
+{ "paramname": "textureType" ,"paramtype": "vr::ETextureType"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "IsDisplayOnDesktop",
+ "returntype": "bool"
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "SetDisplayVisibility",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bIsVisibleOnDesktop" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetDeviceToAbsoluteTrackingPose",
+ "returntype": "void",
+ "params": [
+{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"},
+{ "paramname": "fPredictedSecondsToPhotonsFromNow" ,"paramtype": "float"},
+{ "paramname": "pTrackedDevicePoseArray" ,"array_count": "unTrackedDevicePoseArrayCount" ,"paramtype": "struct vr::TrackedDevicePose_t *"},
+{ "paramname": "unTrackedDevicePoseArrayCount" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "ResetSeatedZeroPose",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetSeatedZeroPoseToStandingAbsoluteTrackingPose",
+ "returntype": "struct vr::HmdMatrix34_t"
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetRawZeroPoseToStandingAbsoluteTrackingPose",
+ "returntype": "struct vr::HmdMatrix34_t"
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetSortedTrackedDeviceIndicesOfClass",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "eTrackedDeviceClass" ,"paramtype": "vr::ETrackedDeviceClass"},
+{ "paramname": "punTrackedDeviceIndexArray" ,"array_count": "unTrackedDeviceIndexArrayCount" ,"paramtype": "vr::TrackedDeviceIndex_t *"},
+{ "paramname": "unTrackedDeviceIndexArrayCount" ,"paramtype": "uint32_t"},
+{ "paramname": "unRelativeToTrackedDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetTrackedDeviceActivityLevel",
+ "returntype": "vr::EDeviceActivityLevel",
+ "params": [
+{ "paramname": "unDeviceId" ,"paramtype": "vr::TrackedDeviceIndex_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "ApplyTransform",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pOutputPose" ,"paramtype": "struct vr::TrackedDevicePose_t *"},
+{ "paramname": "pTrackedDevicePose" ,"paramtype": "const struct vr::TrackedDevicePose_t *"},
+{ "paramname": "pTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetTrackedDeviceIndexForControllerRole",
+ "returntype": "vr::TrackedDeviceIndex_t",
+ "params": [
+{ "paramname": "unDeviceType" ,"paramtype": "vr::ETrackedControllerRole"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetControllerRoleForTrackedDeviceIndex",
+ "returntype": "vr::ETrackedControllerRole",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetTrackedDeviceClass",
+ "returntype": "vr::ETrackedDeviceClass",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "IsTrackedDeviceConnected",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetBoolTrackedDeviceProperty",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"},
+{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetFloatTrackedDeviceProperty",
+ "returntype": "float",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"},
+{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetInt32TrackedDeviceProperty",
+ "returntype": "int32_t",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"},
+{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetUint64TrackedDeviceProperty",
+ "returntype": "uint64_t",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"},
+{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetMatrix34TrackedDeviceProperty",
+ "returntype": "struct vr::HmdMatrix34_t",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"},
+{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetStringTrackedDeviceProperty",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"},
+{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"},
+{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetPropErrorNameFromEnum",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "error" ,"paramtype": "vr::ETrackedPropertyError"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "PollNextEvent",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pEvent" ,"paramtype": "struct vr::VREvent_t *"},
+{ "paramname": "uncbVREvent" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "PollNextEventWithPose",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"},
+{ "paramname": "pEvent" ,"paramtype": "struct vr::VREvent_t *"},
+{ "paramname": "uncbVREvent" ,"paramtype": "uint32_t"},
+{ "paramname": "pTrackedDevicePose" ,"paramtype": "vr::TrackedDevicePose_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetEventTypeNameFromEnum",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "eType" ,"paramtype": "vr::EVREventType"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetHiddenAreaMesh",
+ "returntype": "struct vr::HiddenAreaMesh_t",
+ "params": [
+{ "paramname": "eEye" ,"paramtype": "vr::EVREye"},
+{ "paramname": "type" ,"paramtype": "vr::EHiddenAreaMeshType"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetControllerState",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "unControllerDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "pControllerState" ,"paramtype": "vr::VRControllerState_t *"},
+{ "paramname": "unControllerStateSize" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetControllerStateWithPose",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"},
+{ "paramname": "unControllerDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "pControllerState" ,"paramtype": "vr::VRControllerState_t *"},
+{ "paramname": "unControllerStateSize" ,"paramtype": "uint32_t"},
+{ "paramname": "pTrackedDevicePose" ,"paramtype": "struct vr::TrackedDevicePose_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "TriggerHapticPulse",
+ "returntype": "void",
+ "params": [
+{ "paramname": "unControllerDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "unAxisId" ,"paramtype": "uint32_t"},
+{ "paramname": "usDurationMicroSec" ,"paramtype": "unsigned short"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetButtonIdNameFromEnum",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "eButtonId" ,"paramtype": "vr::EVRButtonId"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetControllerAxisTypeNameFromEnum",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "eAxisType" ,"paramtype": "vr::EVRControllerAxisType"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "CaptureInputFocus",
+ "returntype": "bool"
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "ReleaseInputFocus",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "IsInputFocusCapturedByAnotherProcess",
+ "returntype": "bool"
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "DriverDebugRequest",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "pchRequest" ,"paramtype": "const char *"},
+{ "paramname": "pchResponseBuffer" ,"paramtype": "char *"},
+{ "paramname": "unResponseBufferSize" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "PerformFirmwareUpdate",
+ "returntype": "vr::EVRFirmwareError",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "AcknowledgeQuit_Exiting",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "AcknowledgeQuit_UserPrompt",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRExtendedDisplay",
+ "methodname": "GetWindowBounds",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pnX" ,"paramtype": "int32_t *"},
+{ "paramname": "pnY" ,"paramtype": "int32_t *"},
+{ "paramname": "pnWidth" ,"paramtype": "uint32_t *"},
+{ "paramname": "pnHeight" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRExtendedDisplay",
+ "methodname": "GetEyeOutputViewport",
+ "returntype": "void",
+ "params": [
+{ "paramname": "eEye" ,"paramtype": "vr::EVREye"},
+{ "paramname": "pnX" ,"paramtype": "uint32_t *"},
+{ "paramname": "pnY" ,"paramtype": "uint32_t *"},
+{ "paramname": "pnWidth" ,"paramtype": "uint32_t *"},
+{ "paramname": "pnHeight" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRExtendedDisplay",
+ "methodname": "GetDXGIOutputInfo",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pnAdapterIndex" ,"paramtype": "int32_t *"},
+{ "paramname": "pnAdapterOutputIndex" ,"paramtype": "int32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "GetCameraErrorNameFromEnum",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "eCameraError" ,"paramtype": "vr::EVRTrackedCameraError"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "HasCamera",
+ "returntype": "vr::EVRTrackedCameraError",
+ "params": [
+{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "pHasCamera" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "GetCameraFrameSize",
+ "returntype": "vr::EVRTrackedCameraError",
+ "params": [
+{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"},
+{ "paramname": "pnWidth" ,"paramtype": "uint32_t *"},
+{ "paramname": "pnHeight" ,"paramtype": "uint32_t *"},
+{ "paramname": "pnFrameBufferSize" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "GetCameraIntrinsics",
+ "returntype": "vr::EVRTrackedCameraError",
+ "params": [
+{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"},
+{ "paramname": "pFocalLength" ,"paramtype": "vr::HmdVector2_t *"},
+{ "paramname": "pCenter" ,"paramtype": "vr::HmdVector2_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "GetCameraProjection",
+ "returntype": "vr::EVRTrackedCameraError",
+ "params": [
+{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"},
+{ "paramname": "flZNear" ,"paramtype": "float"},
+{ "paramname": "flZFar" ,"paramtype": "float"},
+{ "paramname": "pProjection" ,"paramtype": "vr::HmdMatrix44_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "AcquireVideoStreamingService",
+ "returntype": "vr::EVRTrackedCameraError",
+ "params": [
+{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "pHandle" ,"paramtype": "vr::TrackedCameraHandle_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "ReleaseVideoStreamingService",
+ "returntype": "vr::EVRTrackedCameraError",
+ "params": [
+{ "paramname": "hTrackedCamera" ,"paramtype": "vr::TrackedCameraHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "GetVideoStreamFrameBuffer",
+ "returntype": "vr::EVRTrackedCameraError",
+ "params": [
+{ "paramname": "hTrackedCamera" ,"paramtype": "vr::TrackedCameraHandle_t"},
+{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"},
+{ "paramname": "pFrameBuffer" ,"paramtype": "void *"},
+{ "paramname": "nFrameBufferSize" ,"paramtype": "uint32_t"},
+{ "paramname": "pFrameHeader" ,"paramtype": "vr::CameraVideoStreamFrameHeader_t *"},
+{ "paramname": "nFrameHeaderSize" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "GetVideoStreamTextureSize",
+ "returntype": "vr::EVRTrackedCameraError",
+ "params": [
+{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"},
+{ "paramname": "pTextureBounds" ,"paramtype": "vr::VRTextureBounds_t *"},
+{ "paramname": "pnWidth" ,"paramtype": "uint32_t *"},
+{ "paramname": "pnHeight" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "GetVideoStreamTextureD3D11",
+ "returntype": "vr::EVRTrackedCameraError",
+ "params": [
+{ "paramname": "hTrackedCamera" ,"paramtype": "vr::TrackedCameraHandle_t"},
+{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"},
+{ "paramname": "pD3D11DeviceOrResource" ,"paramtype": "void *"},
+{ "paramname": "ppD3D11ShaderResourceView" ,"paramtype": "void **"},
+{ "paramname": "pFrameHeader" ,"paramtype": "vr::CameraVideoStreamFrameHeader_t *"},
+{ "paramname": "nFrameHeaderSize" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "GetVideoStreamTextureGL",
+ "returntype": "vr::EVRTrackedCameraError",
+ "params": [
+{ "paramname": "hTrackedCamera" ,"paramtype": "vr::TrackedCameraHandle_t"},
+{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"},
+{ "paramname": "pglTextureId" ,"paramtype": "vr::glUInt_t *"},
+{ "paramname": "pFrameHeader" ,"paramtype": "vr::CameraVideoStreamFrameHeader_t *"},
+{ "paramname": "nFrameHeaderSize" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRTrackedCamera",
+ "methodname": "ReleaseVideoStreamTextureGL",
+ "returntype": "vr::EVRTrackedCameraError",
+ "params": [
+{ "paramname": "hTrackedCamera" ,"paramtype": "vr::TrackedCameraHandle_t"},
+{ "paramname": "glTextureId" ,"paramtype": "vr::glUInt_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "AddApplicationManifest",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "pchApplicationManifestFullPath" ,"paramtype": "const char *"},
+{ "paramname": "bTemporary" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "RemoveApplicationManifest",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "pchApplicationManifestFullPath" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "IsApplicationInstalled",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationCount",
+ "returntype": "uint32_t"
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationKeyByIndex",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "unApplicationIndex" ,"paramtype": "uint32_t"},
+{ "paramname": "pchAppKeyBuffer" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unAppKeyBufferLen" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationKeyByProcessId",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "unProcessId" ,"paramtype": "uint32_t"},
+{ "paramname": "pchAppKeyBuffer" ,"paramtype": "char *"},
+{ "paramname": "unAppKeyBufferLen" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "LaunchApplication",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "LaunchTemplateApplication",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "pchTemplateAppKey" ,"paramtype": "const char *"},
+{ "paramname": "pchNewAppKey" ,"paramtype": "const char *"},
+{ "paramname": "pKeys" ,"array_count": "unKeys" ,"paramtype": "const struct vr::AppOverrideKeys_t *"},
+{ "paramname": "unKeys" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "LaunchApplicationFromMimeType",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "pchMimeType" ,"paramtype": "const char *"},
+{ "paramname": "pchArgs" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "LaunchDashboardOverlay",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "CancelApplicationLaunch",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "IdentifyApplication",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "unProcessId" ,"paramtype": "uint32_t"},
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationProcessId",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationsErrorNameFromEnum",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "error" ,"paramtype": "vr::EVRApplicationError"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationPropertyString",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"},
+{ "paramname": "eProperty" ,"paramtype": "vr::EVRApplicationProperty"},
+{ "paramname": "pchPropertyValueBuffer" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unPropertyValueBufferLen" ,"paramtype": "uint32_t"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRApplicationError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationPropertyBool",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"},
+{ "paramname": "eProperty" ,"paramtype": "vr::EVRApplicationProperty"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRApplicationError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationPropertyUint64",
+ "returntype": "uint64_t",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"},
+{ "paramname": "eProperty" ,"paramtype": "vr::EVRApplicationProperty"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRApplicationError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "SetApplicationAutoLaunch",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"},
+{ "paramname": "bAutoLaunch" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationAutoLaunch",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "SetDefaultApplicationForMimeType",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"},
+{ "paramname": "pchMimeType" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetDefaultApplicationForMimeType",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchMimeType" ,"paramtype": "const char *"},
+{ "paramname": "pchAppKeyBuffer" ,"paramtype": "char *"},
+{ "paramname": "unAppKeyBufferLen" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationSupportedMimeTypes",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"},
+{ "paramname": "pchMimeTypesBuffer" ,"paramtype": "char *"},
+{ "paramname": "unMimeTypesBuffer" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationsThatSupportMimeType",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchMimeType" ,"paramtype": "const char *"},
+{ "paramname": "pchAppKeysThatSupportBuffer" ,"paramtype": "char *"},
+{ "paramname": "unAppKeysThatSupportBuffer" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationLaunchArguments",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "unHandle" ,"paramtype": "uint32_t"},
+{ "paramname": "pchArgs" ,"paramtype": "char *"},
+{ "paramname": "unArgs" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetStartingApplication",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "pchAppKeyBuffer" ,"paramtype": "char *"},
+{ "paramname": "unAppKeyBufferLen" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetTransitionState",
+ "returntype": "vr::EVRApplicationTransitionState"
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "PerformApplicationPrelaunchCheck",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "pchAppKey" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetApplicationsTransitionStateNameFromEnum",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "state" ,"paramtype": "vr::EVRApplicationTransitionState"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "IsQuitUserPromptRequested",
+ "returntype": "bool"
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "LaunchInternalProcess",
+ "returntype": "vr::EVRApplicationError",
+ "params": [
+{ "paramname": "pchBinaryPath" ,"paramtype": "const char *"},
+{ "paramname": "pchArguments" ,"paramtype": "const char *"},
+{ "paramname": "pchWorkingDirectory" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRApplications",
+ "methodname": "GetCurrentSceneProcessId",
+ "returntype": "uint32_t"
+}
+,{
+ "classname": "vr::IVRChaperone",
+ "methodname": "GetCalibrationState",
+ "returntype": "vr::ChaperoneCalibrationState"
+}
+,{
+ "classname": "vr::IVRChaperone",
+ "methodname": "GetPlayAreaSize",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pSizeX" ,"paramtype": "float *"},
+{ "paramname": "pSizeZ" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperone",
+ "methodname": "GetPlayAreaRect",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "rect" ,"paramtype": "struct vr::HmdQuad_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperone",
+ "methodname": "ReloadInfo",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRChaperone",
+ "methodname": "SetSceneColor",
+ "returntype": "void",
+ "params": [
+{ "paramname": "color" ,"paramtype": "struct vr::HmdColor_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperone",
+ "methodname": "GetBoundsColor",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pOutputColorArray" ,"paramtype": "struct vr::HmdColor_t *"},
+{ "paramname": "nNumOutputColors" ,"paramtype": "int"},
+{ "paramname": "flCollisionBoundsFadeDistance" ,"paramtype": "float"},
+{ "paramname": "pOutputCameraColor" ,"paramtype": "struct vr::HmdColor_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperone",
+ "methodname": "AreBoundsVisible",
+ "returntype": "bool"
+}
+,{
+ "classname": "vr::IVRChaperone",
+ "methodname": "ForceBoundsVisible",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bForce" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "CommitWorkingCopy",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "configFile" ,"paramtype": "vr::EChaperoneConfigFile"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "RevertWorkingCopy",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "GetWorkingPlayAreaSize",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pSizeX" ,"paramtype": "float *"},
+{ "paramname": "pSizeZ" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "GetWorkingPlayAreaRect",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "rect" ,"paramtype": "struct vr::HmdQuad_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "GetWorkingCollisionBoundsInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pQuadsBuffer" ,"out_array_count": "punQuadsCount" ,"paramtype": "struct vr::HmdQuad_t *"},
+{ "paramname": "punQuadsCount" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "GetLiveCollisionBoundsInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pQuadsBuffer" ,"out_array_count": "punQuadsCount" ,"paramtype": "struct vr::HmdQuad_t *"},
+{ "paramname": "punQuadsCount" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "GetWorkingSeatedZeroPoseToRawTrackingPose",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pmatSeatedZeroPoseToRawTrackingPose" ,"paramtype": "struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "GetWorkingStandingZeroPoseToRawTrackingPose",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pmatStandingZeroPoseToRawTrackingPose" ,"paramtype": "struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "SetWorkingPlayAreaSize",
+ "returntype": "void",
+ "params": [
+{ "paramname": "sizeX" ,"paramtype": "float"},
+{ "paramname": "sizeZ" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "SetWorkingCollisionBoundsInfo",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pQuadsBuffer" ,"array_count": "unQuadsCount" ,"paramtype": "struct vr::HmdQuad_t *"},
+{ "paramname": "unQuadsCount" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "SetWorkingSeatedZeroPoseToRawTrackingPose",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pMatSeatedZeroPoseToRawTrackingPose" ,"paramtype": "const struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "SetWorkingStandingZeroPoseToRawTrackingPose",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pMatStandingZeroPoseToRawTrackingPose" ,"paramtype": "const struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "ReloadFromDisk",
+ "returntype": "void",
+ "params": [
+{ "paramname": "configFile" ,"paramtype": "vr::EChaperoneConfigFile"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "GetLiveSeatedZeroPoseToRawTrackingPose",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pmatSeatedZeroPoseToRawTrackingPose" ,"paramtype": "struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "SetWorkingCollisionBoundsTagsInfo",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pTagsBuffer" ,"array_count": "unTagCount" ,"paramtype": "uint8_t *"},
+{ "paramname": "unTagCount" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "GetLiveCollisionBoundsTagsInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pTagsBuffer" ,"out_array_count": "punTagCount" ,"paramtype": "uint8_t *"},
+{ "paramname": "punTagCount" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "SetWorkingPhysicalBoundsInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pQuadsBuffer" ,"array_count": "unQuadsCount" ,"paramtype": "struct vr::HmdQuad_t *"},
+{ "paramname": "unQuadsCount" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "GetLivePhysicalBoundsInfo",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pQuadsBuffer" ,"out_array_count": "punQuadsCount" ,"paramtype": "struct vr::HmdQuad_t *"},
+{ "paramname": "punQuadsCount" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "ExportLiveToBuffer",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pBuffer" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "pnBufferLength" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRChaperoneSetup",
+ "methodname": "ImportFromBufferToWorking",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pBuffer" ,"paramtype": "const char *"},
+{ "paramname": "nImportFlags" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "SetTrackingSpace",
+ "returntype": "void",
+ "params": [
+{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetTrackingSpace",
+ "returntype": "vr::ETrackingUniverseOrigin"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "WaitGetPoses",
+ "returntype": "vr::EVRCompositorError",
+ "params": [
+{ "paramname": "pRenderPoseArray" ,"array_count": "unRenderPoseArrayCount" ,"paramtype": "struct vr::TrackedDevicePose_t *"},
+{ "paramname": "unRenderPoseArrayCount" ,"paramtype": "uint32_t"},
+{ "paramname": "pGamePoseArray" ,"array_count": "unGamePoseArrayCount" ,"paramtype": "struct vr::TrackedDevicePose_t *"},
+{ "paramname": "unGamePoseArrayCount" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetLastPoses",
+ "returntype": "vr::EVRCompositorError",
+ "params": [
+{ "paramname": "pRenderPoseArray" ,"array_count": "unRenderPoseArrayCount" ,"paramtype": "struct vr::TrackedDevicePose_t *"},
+{ "paramname": "unRenderPoseArrayCount" ,"paramtype": "uint32_t"},
+{ "paramname": "pGamePoseArray" ,"array_count": "unGamePoseArrayCount" ,"paramtype": "struct vr::TrackedDevicePose_t *"},
+{ "paramname": "unGamePoseArrayCount" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetLastPoseForTrackedDeviceIndex",
+ "returntype": "vr::EVRCompositorError",
+ "params": [
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "pOutputPose" ,"paramtype": "struct vr::TrackedDevicePose_t *"},
+{ "paramname": "pOutputGamePose" ,"paramtype": "struct vr::TrackedDevicePose_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "Submit",
+ "returntype": "vr::EVRCompositorError",
+ "params": [
+{ "paramname": "eEye" ,"paramtype": "vr::EVREye"},
+{ "paramname": "pTexture" ,"paramtype": "const struct vr::Texture_t *"},
+{ "paramname": "pBounds" ,"paramtype": "const struct vr::VRTextureBounds_t *"},
+{ "paramname": "nSubmitFlags" ,"paramtype": "vr::EVRSubmitFlags"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "ClearLastSubmittedFrame",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "PostPresentHandoff",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetFrameTiming",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pTiming" ,"paramtype": "struct vr::Compositor_FrameTiming *"},
+{ "paramname": "unFramesAgo" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetFrameTimings",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pTiming" ,"paramtype": "struct vr::Compositor_FrameTiming *"},
+{ "paramname": "nFrames" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetFrameTimeRemaining",
+ "returntype": "float"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetCumulativeStats",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pStats" ,"paramtype": "struct vr::Compositor_CumulativeStats *"},
+{ "paramname": "nStatsSizeInBytes" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "FadeToColor",
+ "returntype": "void",
+ "params": [
+{ "paramname": "fSeconds" ,"paramtype": "float"},
+{ "paramname": "fRed" ,"paramtype": "float"},
+{ "paramname": "fGreen" ,"paramtype": "float"},
+{ "paramname": "fBlue" ,"paramtype": "float"},
+{ "paramname": "fAlpha" ,"paramtype": "float"},
+{ "paramname": "bBackground" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetCurrentFadeColor",
+ "returntype": "struct vr::HmdColor_t",
+ "params": [
+{ "paramname": "bBackground" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "FadeGrid",
+ "returntype": "void",
+ "params": [
+{ "paramname": "fSeconds" ,"paramtype": "float"},
+{ "paramname": "bFadeIn" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetCurrentGridAlpha",
+ "returntype": "float"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "SetSkyboxOverride",
+ "returntype": "vr::EVRCompositorError",
+ "params": [
+{ "paramname": "pTextures" ,"array_count": "unTextureCount" ,"paramtype": "const struct vr::Texture_t *"},
+{ "paramname": "unTextureCount" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "ClearSkyboxOverride",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "CompositorBringToFront",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "CompositorGoToBack",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "CompositorQuit",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "IsFullscreen",
+ "returntype": "bool"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetCurrentSceneFocusProcess",
+ "returntype": "uint32_t"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetLastFrameRenderer",
+ "returntype": "uint32_t"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "CanRenderScene",
+ "returntype": "bool"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "ShowMirrorWindow",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "HideMirrorWindow",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "IsMirrorWindowVisible",
+ "returntype": "bool"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "CompositorDumpImages",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "ShouldAppRenderWithLowResources",
+ "returntype": "bool"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "ForceInterleavedReprojectionOn",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bOverride" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "ForceReconnectProcess",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "SuspendRendering",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bSuspend" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetMirrorTextureD3D11",
+ "returntype": "vr::EVRCompositorError",
+ "params": [
+{ "paramname": "eEye" ,"paramtype": "vr::EVREye"},
+{ "paramname": "pD3D11DeviceOrResource" ,"paramtype": "void *"},
+{ "paramname": "ppD3D11ShaderResourceView" ,"paramtype": "void **"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "ReleaseMirrorTextureD3D11",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pD3D11ShaderResourceView" ,"paramtype": "void *"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetMirrorTextureGL",
+ "returntype": "vr::EVRCompositorError",
+ "params": [
+{ "paramname": "eEye" ,"paramtype": "vr::EVREye"},
+{ "paramname": "pglTextureId" ,"paramtype": "vr::glUInt_t *"},
+{ "paramname": "pglSharedTextureHandle" ,"paramtype": "vr::glSharedTextureHandle_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "ReleaseSharedGLTexture",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "glTextureId" ,"paramtype": "vr::glUInt_t"},
+{ "paramname": "glSharedTextureHandle" ,"paramtype": "vr::glSharedTextureHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "LockGLSharedTextureForAccess",
+ "returntype": "void",
+ "params": [
+{ "paramname": "glSharedTextureHandle" ,"paramtype": "vr::glSharedTextureHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "UnlockGLSharedTextureForAccess",
+ "returntype": "void",
+ "params": [
+{ "paramname": "glSharedTextureHandle" ,"paramtype": "vr::glSharedTextureHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetVulkanInstanceExtensionsRequired",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "GetVulkanDeviceExtensionsRequired",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pPhysicalDevice" ,"paramtype": "struct VkPhysicalDevice_T *"},
+{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "FindOverlay",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "pchOverlayKey" ,"paramtype": "const char *"},
+{ "paramname": "pOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "CreateOverlay",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "pchOverlayKey" ,"paramtype": "const char *"},
+{ "paramname": "pchOverlayName" ,"paramtype": "const char *"},
+{ "paramname": "pOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "DestroyOverlay",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetHighQualityOverlay",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetHighQualityOverlay",
+ "returntype": "vr::VROverlayHandle_t"
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayKey",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"},
+{ "paramname": "pError" ,"paramtype": "vr::EVROverlayError *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayName",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"},
+{ "paramname": "pError" ,"paramtype": "vr::EVROverlayError *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayName",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pchName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayImageData",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pvBuffer" ,"paramtype": "void *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"},
+{ "paramname": "punWidth" ,"paramtype": "uint32_t *"},
+{ "paramname": "punHeight" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayErrorNameFromEnum",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "error" ,"paramtype": "vr::EVROverlayError"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayRenderingPid",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "unPID" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayRenderingPid",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayFlag",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "eOverlayFlag" ,"paramtype": "vr::VROverlayFlags"},
+{ "paramname": "bEnabled" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayFlag",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "eOverlayFlag" ,"paramtype": "vr::VROverlayFlags"},
+{ "paramname": "pbEnabled" ,"paramtype": "bool *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayColor",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "fRed" ,"paramtype": "float"},
+{ "paramname": "fGreen" ,"paramtype": "float"},
+{ "paramname": "fBlue" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayColor",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pfRed" ,"paramtype": "float *"},
+{ "paramname": "pfGreen" ,"paramtype": "float *"},
+{ "paramname": "pfBlue" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayAlpha",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "fAlpha" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayAlpha",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pfAlpha" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayTexelAspect",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "fTexelAspect" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayTexelAspect",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pfTexelAspect" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlaySortOrder",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "unSortOrder" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlaySortOrder",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "punSortOrder" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayWidthInMeters",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "fWidthInMeters" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayWidthInMeters",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pfWidthInMeters" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayAutoCurveDistanceRangeInMeters",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "fMinDistanceInMeters" ,"paramtype": "float"},
+{ "paramname": "fMaxDistanceInMeters" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayAutoCurveDistanceRangeInMeters",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pfMinDistanceInMeters" ,"paramtype": "float *"},
+{ "paramname": "pfMaxDistanceInMeters" ,"paramtype": "float *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayTextureColorSpace",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "eTextureColorSpace" ,"paramtype": "vr::EColorSpace"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayTextureColorSpace",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "peTextureColorSpace" ,"paramtype": "vr::EColorSpace *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayTextureBounds",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pOverlayTextureBounds" ,"paramtype": "const struct vr::VRTextureBounds_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayTextureBounds",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pOverlayTextureBounds" ,"paramtype": "struct vr::VRTextureBounds_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayRenderModel",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pchValue" ,"paramtype": "char *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"},
+{ "paramname": "pColor" ,"paramtype": "struct vr::HmdColor_t *"},
+{ "paramname": "pError" ,"paramtype": "vr::EVROverlayError *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayRenderModel",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pchRenderModel" ,"paramtype": "const char *"},
+{ "paramname": "pColor" ,"paramtype": "const struct vr::HmdColor_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayTransformType",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "peTransformType" ,"paramtype": "vr::VROverlayTransformType *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayTransformAbsolute",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "eTrackingOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"},
+{ "paramname": "pmatTrackingOriginToOverlayTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayTransformAbsolute",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "peTrackingOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin *"},
+{ "paramname": "pmatTrackingOriginToOverlayTransform" ,"paramtype": "struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayTransformTrackedDeviceRelative",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "unTrackedDevice" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "pmatTrackedDeviceToOverlayTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayTransformTrackedDeviceRelative",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "punTrackedDevice" ,"paramtype": "vr::TrackedDeviceIndex_t *"},
+{ "paramname": "pmatTrackedDeviceToOverlayTransform" ,"paramtype": "struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayTransformTrackedDeviceComponent",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"},
+{ "paramname": "pchComponentName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayTransformTrackedDeviceComponent",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "punDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t *"},
+{ "paramname": "pchComponentName" ,"paramtype": "char *"},
+{ "paramname": "unComponentNameSize" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayTransformOverlayRelative",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "ulOverlayHandleParent" ,"paramtype": "vr::VROverlayHandle_t *"},
+{ "paramname": "pmatParentOverlayToOverlayTransform" ,"paramtype": "struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayTransformOverlayRelative",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "ulOverlayHandleParent" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pmatParentOverlayToOverlayTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "ShowOverlay",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "HideOverlay",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "IsOverlayVisible",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetTransformForOverlayCoordinates",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "eTrackingOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"},
+{ "paramname": "coordinatesInOverlay" ,"paramtype": "struct vr::HmdVector2_t"},
+{ "paramname": "pmatTransform" ,"paramtype": "struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "PollNextOverlayEvent",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pEvent" ,"paramtype": "struct vr::VREvent_t *"},
+{ "paramname": "uncbVREvent" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayInputMethod",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "peInputMethod" ,"paramtype": "vr::VROverlayInputMethod *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayInputMethod",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "eInputMethod" ,"paramtype": "vr::VROverlayInputMethod"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayMouseScale",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pvecMouseScale" ,"paramtype": "struct vr::HmdVector2_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayMouseScale",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pvecMouseScale" ,"paramtype": "const struct vr::HmdVector2_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "ComputeOverlayIntersection",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pParams" ,"paramtype": "const struct vr::VROverlayIntersectionParams_t *"},
+{ "paramname": "pResults" ,"paramtype": "struct vr::VROverlayIntersectionResults_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "HandleControllerOverlayInteractionAsMouse",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "unControllerDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "IsHoverTargetOverlay",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetGamepadFocusOverlay",
+ "returntype": "vr::VROverlayHandle_t"
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetGamepadFocusOverlay",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulNewFocusOverlay" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayNeighbor",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "eDirection" ,"paramtype": "vr::EOverlayDirection"},
+{ "paramname": "ulFrom" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "ulTo" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "MoveGamepadFocusToNeighbor",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "eDirection" ,"paramtype": "vr::EOverlayDirection"},
+{ "paramname": "ulFrom" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayTexture",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pTexture" ,"paramtype": "const struct vr::Texture_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "ClearOverlayTexture",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayRaw",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pvBuffer" ,"paramtype": "void *"},
+{ "paramname": "unWidth" ,"paramtype": "uint32_t"},
+{ "paramname": "unHeight" ,"paramtype": "uint32_t"},
+{ "paramname": "unDepth" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayFromFile",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pchFilePath" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayTexture",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pNativeTextureHandle" ,"paramtype": "void **"},
+{ "paramname": "pNativeTextureRef" ,"paramtype": "void *"},
+{ "paramname": "pWidth" ,"paramtype": "uint32_t *"},
+{ "paramname": "pHeight" ,"paramtype": "uint32_t *"},
+{ "paramname": "pNativeFormat" ,"paramtype": "uint32_t *"},
+{ "paramname": "pAPIType" ,"paramtype": "vr::ETextureType *"},
+{ "paramname": "pColorSpace" ,"paramtype": "vr::EColorSpace *"},
+{ "paramname": "pTextureBounds" ,"paramtype": "struct vr::VRTextureBounds_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "ReleaseNativeOverlayHandle",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pNativeTextureHandle" ,"paramtype": "void *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayTextureSize",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pWidth" ,"paramtype": "uint32_t *"},
+{ "paramname": "pHeight" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "CreateDashboardOverlay",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "pchOverlayKey" ,"paramtype": "const char *"},
+{ "paramname": "pchOverlayFriendlyName" ,"paramtype": "const char *"},
+{ "paramname": "pMainHandle" ,"paramtype": "vr::VROverlayHandle_t *"},
+{ "paramname": "pThumbnailHandle" ,"paramtype": "vr::VROverlayHandle_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "IsDashboardVisible",
+ "returntype": "bool"
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "IsActiveDashboardOverlay",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetDashboardOverlaySceneProcess",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "unProcessId" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetDashboardOverlaySceneProcess",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "punProcessId" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "ShowDashboard",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchOverlayToShow" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetPrimaryDashboardDevice",
+ "returntype": "vr::TrackedDeviceIndex_t"
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "ShowKeyboard",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "eInputMode" ,"paramtype": "vr::EGamepadTextInputMode"},
+{ "paramname": "eLineInputMode" ,"paramtype": "vr::EGamepadTextInputLineMode"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"},
+{ "paramname": "unCharMax" ,"paramtype": "uint32_t"},
+{ "paramname": "pchExistingText" ,"paramtype": "const char *"},
+{ "paramname": "bUseMinimalMode" ,"paramtype": "bool"},
+{ "paramname": "uUserValue" ,"paramtype": "uint64_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "ShowKeyboardForOverlay",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "eInputMode" ,"paramtype": "vr::EGamepadTextInputMode"},
+{ "paramname": "eLineInputMode" ,"paramtype": "vr::EGamepadTextInputLineMode"},
+{ "paramname": "pchDescription" ,"paramtype": "const char *"},
+{ "paramname": "unCharMax" ,"paramtype": "uint32_t"},
+{ "paramname": "pchExistingText" ,"paramtype": "const char *"},
+{ "paramname": "bUseMinimalMode" ,"paramtype": "bool"},
+{ "paramname": "uUserValue" ,"paramtype": "uint64_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetKeyboardText",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchText" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "cchText" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "HideKeyboard",
+ "returntype": "void"
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetKeyboardTransformAbsolute",
+ "returntype": "void",
+ "params": [
+{ "paramname": "eTrackingOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"},
+{ "paramname": "pmatTrackingOriginToKeyboardTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetKeyboardPositionForOverlay",
+ "returntype": "void",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "avoidRect" ,"paramtype": "struct vr::HmdRect2_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "SetOverlayIntersectionMask",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pMaskPrimitives" ,"paramtype": "struct vr::VROverlayIntersectionMaskPrimitive_t *"},
+{ "paramname": "unNumMaskPrimitives" ,"paramtype": "uint32_t"},
+{ "paramname": "unPrimitiveSize" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "GetOverlayFlags",
+ "returntype": "vr::EVROverlayError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "pFlags" ,"paramtype": "uint32_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVROverlay",
+ "methodname": "ShowMessageOverlay",
+ "returntype": "vr::VRMessageOverlayResponse",
+ "params": [
+{ "paramname": "pchText" ,"paramtype": "const char *"},
+{ "paramname": "pchCaption" ,"paramtype": "const char *"},
+{ "paramname": "pchButton0Text" ,"paramtype": "const char *"},
+{ "paramname": "pchButton1Text" ,"paramtype": "const char *"},
+{ "paramname": "pchButton2Text" ,"paramtype": "const char *"},
+{ "paramname": "pchButton3Text" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "LoadRenderModel_Async",
+ "returntype": "vr::EVRRenderModelError",
+ "params": [
+{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"},
+{ "paramname": "ppRenderModel" ,"paramtype": "struct vr::RenderModel_t **"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "FreeRenderModel",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pRenderModel" ,"paramtype": "struct vr::RenderModel_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "LoadTexture_Async",
+ "returntype": "vr::EVRRenderModelError",
+ "params": [
+{ "paramname": "textureId" ,"paramtype": "vr::TextureID_t"},
+{ "paramname": "ppTexture" ,"paramtype": "struct vr::RenderModel_TextureMap_t **"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "FreeTexture",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pTexture" ,"paramtype": "struct vr::RenderModel_TextureMap_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "LoadTextureD3D11_Async",
+ "returntype": "vr::EVRRenderModelError",
+ "params": [
+{ "paramname": "textureId" ,"paramtype": "vr::TextureID_t"},
+{ "paramname": "pD3D11Device" ,"paramtype": "void *"},
+{ "paramname": "ppD3D11Texture2D" ,"paramtype": "void **"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "LoadIntoTextureD3D11_Async",
+ "returntype": "vr::EVRRenderModelError",
+ "params": [
+{ "paramname": "textureId" ,"paramtype": "vr::TextureID_t"},
+{ "paramname": "pDstTexture" ,"paramtype": "void *"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "FreeTextureD3D11",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pD3D11Texture2D" ,"paramtype": "void *"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "GetRenderModelName",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "unRenderModelIndex" ,"paramtype": "uint32_t"},
+{ "paramname": "pchRenderModelName" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unRenderModelNameLen" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "GetRenderModelCount",
+ "returntype": "uint32_t"
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "GetComponentCount",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "GetComponentName",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"},
+{ "paramname": "unComponentIndex" ,"paramtype": "uint32_t"},
+{ "paramname": "pchComponentName" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unComponentNameLen" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "GetComponentButtonMask",
+ "returntype": "uint64_t",
+ "params": [
+{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"},
+{ "paramname": "pchComponentName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "GetComponentRenderModelName",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"},
+{ "paramname": "pchComponentName" ,"paramtype": "const char *"},
+{ "paramname": "pchComponentRenderModelName" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unComponentRenderModelNameLen" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "GetComponentState",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"},
+{ "paramname": "pchComponentName" ,"paramtype": "const char *"},
+{ "paramname": "pControllerState" ,"paramtype": "const vr::VRControllerState_t *"},
+{ "paramname": "pState" ,"paramtype": "const struct vr::RenderModel_ControllerMode_State_t *"},
+{ "paramname": "pComponentState" ,"paramtype": "struct vr::RenderModel_ComponentState_t *"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "RenderModelHasComponent",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"},
+{ "paramname": "pchComponentName" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "GetRenderModelThumbnailURL",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"},
+{ "paramname": "pchThumbnailURL" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unThumbnailURLLen" ,"paramtype": "uint32_t"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRRenderModelError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "GetRenderModelOriginalPath",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"},
+{ "paramname": "pchOriginalPath" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unOriginalPathLen" ,"paramtype": "uint32_t"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRRenderModelError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRRenderModels",
+ "methodname": "GetRenderModelErrorNameFromEnum",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "error" ,"paramtype": "vr::EVRRenderModelError"}
+ ]
+}
+,{
+ "classname": "vr::IVRNotifications",
+ "methodname": "CreateNotification",
+ "returntype": "vr::EVRNotificationError",
+ "params": [
+{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"},
+{ "paramname": "ulUserValue" ,"paramtype": "uint64_t"},
+{ "paramname": "type" ,"paramtype": "vr::EVRNotificationType"},
+{ "paramname": "pchText" ,"paramtype": "const char *"},
+{ "paramname": "style" ,"paramtype": "vr::EVRNotificationStyle"},
+{ "paramname": "pImage" ,"paramtype": "const struct vr::NotificationBitmap_t *"},
+{ "paramname": "pNotificationId" ,"paramtype": "vr::VRNotificationId *"}
+ ]
+}
+,{
+ "classname": "vr::IVRNotifications",
+ "methodname": "RemoveNotification",
+ "returntype": "vr::EVRNotificationError",
+ "params": [
+{ "paramname": "notificationId" ,"paramtype": "vr::VRNotificationId"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "GetSettingsErrorNameFromEnum",
+ "returntype": "const char *",
+ "params": [
+{ "paramname": "eError" ,"paramtype": "vr::EVRSettingsError"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "Sync",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "bForce" ,"paramtype": "bool"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "SetBool",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchSection" ,"paramtype": "const char *"},
+{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"},
+{ "paramname": "bValue" ,"paramtype": "bool"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "SetInt32",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchSection" ,"paramtype": "const char *"},
+{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"},
+{ "paramname": "nValue" ,"paramtype": "int32_t"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "SetFloat",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchSection" ,"paramtype": "const char *"},
+{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"},
+{ "paramname": "flValue" ,"paramtype": "float"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "SetString",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchSection" ,"paramtype": "const char *"},
+{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"paramtype": "const char *"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "GetBool",
+ "returntype": "bool",
+ "params": [
+{ "paramname": "pchSection" ,"paramtype": "const char *"},
+{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "GetInt32",
+ "returntype": "int32_t",
+ "params": [
+{ "paramname": "pchSection" ,"paramtype": "const char *"},
+{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "GetFloat",
+ "returntype": "float",
+ "params": [
+{ "paramname": "pchSection" ,"paramtype": "const char *"},
+{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "GetString",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchSection" ,"paramtype": "const char *"},
+{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"},
+{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unValueLen" ,"paramtype": "uint32_t"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "RemoveSection",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchSection" ,"paramtype": "const char *"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRSettings",
+ "methodname": "RemoveKeyInSection",
+ "returntype": "void",
+ "params": [
+{ "paramname": "pchSection" ,"paramtype": "const char *"},
+{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"},
+{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRScreenshots",
+ "methodname": "RequestScreenshot",
+ "returntype": "vr::EVRScreenshotError",
+ "params": [
+{ "paramname": "pOutScreenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t *"},
+{ "paramname": "type" ,"paramtype": "vr::EVRScreenshotType"},
+{ "paramname": "pchPreviewFilename" ,"paramtype": "const char *"},
+{ "paramname": "pchVRFilename" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRScreenshots",
+ "methodname": "HookScreenshot",
+ "returntype": "vr::EVRScreenshotError",
+ "params": [
+{ "paramname": "pSupportedTypes" ,"array_count": "numTypes" ,"paramtype": "const vr::EVRScreenshotType *"},
+{ "paramname": "numTypes" ,"paramtype": "int"}
+ ]
+}
+,{
+ "classname": "vr::IVRScreenshots",
+ "methodname": "GetScreenshotPropertyType",
+ "returntype": "vr::EVRScreenshotType",
+ "params": [
+{ "paramname": "screenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t"},
+{ "paramname": "pError" ,"paramtype": "vr::EVRScreenshotError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRScreenshots",
+ "methodname": "GetScreenshotPropertyFilename",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "screenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t"},
+{ "paramname": "filenameType" ,"paramtype": "vr::EVRScreenshotPropertyFilenames"},
+{ "paramname": "pchFilename" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "cchFilename" ,"paramtype": "uint32_t"},
+{ "paramname": "pError" ,"paramtype": "vr::EVRScreenshotError *"}
+ ]
+}
+,{
+ "classname": "vr::IVRScreenshots",
+ "methodname": "UpdateScreenshotProgress",
+ "returntype": "vr::EVRScreenshotError",
+ "params": [
+{ "paramname": "screenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t"},
+{ "paramname": "flProgress" ,"paramtype": "float"}
+ ]
+}
+,{
+ "classname": "vr::IVRScreenshots",
+ "methodname": "TakeStereoScreenshot",
+ "returntype": "vr::EVRScreenshotError",
+ "params": [
+{ "paramname": "pOutScreenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t *"},
+{ "paramname": "pchPreviewFilename" ,"paramtype": "const char *"},
+{ "paramname": "pchVRFilename" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRScreenshots",
+ "methodname": "SubmitScreenshot",
+ "returntype": "vr::EVRScreenshotError",
+ "params": [
+{ "paramname": "screenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t"},
+{ "paramname": "type" ,"paramtype": "vr::EVRScreenshotType"},
+{ "paramname": "pchSourcePreviewFilename" ,"paramtype": "const char *"},
+{ "paramname": "pchSourceVRFilename" ,"paramtype": "const char *"}
+ ]
+}
+,{
+ "classname": "vr::IVRResources",
+ "methodname": "LoadSharedResource",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchResourceName" ,"paramtype": "const char *"},
+{ "paramname": "pchBuffer" ,"paramtype": "char *"},
+{ "paramname": "unBufferLen" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRResources",
+ "methodname": "GetResourceFullPath",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchResourceName" ,"paramtype": "const char *"},
+{ "paramname": "pchResourceTypeDirectory" ,"paramtype": "const char *"},
+{ "paramname": "pchPathBuffer" ,"paramtype": "char *"},
+{ "paramname": "unBufferLen" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRDriverManager",
+ "methodname": "GetDriverCount",
+ "returntype": "uint32_t"
+}
+,{
+ "classname": "vr::IVRDriverManager",
+ "methodname": "GetDriverName",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "nDriver" ,"paramtype": "vr::DriverId_t"},
+{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"}
+ ]
+}
+]
+} \ No newline at end of file
diff --git a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_capi.h b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_capi.h
new file mode 100644
index 0000000..a6685e5
--- /dev/null
+++ b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_capi.h
@@ -0,0 +1,1918 @@
+//======= Copyright (c) Valve Corporation, All rights reserved. ===============
+//
+// Purpose: Header for flatted SteamAPI. Use this for binding to other languages.
+// This file is auto-generated, do not edit it.
+//
+//=============================================================================
+
+#ifndef __OPENVR_API_FLAT_H__
+#define __OPENVR_API_FLAT_H__
+#if defined( _WIN32 ) || defined( __clang__ )
+#pragma once
+#endif
+
+#ifdef __cplusplus
+#define EXTERN_C extern "C"
+#else
+#define EXTERN_C
+#endif
+
+#if defined( _WIN32 )
+#define OPENVR_FNTABLE_CALLTYPE __stdcall
+#else
+#define OPENVR_FNTABLE_CALLTYPE
+#endif
+
+// OPENVR API export macro
+#if defined( _WIN32 ) && !defined( _X360 )
+ #if defined( OPENVR_API_EXPORTS )
+ #define S_API EXTERN_C __declspec( dllexport )
+ #elif defined( OPENVR_API_NODLL )
+ #define S_API EXTERN_C
+ #else
+ #define S_API extern "C" __declspec( dllimport )
+ #endif // OPENVR_API_EXPORTS
+#elif defined( __GNUC__ )
+ #if defined( OPENVR_API_EXPORTS )
+ #define S_API EXTERN_C __attribute__ ((visibility("default")))
+ #else
+ #define S_API EXTERN_C
+ #endif // OPENVR_API_EXPORTS
+#else // !WIN32
+ #if defined( OPENVR_API_EXPORTS )
+ #define S_API EXTERN_C
+ #else
+ #define S_API EXTERN_C
+ #endif // OPENVR_API_EXPORTS
+#endif
+
+#include <stdint.h>
+
+#if defined( __WIN32 )
+typedef char bool;
+#else
+#include <stdbool.h>
+#endif
+
+typedef uint64_t PropertyContainerHandle_t;
+typedef uint32_t PropertyTypeTag_t;
+
+
+// OpenVR Constants
+
+static const unsigned int k_nDriverNone = 4294967295;
+static const unsigned int k_unMaxDriverDebugResponseSize = 32768;
+static const unsigned int k_unTrackedDeviceIndex_Hmd = 0;
+static const unsigned int k_unMaxTrackedDeviceCount = 16;
+static const unsigned int k_unTrackedDeviceIndexOther = 4294967294;
+static const unsigned int k_unTrackedDeviceIndexInvalid = 4294967295;
+static const unsigned long k_ulInvalidPropertyContainer = 0;
+static const unsigned int k_unInvalidPropertyTag = 0;
+static const unsigned int k_unFloatPropertyTag = 1;
+static const unsigned int k_unInt32PropertyTag = 2;
+static const unsigned int k_unUint64PropertyTag = 3;
+static const unsigned int k_unBoolPropertyTag = 4;
+static const unsigned int k_unStringPropertyTag = 5;
+static const unsigned int k_unHmdMatrix34PropertyTag = 20;
+static const unsigned int k_unHmdMatrix44PropertyTag = 21;
+static const unsigned int k_unHmdVector3PropertyTag = 22;
+static const unsigned int k_unHmdVector4PropertyTag = 23;
+static const unsigned int k_unHiddenAreaPropertyTag = 30;
+static const unsigned int k_unOpenVRInternalReserved_Start = 1000;
+static const unsigned int k_unOpenVRInternalReserved_End = 10000;
+static const unsigned int k_unMaxPropertyStringSize = 32768;
+static const unsigned int k_unControllerStateAxisCount = 5;
+static const unsigned long k_ulOverlayHandleInvalid = 0;
+static const unsigned int k_unScreenshotHandleInvalid = 0;
+static const char * IVRSystem_Version = "IVRSystem_016";
+static const char * IVRExtendedDisplay_Version = "IVRExtendedDisplay_001";
+static const char * IVRTrackedCamera_Version = "IVRTrackedCamera_003";
+static const unsigned int k_unMaxApplicationKeyLength = 128;
+static const char * k_pch_MimeType_HomeApp = "vr/home";
+static const char * k_pch_MimeType_GameTheater = "vr/game_theater";
+static const char * IVRApplications_Version = "IVRApplications_006";
+static const char * IVRChaperone_Version = "IVRChaperone_003";
+static const char * IVRChaperoneSetup_Version = "IVRChaperoneSetup_005";
+static const char * IVRCompositor_Version = "IVRCompositor_020";
+static const unsigned int k_unVROverlayMaxKeyLength = 128;
+static const unsigned int k_unVROverlayMaxNameLength = 128;
+static const unsigned int k_unMaxOverlayCount = 64;
+static const unsigned int k_unMaxOverlayIntersectionMaskPrimitivesCount = 32;
+static const char * IVROverlay_Version = "IVROverlay_016";
+static const char * k_pch_Controller_Component_GDC2015 = "gdc2015";
+static const char * k_pch_Controller_Component_Base = "base";
+static const char * k_pch_Controller_Component_Tip = "tip";
+static const char * k_pch_Controller_Component_HandGrip = "handgrip";
+static const char * k_pch_Controller_Component_Status = "status";
+static const char * IVRRenderModels_Version = "IVRRenderModels_005";
+static const unsigned int k_unNotificationTextMaxSize = 256;
+static const char * IVRNotifications_Version = "IVRNotifications_002";
+static const unsigned int k_unMaxSettingsKeyLength = 128;
+static const char * IVRSettings_Version = "IVRSettings_002";
+static const char * k_pch_SteamVR_Section = "steamvr";
+static const char * k_pch_SteamVR_RequireHmd_String = "requireHmd";
+static const char * k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver";
+static const char * k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd";
+static const char * k_pch_SteamVR_DisplayDebug_Bool = "displayDebug";
+static const char * k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe";
+static const char * k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX";
+static const char * k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY";
+static const char * k_pch_SteamVR_SendSystemButtonToAllApps_Bool = "sendSystemButtonToAllApps";
+static const char * k_pch_SteamVR_LogLevel_Int32 = "loglevel";
+static const char * k_pch_SteamVR_IPD_Float = "ipd";
+static const char * k_pch_SteamVR_Background_String = "background";
+static const char * k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection";
+static const char * k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight";
+static const char * k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius";
+static const char * k_pch_SteamVR_GridColor_String = "gridColor";
+static const char * k_pch_SteamVR_PlayAreaColor_String = "playAreaColor";
+static const char * k_pch_SteamVR_ShowStage_Bool = "showStage";
+static const char * k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers";
+static const char * k_pch_SteamVR_DirectMode_Bool = "directMode";
+static const char * k_pch_SteamVR_DirectModeEdidVid_Int32 = "directModeEdidVid";
+static const char * k_pch_SteamVR_DirectModeEdidPid_Int32 = "directModeEdidPid";
+static const char * k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers";
+static const char * k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees";
+static const char * k_pch_SteamVR_BaseStationPowerManagement_Bool = "basestationPowerManagement";
+static const char * k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses";
+static const char * k_pch_SteamVR_SupersampleScale_Float = "supersampleScale";
+static const char * k_pch_SteamVR_AllowAsyncReprojection_Bool = "allowAsyncReprojection";
+static const char * k_pch_SteamVR_AllowReprojection_Bool = "allowInterleavedReprojection";
+static const char * k_pch_SteamVR_ForceReprojection_Bool = "forceReprojection";
+static const char * k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking";
+static const char * k_pch_SteamVR_DefaultMirrorView_Int32 = "defaultMirrorView";
+static const char * k_pch_SteamVR_ShowMirrorView_Bool = "showMirrorView";
+static const char * k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry";
+static const char * k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch";
+static const char * k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch";
+static const char * k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch";
+static const char * k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard";
+static const char * k_pch_SteamVR_EnableHomeApp = "enableHomeApp";
+static const char * k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec";
+static const char * k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
+static const char * k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
+static const char * k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+static const char * k_pch_Lighthouse_Section = "driver_lighthouse";
+static const char * k_pch_Lighthouse_DisableIMU_Bool = "disableimu";
+static const char * k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation";
+static const char * k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug";
+static const char * k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation";
+static const char * k_pch_Lighthouse_DBHistory_Bool = "dbhistory";
+static const char * k_pch_Null_Section = "driver_null";
+static const char * k_pch_Null_SerialNumber_String = "serialNumber";
+static const char * k_pch_Null_ModelNumber_String = "modelNumber";
+static const char * k_pch_Null_WindowX_Int32 = "windowX";
+static const char * k_pch_Null_WindowY_Int32 = "windowY";
+static const char * k_pch_Null_WindowWidth_Int32 = "windowWidth";
+static const char * k_pch_Null_WindowHeight_Int32 = "windowHeight";
+static const char * k_pch_Null_RenderWidth_Int32 = "renderWidth";
+static const char * k_pch_Null_RenderHeight_Int32 = "renderHeight";
+static const char * k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons";
+static const char * k_pch_Null_DisplayFrequency_Float = "displayFrequency";
+static const char * k_pch_UserInterface_Section = "userinterface";
+static const char * k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop";
+static const char * k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray";
+static const char * k_pch_UserInterface_Screenshots_Bool = "screenshots";
+static const char * k_pch_UserInterface_ScreenshotType_Int = "screenshotType";
+static const char * k_pch_Notifications_Section = "notifications";
+static const char * k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb";
+static const char * k_pch_Keyboard_Section = "keyboard";
+static const char * k_pch_Keyboard_TutorialCompletions = "TutorialCompletions";
+static const char * k_pch_Keyboard_ScaleX = "ScaleX";
+static const char * k_pch_Keyboard_ScaleY = "ScaleY";
+static const char * k_pch_Keyboard_OffsetLeftX = "OffsetLeftX";
+static const char * k_pch_Keyboard_OffsetRightX = "OffsetRightX";
+static const char * k_pch_Keyboard_OffsetY = "OffsetY";
+static const char * k_pch_Keyboard_Smoothing = "Smoothing";
+static const char * k_pch_Perf_Section = "perfcheck";
+static const char * k_pch_Perf_HeuristicActive_Bool = "heuristicActive";
+static const char * k_pch_Perf_NotifyInHMD_Bool = "warnInHMD";
+static const char * k_pch_Perf_NotifyOnlyOnce_Bool = "warnOnlyOnce";
+static const char * k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore";
+static const char * k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit";
+static const char * k_pch_Perf_TestData_Float = "perfTestData";
+static const char * k_pch_Perf_LinuxGPUProfiling_Bool = "linuxGPUProfiling";
+static const char * k_pch_CollisionBounds_Section = "collisionBounds";
+static const char * k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle";
+static const char * k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn";
+static const char * k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn";
+static const char * k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn";
+static const char * k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance";
+static const char * k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR";
+static const char * k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG";
+static const char * k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB";
+static const char * k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA";
+static const char * k_pch_Camera_Section = "camera";
+static const char * k_pch_Camera_EnableCamera_Bool = "enableCamera";
+static const char * k_pch_Camera_EnableCameraInDashboard_Bool = "enableCameraInDashboard";
+static const char * k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds";
+static const char * k_pch_Camera_EnableCameraForRoomView_Bool = "enableCameraForRoomView";
+static const char * k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR";
+static const char * k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG";
+static const char * k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB";
+static const char * k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA";
+static const char * k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength";
+static const char * k_pch_audio_Section = "audio";
+static const char * k_pch_audio_OnPlaybackDevice_String = "onPlaybackDevice";
+static const char * k_pch_audio_OnRecordDevice_String = "onRecordDevice";
+static const char * k_pch_audio_OnPlaybackMirrorDevice_String = "onPlaybackMirrorDevice";
+static const char * k_pch_audio_OffPlaybackDevice_String = "offPlaybackDevice";
+static const char * k_pch_audio_OffRecordDevice_String = "offRecordDevice";
+static const char * k_pch_audio_VIVEHDMIGain = "viveHDMIGain";
+static const char * k_pch_Power_Section = "power";
+static const char * k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit";
+static const char * k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout";
+static const char * k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout";
+static const char * k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout";
+static const char * k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress";
+static const char * k_pch_Dashboard_Section = "dashboard";
+static const char * k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard";
+static const char * k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode";
+static const char * k_pch_modelskin_Section = "modelskins";
+static const char * k_pch_Driver_Enable_Bool = "enable";
+static const char * IVRScreenshots_Version = "IVRScreenshots_001";
+static const char * IVRResources_Version = "IVRResources_001";
+static const char * IVRDriverManager_Version = "IVRDriverManager_001";
+
+// OpenVR Enums
+
+typedef enum EVREye
+{
+ EVREye_Eye_Left = 0,
+ EVREye_Eye_Right = 1,
+} EVREye;
+
+typedef enum ETextureType
+{
+ ETextureType_TextureType_DirectX = 0,
+ ETextureType_TextureType_OpenGL = 1,
+ ETextureType_TextureType_Vulkan = 2,
+ ETextureType_TextureType_IOSurface = 3,
+ ETextureType_TextureType_DirectX12 = 4,
+} ETextureType;
+
+typedef enum EColorSpace
+{
+ EColorSpace_ColorSpace_Auto = 0,
+ EColorSpace_ColorSpace_Gamma = 1,
+ EColorSpace_ColorSpace_Linear = 2,
+} EColorSpace;
+
+typedef enum ETrackingResult
+{
+ ETrackingResult_TrackingResult_Uninitialized = 1,
+ ETrackingResult_TrackingResult_Calibrating_InProgress = 100,
+ ETrackingResult_TrackingResult_Calibrating_OutOfRange = 101,
+ ETrackingResult_TrackingResult_Running_OK = 200,
+ ETrackingResult_TrackingResult_Running_OutOfRange = 201,
+} ETrackingResult;
+
+typedef enum ETrackedDeviceClass
+{
+ ETrackedDeviceClass_TrackedDeviceClass_Invalid = 0,
+ ETrackedDeviceClass_TrackedDeviceClass_HMD = 1,
+ ETrackedDeviceClass_TrackedDeviceClass_Controller = 2,
+ ETrackedDeviceClass_TrackedDeviceClass_GenericTracker = 3,
+ ETrackedDeviceClass_TrackedDeviceClass_TrackingReference = 4,
+ ETrackedDeviceClass_TrackedDeviceClass_DisplayRedirect = 5,
+} ETrackedDeviceClass;
+
+typedef enum ETrackedControllerRole
+{
+ ETrackedControllerRole_TrackedControllerRole_Invalid = 0,
+ ETrackedControllerRole_TrackedControllerRole_LeftHand = 1,
+ ETrackedControllerRole_TrackedControllerRole_RightHand = 2,
+} ETrackedControllerRole;
+
+typedef enum ETrackingUniverseOrigin
+{
+ ETrackingUniverseOrigin_TrackingUniverseSeated = 0,
+ ETrackingUniverseOrigin_TrackingUniverseStanding = 1,
+ ETrackingUniverseOrigin_TrackingUniverseRawAndUncalibrated = 2,
+} ETrackingUniverseOrigin;
+
+typedef enum ETrackedDeviceProperty
+{
+ ETrackedDeviceProperty_Prop_Invalid = 0,
+ ETrackedDeviceProperty_Prop_TrackingSystemName_String = 1000,
+ ETrackedDeviceProperty_Prop_ModelNumber_String = 1001,
+ ETrackedDeviceProperty_Prop_SerialNumber_String = 1002,
+ ETrackedDeviceProperty_Prop_RenderModelName_String = 1003,
+ ETrackedDeviceProperty_Prop_WillDriftInYaw_Bool = 1004,
+ ETrackedDeviceProperty_Prop_ManufacturerName_String = 1005,
+ ETrackedDeviceProperty_Prop_TrackingFirmwareVersion_String = 1006,
+ ETrackedDeviceProperty_Prop_HardwareRevision_String = 1007,
+ ETrackedDeviceProperty_Prop_AllWirelessDongleDescriptions_String = 1008,
+ ETrackedDeviceProperty_Prop_ConnectedWirelessDongle_String = 1009,
+ ETrackedDeviceProperty_Prop_DeviceIsWireless_Bool = 1010,
+ ETrackedDeviceProperty_Prop_DeviceIsCharging_Bool = 1011,
+ ETrackedDeviceProperty_Prop_DeviceBatteryPercentage_Float = 1012,
+ ETrackedDeviceProperty_Prop_StatusDisplayTransform_Matrix34 = 1013,
+ ETrackedDeviceProperty_Prop_Firmware_UpdateAvailable_Bool = 1014,
+ ETrackedDeviceProperty_Prop_Firmware_ManualUpdate_Bool = 1015,
+ ETrackedDeviceProperty_Prop_Firmware_ManualUpdateURL_String = 1016,
+ ETrackedDeviceProperty_Prop_HardwareRevision_Uint64 = 1017,
+ ETrackedDeviceProperty_Prop_FirmwareVersion_Uint64 = 1018,
+ ETrackedDeviceProperty_Prop_FPGAVersion_Uint64 = 1019,
+ ETrackedDeviceProperty_Prop_VRCVersion_Uint64 = 1020,
+ ETrackedDeviceProperty_Prop_RadioVersion_Uint64 = 1021,
+ ETrackedDeviceProperty_Prop_DongleVersion_Uint64 = 1022,
+ ETrackedDeviceProperty_Prop_BlockServerShutdown_Bool = 1023,
+ ETrackedDeviceProperty_Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024,
+ ETrackedDeviceProperty_Prop_ContainsProximitySensor_Bool = 1025,
+ ETrackedDeviceProperty_Prop_DeviceProvidesBatteryStatus_Bool = 1026,
+ ETrackedDeviceProperty_Prop_DeviceCanPowerOff_Bool = 1027,
+ ETrackedDeviceProperty_Prop_Firmware_ProgrammingTarget_String = 1028,
+ ETrackedDeviceProperty_Prop_DeviceClass_Int32 = 1029,
+ ETrackedDeviceProperty_Prop_HasCamera_Bool = 1030,
+ ETrackedDeviceProperty_Prop_DriverVersion_String = 1031,
+ ETrackedDeviceProperty_Prop_Firmware_ForceUpdateRequired_Bool = 1032,
+ ETrackedDeviceProperty_Prop_ViveSystemButtonFixRequired_Bool = 1033,
+ ETrackedDeviceProperty_Prop_ParentDriver_Uint64 = 1034,
+ ETrackedDeviceProperty_Prop_ResourceRoot_String = 1035,
+ ETrackedDeviceProperty_Prop_ReportsTimeSinceVSync_Bool = 2000,
+ ETrackedDeviceProperty_Prop_SecondsFromVsyncToPhotons_Float = 2001,
+ ETrackedDeviceProperty_Prop_DisplayFrequency_Float = 2002,
+ ETrackedDeviceProperty_Prop_UserIpdMeters_Float = 2003,
+ ETrackedDeviceProperty_Prop_CurrentUniverseId_Uint64 = 2004,
+ ETrackedDeviceProperty_Prop_PreviousUniverseId_Uint64 = 2005,
+ ETrackedDeviceProperty_Prop_DisplayFirmwareVersion_Uint64 = 2006,
+ ETrackedDeviceProperty_Prop_IsOnDesktop_Bool = 2007,
+ ETrackedDeviceProperty_Prop_DisplayMCType_Int32 = 2008,
+ ETrackedDeviceProperty_Prop_DisplayMCOffset_Float = 2009,
+ ETrackedDeviceProperty_Prop_DisplayMCScale_Float = 2010,
+ ETrackedDeviceProperty_Prop_EdidVendorID_Int32 = 2011,
+ ETrackedDeviceProperty_Prop_DisplayMCImageLeft_String = 2012,
+ ETrackedDeviceProperty_Prop_DisplayMCImageRight_String = 2013,
+ ETrackedDeviceProperty_Prop_DisplayGCBlackClamp_Float = 2014,
+ ETrackedDeviceProperty_Prop_EdidProductID_Int32 = 2015,
+ ETrackedDeviceProperty_Prop_CameraToHeadTransform_Matrix34 = 2016,
+ ETrackedDeviceProperty_Prop_DisplayGCType_Int32 = 2017,
+ ETrackedDeviceProperty_Prop_DisplayGCOffset_Float = 2018,
+ ETrackedDeviceProperty_Prop_DisplayGCScale_Float = 2019,
+ ETrackedDeviceProperty_Prop_DisplayGCPrescale_Float = 2020,
+ ETrackedDeviceProperty_Prop_DisplayGCImage_String = 2021,
+ ETrackedDeviceProperty_Prop_LensCenterLeftU_Float = 2022,
+ ETrackedDeviceProperty_Prop_LensCenterLeftV_Float = 2023,
+ ETrackedDeviceProperty_Prop_LensCenterRightU_Float = 2024,
+ ETrackedDeviceProperty_Prop_LensCenterRightV_Float = 2025,
+ ETrackedDeviceProperty_Prop_UserHeadToEyeDepthMeters_Float = 2026,
+ ETrackedDeviceProperty_Prop_CameraFirmwareVersion_Uint64 = 2027,
+ ETrackedDeviceProperty_Prop_CameraFirmwareDescription_String = 2028,
+ ETrackedDeviceProperty_Prop_DisplayFPGAVersion_Uint64 = 2029,
+ ETrackedDeviceProperty_Prop_DisplayBootloaderVersion_Uint64 = 2030,
+ ETrackedDeviceProperty_Prop_DisplayHardwareVersion_Uint64 = 2031,
+ ETrackedDeviceProperty_Prop_AudioFirmwareVersion_Uint64 = 2032,
+ ETrackedDeviceProperty_Prop_CameraCompatibilityMode_Int32 = 2033,
+ ETrackedDeviceProperty_Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034,
+ ETrackedDeviceProperty_Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035,
+ ETrackedDeviceProperty_Prop_DisplaySuppressed_Bool = 2036,
+ ETrackedDeviceProperty_Prop_DisplayAllowNightMode_Bool = 2037,
+ ETrackedDeviceProperty_Prop_DisplayMCImageWidth_Int32 = 2038,
+ ETrackedDeviceProperty_Prop_DisplayMCImageHeight_Int32 = 2039,
+ ETrackedDeviceProperty_Prop_DisplayMCImageNumChannels_Int32 = 2040,
+ ETrackedDeviceProperty_Prop_DisplayMCImageData_Binary = 2041,
+ ETrackedDeviceProperty_Prop_SecondsFromPhotonsToVblank_Float = 2042,
+ ETrackedDeviceProperty_Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043,
+ ETrackedDeviceProperty_Prop_DisplayDebugMode_Bool = 2044,
+ ETrackedDeviceProperty_Prop_GraphicsAdapterLuid_Uint64 = 2045,
+ ETrackedDeviceProperty_Prop_AttachedDeviceId_String = 3000,
+ ETrackedDeviceProperty_Prop_SupportedButtons_Uint64 = 3001,
+ ETrackedDeviceProperty_Prop_Axis0Type_Int32 = 3002,
+ ETrackedDeviceProperty_Prop_Axis1Type_Int32 = 3003,
+ ETrackedDeviceProperty_Prop_Axis2Type_Int32 = 3004,
+ ETrackedDeviceProperty_Prop_Axis3Type_Int32 = 3005,
+ ETrackedDeviceProperty_Prop_Axis4Type_Int32 = 3006,
+ ETrackedDeviceProperty_Prop_ControllerRoleHint_Int32 = 3007,
+ ETrackedDeviceProperty_Prop_FieldOfViewLeftDegrees_Float = 4000,
+ ETrackedDeviceProperty_Prop_FieldOfViewRightDegrees_Float = 4001,
+ ETrackedDeviceProperty_Prop_FieldOfViewTopDegrees_Float = 4002,
+ ETrackedDeviceProperty_Prop_FieldOfViewBottomDegrees_Float = 4003,
+ ETrackedDeviceProperty_Prop_TrackingRangeMinimumMeters_Float = 4004,
+ ETrackedDeviceProperty_Prop_TrackingRangeMaximumMeters_Float = 4005,
+ ETrackedDeviceProperty_Prop_ModeLabel_String = 4006,
+ ETrackedDeviceProperty_Prop_IconPathName_String = 5000,
+ ETrackedDeviceProperty_Prop_NamedIconPathDeviceOff_String = 5001,
+ ETrackedDeviceProperty_Prop_NamedIconPathDeviceSearching_String = 5002,
+ ETrackedDeviceProperty_Prop_NamedIconPathDeviceSearchingAlert_String = 5003,
+ ETrackedDeviceProperty_Prop_NamedIconPathDeviceReady_String = 5004,
+ ETrackedDeviceProperty_Prop_NamedIconPathDeviceReadyAlert_String = 5005,
+ ETrackedDeviceProperty_Prop_NamedIconPathDeviceNotReady_String = 5006,
+ ETrackedDeviceProperty_Prop_NamedIconPathDeviceStandby_String = 5007,
+ ETrackedDeviceProperty_Prop_NamedIconPathDeviceAlertLow_String = 5008,
+ ETrackedDeviceProperty_Prop_DisplayHiddenArea_Binary_Start = 5100,
+ ETrackedDeviceProperty_Prop_DisplayHiddenArea_Binary_End = 5150,
+ ETrackedDeviceProperty_Prop_UserConfigPath_String = 6000,
+ ETrackedDeviceProperty_Prop_InstallPath_String = 6001,
+ ETrackedDeviceProperty_Prop_HasDisplayComponent_Bool = 6002,
+ ETrackedDeviceProperty_Prop_HasControllerComponent_Bool = 6003,
+ ETrackedDeviceProperty_Prop_HasCameraComponent_Bool = 6004,
+ ETrackedDeviceProperty_Prop_HasDriverDirectModeComponent_Bool = 6005,
+ ETrackedDeviceProperty_Prop_HasVirtualDisplayComponent_Bool = 6006,
+ ETrackedDeviceProperty_Prop_VendorSpecific_Reserved_Start = 10000,
+ ETrackedDeviceProperty_Prop_VendorSpecific_Reserved_End = 10999,
+} ETrackedDeviceProperty;
+
+typedef enum ETrackedPropertyError
+{
+ ETrackedPropertyError_TrackedProp_Success = 0,
+ ETrackedPropertyError_TrackedProp_WrongDataType = 1,
+ ETrackedPropertyError_TrackedProp_WrongDeviceClass = 2,
+ ETrackedPropertyError_TrackedProp_BufferTooSmall = 3,
+ ETrackedPropertyError_TrackedProp_UnknownProperty = 4,
+ ETrackedPropertyError_TrackedProp_InvalidDevice = 5,
+ ETrackedPropertyError_TrackedProp_CouldNotContactServer = 6,
+ ETrackedPropertyError_TrackedProp_ValueNotProvidedByDevice = 7,
+ ETrackedPropertyError_TrackedProp_StringExceedsMaximumLength = 8,
+ ETrackedPropertyError_TrackedProp_NotYetAvailable = 9,
+ ETrackedPropertyError_TrackedProp_PermissionDenied = 10,
+ ETrackedPropertyError_TrackedProp_InvalidOperation = 11,
+} ETrackedPropertyError;
+
+typedef enum EVRSubmitFlags
+{
+ EVRSubmitFlags_Submit_Default = 0,
+ EVRSubmitFlags_Submit_LensDistortionAlreadyApplied = 1,
+ EVRSubmitFlags_Submit_GlRenderBuffer = 2,
+ EVRSubmitFlags_Submit_Reserved = 4,
+} EVRSubmitFlags;
+
+typedef enum EVRState
+{
+ EVRState_VRState_Undefined = -1,
+ EVRState_VRState_Off = 0,
+ EVRState_VRState_Searching = 1,
+ EVRState_VRState_Searching_Alert = 2,
+ EVRState_VRState_Ready = 3,
+ EVRState_VRState_Ready_Alert = 4,
+ EVRState_VRState_NotReady = 5,
+ EVRState_VRState_Standby = 6,
+ EVRState_VRState_Ready_Alert_Low = 7,
+} EVRState;
+
+typedef enum EVREventType
+{
+ EVREventType_VREvent_None = 0,
+ EVREventType_VREvent_TrackedDeviceActivated = 100,
+ EVREventType_VREvent_TrackedDeviceDeactivated = 101,
+ EVREventType_VREvent_TrackedDeviceUpdated = 102,
+ EVREventType_VREvent_TrackedDeviceUserInteractionStarted = 103,
+ EVREventType_VREvent_TrackedDeviceUserInteractionEnded = 104,
+ EVREventType_VREvent_IpdChanged = 105,
+ EVREventType_VREvent_EnterStandbyMode = 106,
+ EVREventType_VREvent_LeaveStandbyMode = 107,
+ EVREventType_VREvent_TrackedDeviceRoleChanged = 108,
+ EVREventType_VREvent_WatchdogWakeUpRequested = 109,
+ EVREventType_VREvent_LensDistortionChanged = 110,
+ EVREventType_VREvent_PropertyChanged = 111,
+ EVREventType_VREvent_ButtonPress = 200,
+ EVREventType_VREvent_ButtonUnpress = 201,
+ EVREventType_VREvent_ButtonTouch = 202,
+ EVREventType_VREvent_ButtonUntouch = 203,
+ EVREventType_VREvent_MouseMove = 300,
+ EVREventType_VREvent_MouseButtonDown = 301,
+ EVREventType_VREvent_MouseButtonUp = 302,
+ EVREventType_VREvent_FocusEnter = 303,
+ EVREventType_VREvent_FocusLeave = 304,
+ EVREventType_VREvent_Scroll = 305,
+ EVREventType_VREvent_TouchPadMove = 306,
+ EVREventType_VREvent_OverlayFocusChanged = 307,
+ EVREventType_VREvent_InputFocusCaptured = 400,
+ EVREventType_VREvent_InputFocusReleased = 401,
+ EVREventType_VREvent_SceneFocusLost = 402,
+ EVREventType_VREvent_SceneFocusGained = 403,
+ EVREventType_VREvent_SceneApplicationChanged = 404,
+ EVREventType_VREvent_SceneFocusChanged = 405,
+ EVREventType_VREvent_InputFocusChanged = 406,
+ EVREventType_VREvent_SceneApplicationSecondaryRenderingStarted = 407,
+ EVREventType_VREvent_HideRenderModels = 410,
+ EVREventType_VREvent_ShowRenderModels = 411,
+ EVREventType_VREvent_OverlayShown = 500,
+ EVREventType_VREvent_OverlayHidden = 501,
+ EVREventType_VREvent_DashboardActivated = 502,
+ EVREventType_VREvent_DashboardDeactivated = 503,
+ EVREventType_VREvent_DashboardThumbSelected = 504,
+ EVREventType_VREvent_DashboardRequested = 505,
+ EVREventType_VREvent_ResetDashboard = 506,
+ EVREventType_VREvent_RenderToast = 507,
+ EVREventType_VREvent_ImageLoaded = 508,
+ EVREventType_VREvent_ShowKeyboard = 509,
+ EVREventType_VREvent_HideKeyboard = 510,
+ EVREventType_VREvent_OverlayGamepadFocusGained = 511,
+ EVREventType_VREvent_OverlayGamepadFocusLost = 512,
+ EVREventType_VREvent_OverlaySharedTextureChanged = 513,
+ EVREventType_VREvent_DashboardGuideButtonDown = 514,
+ EVREventType_VREvent_DashboardGuideButtonUp = 515,
+ EVREventType_VREvent_ScreenshotTriggered = 516,
+ EVREventType_VREvent_ImageFailed = 517,
+ EVREventType_VREvent_DashboardOverlayCreated = 518,
+ EVREventType_VREvent_RequestScreenshot = 520,
+ EVREventType_VREvent_ScreenshotTaken = 521,
+ EVREventType_VREvent_ScreenshotFailed = 522,
+ EVREventType_VREvent_SubmitScreenshotToDashboard = 523,
+ EVREventType_VREvent_ScreenshotProgressToDashboard = 524,
+ EVREventType_VREvent_PrimaryDashboardDeviceChanged = 525,
+ EVREventType_VREvent_Notification_Shown = 600,
+ EVREventType_VREvent_Notification_Hidden = 601,
+ EVREventType_VREvent_Notification_BeginInteraction = 602,
+ EVREventType_VREvent_Notification_Destroyed = 603,
+ EVREventType_VREvent_Quit = 700,
+ EVREventType_VREvent_ProcessQuit = 701,
+ EVREventType_VREvent_QuitAborted_UserPrompt = 702,
+ EVREventType_VREvent_QuitAcknowledged = 703,
+ EVREventType_VREvent_DriverRequestedQuit = 704,
+ EVREventType_VREvent_ChaperoneDataHasChanged = 800,
+ EVREventType_VREvent_ChaperoneUniverseHasChanged = 801,
+ EVREventType_VREvent_ChaperoneTempDataHasChanged = 802,
+ EVREventType_VREvent_ChaperoneSettingsHaveChanged = 803,
+ EVREventType_VREvent_SeatedZeroPoseReset = 804,
+ EVREventType_VREvent_AudioSettingsHaveChanged = 820,
+ EVREventType_VREvent_BackgroundSettingHasChanged = 850,
+ EVREventType_VREvent_CameraSettingsHaveChanged = 851,
+ EVREventType_VREvent_ReprojectionSettingHasChanged = 852,
+ EVREventType_VREvent_ModelSkinSettingsHaveChanged = 853,
+ EVREventType_VREvent_EnvironmentSettingsHaveChanged = 854,
+ EVREventType_VREvent_PowerSettingsHaveChanged = 855,
+ EVREventType_VREvent_EnableHomeAppSettingsHaveChanged = 856,
+ EVREventType_VREvent_StatusUpdate = 900,
+ EVREventType_VREvent_MCImageUpdated = 1000,
+ EVREventType_VREvent_FirmwareUpdateStarted = 1100,
+ EVREventType_VREvent_FirmwareUpdateFinished = 1101,
+ EVREventType_VREvent_KeyboardClosed = 1200,
+ EVREventType_VREvent_KeyboardCharInput = 1201,
+ EVREventType_VREvent_KeyboardDone = 1202,
+ EVREventType_VREvent_ApplicationTransitionStarted = 1300,
+ EVREventType_VREvent_ApplicationTransitionAborted = 1301,
+ EVREventType_VREvent_ApplicationTransitionNewAppStarted = 1302,
+ EVREventType_VREvent_ApplicationListUpdated = 1303,
+ EVREventType_VREvent_ApplicationMimeTypeLoad = 1304,
+ EVREventType_VREvent_ApplicationTransitionNewAppLaunchComplete = 1305,
+ EVREventType_VREvent_ProcessConnected = 1306,
+ EVREventType_VREvent_ProcessDisconnected = 1307,
+ EVREventType_VREvent_Compositor_MirrorWindowShown = 1400,
+ EVREventType_VREvent_Compositor_MirrorWindowHidden = 1401,
+ EVREventType_VREvent_Compositor_ChaperoneBoundsShown = 1410,
+ EVREventType_VREvent_Compositor_ChaperoneBoundsHidden = 1411,
+ EVREventType_VREvent_TrackedCamera_StartVideoStream = 1500,
+ EVREventType_VREvent_TrackedCamera_StopVideoStream = 1501,
+ EVREventType_VREvent_TrackedCamera_PauseVideoStream = 1502,
+ EVREventType_VREvent_TrackedCamera_ResumeVideoStream = 1503,
+ EVREventType_VREvent_TrackedCamera_EditingSurface = 1550,
+ EVREventType_VREvent_PerformanceTest_EnableCapture = 1600,
+ EVREventType_VREvent_PerformanceTest_DisableCapture = 1601,
+ EVREventType_VREvent_PerformanceTest_FidelityLevel = 1602,
+ EVREventType_VREvent_MessageOverlay_Closed = 1650,
+ EVREventType_VREvent_VendorSpecific_Reserved_Start = 10000,
+ EVREventType_VREvent_VendorSpecific_Reserved_End = 19999,
+} EVREventType;
+
+typedef enum EDeviceActivityLevel
+{
+ EDeviceActivityLevel_k_EDeviceActivityLevel_Unknown = -1,
+ EDeviceActivityLevel_k_EDeviceActivityLevel_Idle = 0,
+ EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction = 1,
+ EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction_Timeout = 2,
+ EDeviceActivityLevel_k_EDeviceActivityLevel_Standby = 3,
+} EDeviceActivityLevel;
+
+typedef enum EVRButtonId
+{
+ EVRButtonId_k_EButton_System = 0,
+ EVRButtonId_k_EButton_ApplicationMenu = 1,
+ EVRButtonId_k_EButton_Grip = 2,
+ EVRButtonId_k_EButton_DPad_Left = 3,
+ EVRButtonId_k_EButton_DPad_Up = 4,
+ EVRButtonId_k_EButton_DPad_Right = 5,
+ EVRButtonId_k_EButton_DPad_Down = 6,
+ EVRButtonId_k_EButton_A = 7,
+ EVRButtonId_k_EButton_ProximitySensor = 31,
+ EVRButtonId_k_EButton_Axis0 = 32,
+ EVRButtonId_k_EButton_Axis1 = 33,
+ EVRButtonId_k_EButton_Axis2 = 34,
+ EVRButtonId_k_EButton_Axis3 = 35,
+ EVRButtonId_k_EButton_Axis4 = 36,
+ EVRButtonId_k_EButton_SteamVR_Touchpad = 32,
+ EVRButtonId_k_EButton_SteamVR_Trigger = 33,
+ EVRButtonId_k_EButton_Dashboard_Back = 2,
+ EVRButtonId_k_EButton_Max = 64,
+} EVRButtonId;
+
+typedef enum EVRMouseButton
+{
+ EVRMouseButton_VRMouseButton_Left = 1,
+ EVRMouseButton_VRMouseButton_Right = 2,
+ EVRMouseButton_VRMouseButton_Middle = 4,
+} EVRMouseButton;
+
+typedef enum EHiddenAreaMeshType
+{
+ EHiddenAreaMeshType_k_eHiddenAreaMesh_Standard = 0,
+ EHiddenAreaMeshType_k_eHiddenAreaMesh_Inverse = 1,
+ EHiddenAreaMeshType_k_eHiddenAreaMesh_LineLoop = 2,
+ EHiddenAreaMeshType_k_eHiddenAreaMesh_Max = 3,
+} EHiddenAreaMeshType;
+
+typedef enum EVRControllerAxisType
+{
+ EVRControllerAxisType_k_eControllerAxis_None = 0,
+ EVRControllerAxisType_k_eControllerAxis_TrackPad = 1,
+ EVRControllerAxisType_k_eControllerAxis_Joystick = 2,
+ EVRControllerAxisType_k_eControllerAxis_Trigger = 3,
+} EVRControllerAxisType;
+
+typedef enum EVRControllerEventOutputType
+{
+ EVRControllerEventOutputType_ControllerEventOutput_OSEvents = 0,
+ EVRControllerEventOutputType_ControllerEventOutput_VREvents = 1,
+} EVRControllerEventOutputType;
+
+typedef enum ECollisionBoundsStyle
+{
+ ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_BEGINNER = 0,
+ ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_INTERMEDIATE = 1,
+ ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_SQUARES = 2,
+ ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_ADVANCED = 3,
+ ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_NONE = 4,
+ ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_COUNT = 5,
+} ECollisionBoundsStyle;
+
+typedef enum EVROverlayError
+{
+ EVROverlayError_VROverlayError_None = 0,
+ EVROverlayError_VROverlayError_UnknownOverlay = 10,
+ EVROverlayError_VROverlayError_InvalidHandle = 11,
+ EVROverlayError_VROverlayError_PermissionDenied = 12,
+ EVROverlayError_VROverlayError_OverlayLimitExceeded = 13,
+ EVROverlayError_VROverlayError_WrongVisibilityType = 14,
+ EVROverlayError_VROverlayError_KeyTooLong = 15,
+ EVROverlayError_VROverlayError_NameTooLong = 16,
+ EVROverlayError_VROverlayError_KeyInUse = 17,
+ EVROverlayError_VROverlayError_WrongTransformType = 18,
+ EVROverlayError_VROverlayError_InvalidTrackedDevice = 19,
+ EVROverlayError_VROverlayError_InvalidParameter = 20,
+ EVROverlayError_VROverlayError_ThumbnailCantBeDestroyed = 21,
+ EVROverlayError_VROverlayError_ArrayTooSmall = 22,
+ EVROverlayError_VROverlayError_RequestFailed = 23,
+ EVROverlayError_VROverlayError_InvalidTexture = 24,
+ EVROverlayError_VROverlayError_UnableToLoadFile = 25,
+ EVROverlayError_VROverlayError_KeyboardAlreadyInUse = 26,
+ EVROverlayError_VROverlayError_NoNeighbor = 27,
+ EVROverlayError_VROverlayError_TooManyMaskPrimitives = 29,
+ EVROverlayError_VROverlayError_BadMaskPrimitive = 30,
+} EVROverlayError;
+
+typedef enum EVRApplicationType
+{
+ EVRApplicationType_VRApplication_Other = 0,
+ EVRApplicationType_VRApplication_Scene = 1,
+ EVRApplicationType_VRApplication_Overlay = 2,
+ EVRApplicationType_VRApplication_Background = 3,
+ EVRApplicationType_VRApplication_Utility = 4,
+ EVRApplicationType_VRApplication_VRMonitor = 5,
+ EVRApplicationType_VRApplication_SteamWatchdog = 6,
+ EVRApplicationType_VRApplication_Bootstrapper = 7,
+ EVRApplicationType_VRApplication_Max = 8,
+} EVRApplicationType;
+
+typedef enum EVRFirmwareError
+{
+ EVRFirmwareError_VRFirmwareError_None = 0,
+ EVRFirmwareError_VRFirmwareError_Success = 1,
+ EVRFirmwareError_VRFirmwareError_Fail = 2,
+} EVRFirmwareError;
+
+typedef enum EVRNotificationError
+{
+ EVRNotificationError_VRNotificationError_OK = 0,
+ EVRNotificationError_VRNotificationError_InvalidNotificationId = 100,
+ EVRNotificationError_VRNotificationError_NotificationQueueFull = 101,
+ EVRNotificationError_VRNotificationError_InvalidOverlayHandle = 102,
+ EVRNotificationError_VRNotificationError_SystemWithUserValueAlreadyExists = 103,
+} EVRNotificationError;
+
+typedef enum EVRInitError
+{
+ EVRInitError_VRInitError_None = 0,
+ EVRInitError_VRInitError_Unknown = 1,
+ EVRInitError_VRInitError_Init_InstallationNotFound = 100,
+ EVRInitError_VRInitError_Init_InstallationCorrupt = 101,
+ EVRInitError_VRInitError_Init_VRClientDLLNotFound = 102,
+ EVRInitError_VRInitError_Init_FileNotFound = 103,
+ EVRInitError_VRInitError_Init_FactoryNotFound = 104,
+ EVRInitError_VRInitError_Init_InterfaceNotFound = 105,
+ EVRInitError_VRInitError_Init_InvalidInterface = 106,
+ EVRInitError_VRInitError_Init_UserConfigDirectoryInvalid = 107,
+ EVRInitError_VRInitError_Init_HmdNotFound = 108,
+ EVRInitError_VRInitError_Init_NotInitialized = 109,
+ EVRInitError_VRInitError_Init_PathRegistryNotFound = 110,
+ EVRInitError_VRInitError_Init_NoConfigPath = 111,
+ EVRInitError_VRInitError_Init_NoLogPath = 112,
+ EVRInitError_VRInitError_Init_PathRegistryNotWritable = 113,
+ EVRInitError_VRInitError_Init_AppInfoInitFailed = 114,
+ EVRInitError_VRInitError_Init_Retry = 115,
+ EVRInitError_VRInitError_Init_InitCanceledByUser = 116,
+ EVRInitError_VRInitError_Init_AnotherAppLaunching = 117,
+ EVRInitError_VRInitError_Init_SettingsInitFailed = 118,
+ EVRInitError_VRInitError_Init_ShuttingDown = 119,
+ EVRInitError_VRInitError_Init_TooManyObjects = 120,
+ EVRInitError_VRInitError_Init_NoServerForBackgroundApp = 121,
+ EVRInitError_VRInitError_Init_NotSupportedWithCompositor = 122,
+ EVRInitError_VRInitError_Init_NotAvailableToUtilityApps = 123,
+ EVRInitError_VRInitError_Init_Internal = 124,
+ EVRInitError_VRInitError_Init_HmdDriverIdIsNone = 125,
+ EVRInitError_VRInitError_Init_HmdNotFoundPresenceFailed = 126,
+ EVRInitError_VRInitError_Init_VRMonitorNotFound = 127,
+ EVRInitError_VRInitError_Init_VRMonitorStartupFailed = 128,
+ EVRInitError_VRInitError_Init_LowPowerWatchdogNotSupported = 129,
+ EVRInitError_VRInitError_Init_InvalidApplicationType = 130,
+ EVRInitError_VRInitError_Init_NotAvailableToWatchdogApps = 131,
+ EVRInitError_VRInitError_Init_WatchdogDisabledInSettings = 132,
+ EVRInitError_VRInitError_Init_VRDashboardNotFound = 133,
+ EVRInitError_VRInitError_Init_VRDashboardStartupFailed = 134,
+ EVRInitError_VRInitError_Init_VRHomeNotFound = 135,
+ EVRInitError_VRInitError_Init_VRHomeStartupFailed = 136,
+ EVRInitError_VRInitError_Driver_Failed = 200,
+ EVRInitError_VRInitError_Driver_Unknown = 201,
+ EVRInitError_VRInitError_Driver_HmdUnknown = 202,
+ EVRInitError_VRInitError_Driver_NotLoaded = 203,
+ EVRInitError_VRInitError_Driver_RuntimeOutOfDate = 204,
+ EVRInitError_VRInitError_Driver_HmdInUse = 205,
+ EVRInitError_VRInitError_Driver_NotCalibrated = 206,
+ EVRInitError_VRInitError_Driver_CalibrationInvalid = 207,
+ EVRInitError_VRInitError_Driver_HmdDisplayNotFound = 208,
+ EVRInitError_VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209,
+ EVRInitError_VRInitError_Driver_HmdDriverIdOutOfBounds = 211,
+ EVRInitError_VRInitError_Driver_HmdDisplayMirrored = 212,
+ EVRInitError_VRInitError_IPC_ServerInitFailed = 300,
+ EVRInitError_VRInitError_IPC_ConnectFailed = 301,
+ EVRInitError_VRInitError_IPC_SharedStateInitFailed = 302,
+ EVRInitError_VRInitError_IPC_CompositorInitFailed = 303,
+ EVRInitError_VRInitError_IPC_MutexInitFailed = 304,
+ EVRInitError_VRInitError_IPC_Failed = 305,
+ EVRInitError_VRInitError_IPC_CompositorConnectFailed = 306,
+ EVRInitError_VRInitError_IPC_CompositorInvalidConnectResponse = 307,
+ EVRInitError_VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308,
+ EVRInitError_VRInitError_Compositor_Failed = 400,
+ EVRInitError_VRInitError_Compositor_D3D11HardwareRequired = 401,
+ EVRInitError_VRInitError_Compositor_FirmwareRequiresUpdate = 402,
+ EVRInitError_VRInitError_Compositor_OverlayInitFailed = 403,
+ EVRInitError_VRInitError_Compositor_ScreenshotsInitFailed = 404,
+ EVRInitError_VRInitError_Compositor_UnableToCreateDevice = 405,
+ EVRInitError_VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_NoStoredConfig = 1103,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigTooBig = 1104,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigTooSmall = 1105,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToInitZLib = 1106,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_UserDataAddressRange = 1111,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_UserDataError = 1112,
+ EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113,
+ EVRInitError_VRInitError_Steam_SteamInstallationNotFound = 2000,
+} EVRInitError;
+
+typedef enum EVRScreenshotType
+{
+ EVRScreenshotType_VRScreenshotType_None = 0,
+ EVRScreenshotType_VRScreenshotType_Mono = 1,
+ EVRScreenshotType_VRScreenshotType_Stereo = 2,
+ EVRScreenshotType_VRScreenshotType_Cubemap = 3,
+ EVRScreenshotType_VRScreenshotType_MonoPanorama = 4,
+ EVRScreenshotType_VRScreenshotType_StereoPanorama = 5,
+} EVRScreenshotType;
+
+typedef enum EVRScreenshotPropertyFilenames
+{
+ EVRScreenshotPropertyFilenames_VRScreenshotPropertyFilenames_Preview = 0,
+ EVRScreenshotPropertyFilenames_VRScreenshotPropertyFilenames_VR = 1,
+} EVRScreenshotPropertyFilenames;
+
+typedef enum EVRTrackedCameraError
+{
+ EVRTrackedCameraError_VRTrackedCameraError_None = 0,
+ EVRTrackedCameraError_VRTrackedCameraError_OperationFailed = 100,
+ EVRTrackedCameraError_VRTrackedCameraError_InvalidHandle = 101,
+ EVRTrackedCameraError_VRTrackedCameraError_InvalidFrameHeaderVersion = 102,
+ EVRTrackedCameraError_VRTrackedCameraError_OutOfHandles = 103,
+ EVRTrackedCameraError_VRTrackedCameraError_IPCFailure = 104,
+ EVRTrackedCameraError_VRTrackedCameraError_NotSupportedForThisDevice = 105,
+ EVRTrackedCameraError_VRTrackedCameraError_SharedMemoryFailure = 106,
+ EVRTrackedCameraError_VRTrackedCameraError_FrameBufferingFailure = 107,
+ EVRTrackedCameraError_VRTrackedCameraError_StreamSetupFailure = 108,
+ EVRTrackedCameraError_VRTrackedCameraError_InvalidGLTextureId = 109,
+ EVRTrackedCameraError_VRTrackedCameraError_InvalidSharedTextureHandle = 110,
+ EVRTrackedCameraError_VRTrackedCameraError_FailedToGetGLTextureId = 111,
+ EVRTrackedCameraError_VRTrackedCameraError_SharedTextureFailure = 112,
+ EVRTrackedCameraError_VRTrackedCameraError_NoFrameAvailable = 113,
+ EVRTrackedCameraError_VRTrackedCameraError_InvalidArgument = 114,
+ EVRTrackedCameraError_VRTrackedCameraError_InvalidFrameBufferSize = 115,
+} EVRTrackedCameraError;
+
+typedef enum EVRTrackedCameraFrameType
+{
+ EVRTrackedCameraFrameType_VRTrackedCameraFrameType_Distorted = 0,
+ EVRTrackedCameraFrameType_VRTrackedCameraFrameType_Undistorted = 1,
+ EVRTrackedCameraFrameType_VRTrackedCameraFrameType_MaximumUndistorted = 2,
+ EVRTrackedCameraFrameType_MAX_CAMERA_FRAME_TYPES = 3,
+} EVRTrackedCameraFrameType;
+
+typedef enum EVRApplicationError
+{
+ EVRApplicationError_VRApplicationError_None = 0,
+ EVRApplicationError_VRApplicationError_AppKeyAlreadyExists = 100,
+ EVRApplicationError_VRApplicationError_NoManifest = 101,
+ EVRApplicationError_VRApplicationError_NoApplication = 102,
+ EVRApplicationError_VRApplicationError_InvalidIndex = 103,
+ EVRApplicationError_VRApplicationError_UnknownApplication = 104,
+ EVRApplicationError_VRApplicationError_IPCFailed = 105,
+ EVRApplicationError_VRApplicationError_ApplicationAlreadyRunning = 106,
+ EVRApplicationError_VRApplicationError_InvalidManifest = 107,
+ EVRApplicationError_VRApplicationError_InvalidApplication = 108,
+ EVRApplicationError_VRApplicationError_LaunchFailed = 109,
+ EVRApplicationError_VRApplicationError_ApplicationAlreadyStarting = 110,
+ EVRApplicationError_VRApplicationError_LaunchInProgress = 111,
+ EVRApplicationError_VRApplicationError_OldApplicationQuitting = 112,
+ EVRApplicationError_VRApplicationError_TransitionAborted = 113,
+ EVRApplicationError_VRApplicationError_IsTemplate = 114,
+ EVRApplicationError_VRApplicationError_BufferTooSmall = 200,
+ EVRApplicationError_VRApplicationError_PropertyNotSet = 201,
+ EVRApplicationError_VRApplicationError_UnknownProperty = 202,
+ EVRApplicationError_VRApplicationError_InvalidParameter = 203,
+} EVRApplicationError;
+
+typedef enum EVRApplicationProperty
+{
+ EVRApplicationProperty_VRApplicationProperty_Name_String = 0,
+ EVRApplicationProperty_VRApplicationProperty_LaunchType_String = 11,
+ EVRApplicationProperty_VRApplicationProperty_WorkingDirectory_String = 12,
+ EVRApplicationProperty_VRApplicationProperty_BinaryPath_String = 13,
+ EVRApplicationProperty_VRApplicationProperty_Arguments_String = 14,
+ EVRApplicationProperty_VRApplicationProperty_URL_String = 15,
+ EVRApplicationProperty_VRApplicationProperty_Description_String = 50,
+ EVRApplicationProperty_VRApplicationProperty_NewsURL_String = 51,
+ EVRApplicationProperty_VRApplicationProperty_ImagePath_String = 52,
+ EVRApplicationProperty_VRApplicationProperty_Source_String = 53,
+ EVRApplicationProperty_VRApplicationProperty_IsDashboardOverlay_Bool = 60,
+ EVRApplicationProperty_VRApplicationProperty_IsTemplate_Bool = 61,
+ EVRApplicationProperty_VRApplicationProperty_IsInstanced_Bool = 62,
+ EVRApplicationProperty_VRApplicationProperty_IsInternal_Bool = 63,
+ EVRApplicationProperty_VRApplicationProperty_LastLaunchTime_Uint64 = 70,
+} EVRApplicationProperty;
+
+typedef enum EVRApplicationTransitionState
+{
+ EVRApplicationTransitionState_VRApplicationTransition_None = 0,
+ EVRApplicationTransitionState_VRApplicationTransition_OldAppQuitSent = 10,
+ EVRApplicationTransitionState_VRApplicationTransition_WaitingForExternalLaunch = 11,
+ EVRApplicationTransitionState_VRApplicationTransition_NewAppLaunched = 20,
+} EVRApplicationTransitionState;
+
+typedef enum ChaperoneCalibrationState
+{
+ ChaperoneCalibrationState_OK = 1,
+ ChaperoneCalibrationState_Warning = 100,
+ ChaperoneCalibrationState_Warning_BaseStationMayHaveMoved = 101,
+ ChaperoneCalibrationState_Warning_BaseStationRemoved = 102,
+ ChaperoneCalibrationState_Warning_SeatedBoundsInvalid = 103,
+ ChaperoneCalibrationState_Error = 200,
+ ChaperoneCalibrationState_Error_BaseStationUninitialized = 201,
+ ChaperoneCalibrationState_Error_BaseStationConflict = 202,
+ ChaperoneCalibrationState_Error_PlayAreaInvalid = 203,
+ ChaperoneCalibrationState_Error_CollisionBoundsInvalid = 204,
+} ChaperoneCalibrationState;
+
+typedef enum EChaperoneConfigFile
+{
+ EChaperoneConfigFile_Live = 1,
+ EChaperoneConfigFile_Temp = 2,
+} EChaperoneConfigFile;
+
+typedef enum EChaperoneImportFlags
+{
+ EChaperoneImportFlags_EChaperoneImport_BoundsOnly = 1,
+} EChaperoneImportFlags;
+
+typedef enum EVRCompositorError
+{
+ EVRCompositorError_VRCompositorError_None = 0,
+ EVRCompositorError_VRCompositorError_RequestFailed = 1,
+ EVRCompositorError_VRCompositorError_IncompatibleVersion = 100,
+ EVRCompositorError_VRCompositorError_DoNotHaveFocus = 101,
+ EVRCompositorError_VRCompositorError_InvalidTexture = 102,
+ EVRCompositorError_VRCompositorError_IsNotSceneApplication = 103,
+ EVRCompositorError_VRCompositorError_TextureIsOnWrongDevice = 104,
+ EVRCompositorError_VRCompositorError_TextureUsesUnsupportedFormat = 105,
+ EVRCompositorError_VRCompositorError_SharedTexturesNotSupported = 106,
+ EVRCompositorError_VRCompositorError_IndexOutOfRange = 107,
+ EVRCompositorError_VRCompositorError_AlreadySubmitted = 108,
+} EVRCompositorError;
+
+typedef enum VROverlayInputMethod
+{
+ VROverlayInputMethod_None = 0,
+ VROverlayInputMethod_Mouse = 1,
+} VROverlayInputMethod;
+
+typedef enum VROverlayTransformType
+{
+ VROverlayTransformType_VROverlayTransform_Absolute = 0,
+ VROverlayTransformType_VROverlayTransform_TrackedDeviceRelative = 1,
+ VROverlayTransformType_VROverlayTransform_SystemOverlay = 2,
+ VROverlayTransformType_VROverlayTransform_TrackedComponent = 3,
+} VROverlayTransformType;
+
+typedef enum VROverlayFlags
+{
+ VROverlayFlags_None = 0,
+ VROverlayFlags_Curved = 1,
+ VROverlayFlags_RGSS4X = 2,
+ VROverlayFlags_NoDashboardTab = 3,
+ VROverlayFlags_AcceptsGamepadEvents = 4,
+ VROverlayFlags_ShowGamepadFocus = 5,
+ VROverlayFlags_SendVRScrollEvents = 6,
+ VROverlayFlags_SendVRTouchpadEvents = 7,
+ VROverlayFlags_ShowTouchPadScrollWheel = 8,
+ VROverlayFlags_TransferOwnershipToInternalProcess = 9,
+ VROverlayFlags_SideBySide_Parallel = 10,
+ VROverlayFlags_SideBySide_Crossed = 11,
+ VROverlayFlags_Panorama = 12,
+ VROverlayFlags_StereoPanorama = 13,
+ VROverlayFlags_SortWithNonSceneOverlays = 14,
+ VROverlayFlags_VisibleInDashboard = 15,
+} VROverlayFlags;
+
+typedef enum VRMessageOverlayResponse
+{
+ VRMessageOverlayResponse_ButtonPress_0 = 0,
+ VRMessageOverlayResponse_ButtonPress_1 = 1,
+ VRMessageOverlayResponse_ButtonPress_2 = 2,
+ VRMessageOverlayResponse_ButtonPress_3 = 3,
+ VRMessageOverlayResponse_CouldntFindSystemOverlay = 4,
+ VRMessageOverlayResponse_CouldntFindOrCreateClientOverlay = 5,
+ VRMessageOverlayResponse_ApplicationQuit = 6,
+} VRMessageOverlayResponse;
+
+typedef enum EGamepadTextInputMode
+{
+ EGamepadTextInputMode_k_EGamepadTextInputModeNormal = 0,
+ EGamepadTextInputMode_k_EGamepadTextInputModePassword = 1,
+ EGamepadTextInputMode_k_EGamepadTextInputModeSubmit = 2,
+} EGamepadTextInputMode;
+
+typedef enum EGamepadTextInputLineMode
+{
+ EGamepadTextInputLineMode_k_EGamepadTextInputLineModeSingleLine = 0,
+ EGamepadTextInputLineMode_k_EGamepadTextInputLineModeMultipleLines = 1,
+} EGamepadTextInputLineMode;
+
+typedef enum EOverlayDirection
+{
+ EOverlayDirection_OverlayDirection_Up = 0,
+ EOverlayDirection_OverlayDirection_Down = 1,
+ EOverlayDirection_OverlayDirection_Left = 2,
+ EOverlayDirection_OverlayDirection_Right = 3,
+ EOverlayDirection_OverlayDirection_Count = 4,
+} EOverlayDirection;
+
+typedef enum EVROverlayIntersectionMaskPrimitiveType
+{
+ EVROverlayIntersectionMaskPrimitiveType_OverlayIntersectionPrimitiveType_Rectangle = 0,
+ EVROverlayIntersectionMaskPrimitiveType_OverlayIntersectionPrimitiveType_Circle = 1,
+} EVROverlayIntersectionMaskPrimitiveType;
+
+typedef enum EVRRenderModelError
+{
+ EVRRenderModelError_VRRenderModelError_None = 0,
+ EVRRenderModelError_VRRenderModelError_Loading = 100,
+ EVRRenderModelError_VRRenderModelError_NotSupported = 200,
+ EVRRenderModelError_VRRenderModelError_InvalidArg = 300,
+ EVRRenderModelError_VRRenderModelError_InvalidModel = 301,
+ EVRRenderModelError_VRRenderModelError_NoShapes = 302,
+ EVRRenderModelError_VRRenderModelError_MultipleShapes = 303,
+ EVRRenderModelError_VRRenderModelError_TooManyVertices = 304,
+ EVRRenderModelError_VRRenderModelError_MultipleTextures = 305,
+ EVRRenderModelError_VRRenderModelError_BufferTooSmall = 306,
+ EVRRenderModelError_VRRenderModelError_NotEnoughNormals = 307,
+ EVRRenderModelError_VRRenderModelError_NotEnoughTexCoords = 308,
+ EVRRenderModelError_VRRenderModelError_InvalidTexture = 400,
+} EVRRenderModelError;
+
+typedef enum EVRComponentProperty
+{
+ EVRComponentProperty_VRComponentProperty_IsStatic = 1,
+ EVRComponentProperty_VRComponentProperty_IsVisible = 2,
+ EVRComponentProperty_VRComponentProperty_IsTouched = 4,
+ EVRComponentProperty_VRComponentProperty_IsPressed = 8,
+ EVRComponentProperty_VRComponentProperty_IsScrolled = 16,
+} EVRComponentProperty;
+
+typedef enum EVRNotificationType
+{
+ EVRNotificationType_Transient = 0,
+ EVRNotificationType_Persistent = 1,
+ EVRNotificationType_Transient_SystemWithUserValue = 2,
+} EVRNotificationType;
+
+typedef enum EVRNotificationStyle
+{
+ EVRNotificationStyle_None = 0,
+ EVRNotificationStyle_Application = 100,
+ EVRNotificationStyle_Contact_Disabled = 200,
+ EVRNotificationStyle_Contact_Enabled = 201,
+ EVRNotificationStyle_Contact_Active = 202,
+} EVRNotificationStyle;
+
+typedef enum EVRSettingsError
+{
+ EVRSettingsError_VRSettingsError_None = 0,
+ EVRSettingsError_VRSettingsError_IPCFailed = 1,
+ EVRSettingsError_VRSettingsError_WriteFailed = 2,
+ EVRSettingsError_VRSettingsError_ReadFailed = 3,
+ EVRSettingsError_VRSettingsError_JsonParseFailed = 4,
+ EVRSettingsError_VRSettingsError_UnsetSettingHasNoDefault = 5,
+} EVRSettingsError;
+
+typedef enum EVRScreenshotError
+{
+ EVRScreenshotError_VRScreenshotError_None = 0,
+ EVRScreenshotError_VRScreenshotError_RequestFailed = 1,
+ EVRScreenshotError_VRScreenshotError_IncompatibleVersion = 100,
+ EVRScreenshotError_VRScreenshotError_NotFound = 101,
+ EVRScreenshotError_VRScreenshotError_BufferTooSmall = 102,
+ EVRScreenshotError_VRScreenshotError_ScreenshotAlreadyInProgress = 108,
+} EVRScreenshotError;
+
+
+// OpenVR typedefs
+
+typedef uint32_t TrackedDeviceIndex_t;
+typedef uint32_t VRNotificationId;
+typedef uint64_t VROverlayHandle_t;
+
+typedef void * glSharedTextureHandle_t;
+typedef int32_t glInt_t;
+typedef uint32_t glUInt_t;
+typedef uint64_t SharedTextureHandle_t;
+typedef uint32_t DriverId_t;
+typedef uint32_t TrackedDeviceIndex_t;
+typedef uint64_t PropertyContainerHandle_t;
+typedef uint32_t PropertyTypeTag_t;
+typedef uint64_t VROverlayHandle_t;
+typedef uint64_t TrackedCameraHandle_t;
+typedef uint32_t ScreenshotHandle_t;
+typedef uint32_t VRComponentProperties;
+typedef int32_t TextureID_t;
+typedef uint32_t VRNotificationId;
+typedef EVRInitError HmdError;
+typedef EVREye Hmd_Eye;
+typedef EColorSpace ColorSpace;
+typedef ETrackingResult HmdTrackingResult;
+typedef ETrackedDeviceClass TrackedDeviceClass;
+typedef ETrackingUniverseOrigin TrackingUniverseOrigin;
+typedef ETrackedDeviceProperty TrackedDeviceProperty;
+typedef ETrackedPropertyError TrackedPropertyError;
+typedef EVRSubmitFlags VRSubmitFlags_t;
+typedef EVRState VRState_t;
+typedef ECollisionBoundsStyle CollisionBoundsStyle_t;
+typedef EVROverlayError VROverlayError;
+typedef EVRFirmwareError VRFirmwareError;
+typedef EVRCompositorError VRCompositorError;
+typedef EVRScreenshotError VRScreenshotsError;
+
+// OpenVR Structs
+
+typedef struct HmdMatrix34_t
+{
+ float m[3][4]; //float[3][4]
+} HmdMatrix34_t;
+
+typedef struct HmdMatrix44_t
+{
+ float m[4][4]; //float[4][4]
+} HmdMatrix44_t;
+
+typedef struct HmdVector3_t
+{
+ float v[3]; //float[3]
+} HmdVector3_t;
+
+typedef struct HmdVector4_t
+{
+ float v[4]; //float[4]
+} HmdVector4_t;
+
+typedef struct HmdVector3d_t
+{
+ double v[3]; //double[3]
+} HmdVector3d_t;
+
+typedef struct HmdVector2_t
+{
+ float v[2]; //float[2]
+} HmdVector2_t;
+
+typedef struct HmdQuaternion_t
+{
+ double w;
+ double x;
+ double y;
+ double z;
+} HmdQuaternion_t;
+
+typedef struct HmdColor_t
+{
+ float r;
+ float g;
+ float b;
+ float a;
+} HmdColor_t;
+
+typedef struct HmdQuad_t
+{
+ struct HmdVector3_t vCorners[4]; //struct vr::HmdVector3_t[4]
+} HmdQuad_t;
+
+typedef struct HmdRect2_t
+{
+ struct HmdVector2_t vTopLeft;
+ struct HmdVector2_t vBottomRight;
+} HmdRect2_t;
+
+typedef struct DistortionCoordinates_t
+{
+ float rfRed[2]; //float[2]
+ float rfGreen[2]; //float[2]
+ float rfBlue[2]; //float[2]
+} DistortionCoordinates_t;
+
+typedef struct Texture_t
+{
+ void * handle; // void *
+ enum ETextureType eType;
+ enum EColorSpace eColorSpace;
+} Texture_t;
+
+typedef struct TrackedDevicePose_t
+{
+ struct HmdMatrix34_t mDeviceToAbsoluteTracking;
+ struct HmdVector3_t vVelocity;
+ struct HmdVector3_t vAngularVelocity;
+ enum ETrackingResult eTrackingResult;
+ bool bPoseIsValid;
+ bool bDeviceIsConnected;
+} TrackedDevicePose_t;
+
+typedef struct VRTextureBounds_t
+{
+ float uMin;
+ float vMin;
+ float uMax;
+ float vMax;
+} VRTextureBounds_t;
+
+typedef struct VRVulkanTextureData_t
+{
+ uint64_t m_nImage;
+ struct VkDevice_T * m_pDevice; // struct VkDevice_T *
+ struct VkPhysicalDevice_T * m_pPhysicalDevice; // struct VkPhysicalDevice_T *
+ struct VkInstance_T * m_pInstance; // struct VkInstance_T *
+ struct VkQueue_T * m_pQueue; // struct VkQueue_T *
+ uint32_t m_nQueueFamilyIndex;
+ uint32_t m_nWidth;
+ uint32_t m_nHeight;
+ uint32_t m_nFormat;
+ uint32_t m_nSampleCount;
+} VRVulkanTextureData_t;
+
+typedef struct D3D12TextureData_t
+{
+ struct ID3D12Resource * m_pResource; // struct ID3D12Resource *
+ struct ID3D12CommandQueue * m_pCommandQueue; // struct ID3D12CommandQueue *
+ uint32_t m_nNodeMask;
+} D3D12TextureData_t;
+
+typedef struct VREvent_Controller_t
+{
+ uint32_t button;
+} VREvent_Controller_t;
+
+typedef struct VREvent_Mouse_t
+{
+ float x;
+ float y;
+ uint32_t button;
+} VREvent_Mouse_t;
+
+typedef struct VREvent_Scroll_t
+{
+ float xdelta;
+ float ydelta;
+ uint32_t repeatCount;
+} VREvent_Scroll_t;
+
+typedef struct VREvent_TouchPadMove_t
+{
+ bool bFingerDown;
+ float flSecondsFingerDown;
+ float fValueXFirst;
+ float fValueYFirst;
+ float fValueXRaw;
+ float fValueYRaw;
+} VREvent_TouchPadMove_t;
+
+typedef struct VREvent_Notification_t
+{
+ uint64_t ulUserValue;
+ uint32_t notificationId;
+} VREvent_Notification_t;
+
+typedef struct VREvent_Process_t
+{
+ uint32_t pid;
+ uint32_t oldPid;
+ bool bForced;
+} VREvent_Process_t;
+
+typedef struct VREvent_Overlay_t
+{
+ uint64_t overlayHandle;
+} VREvent_Overlay_t;
+
+typedef struct VREvent_Status_t
+{
+ uint32_t statusState;
+} VREvent_Status_t;
+
+typedef struct VREvent_Keyboard_t
+{
+ char * cNewInput[8]; //char[8]
+ uint64_t uUserValue;
+} VREvent_Keyboard_t;
+
+typedef struct VREvent_Ipd_t
+{
+ float ipdMeters;
+} VREvent_Ipd_t;
+
+typedef struct VREvent_Chaperone_t
+{
+ uint64_t m_nPreviousUniverse;
+ uint64_t m_nCurrentUniverse;
+} VREvent_Chaperone_t;
+
+typedef struct VREvent_Reserved_t
+{
+ uint64_t reserved0;
+ uint64_t reserved1;
+} VREvent_Reserved_t;
+
+typedef struct VREvent_PerformanceTest_t
+{
+ uint32_t m_nFidelityLevel;
+} VREvent_PerformanceTest_t;
+
+typedef struct VREvent_SeatedZeroPoseReset_t
+{
+ bool bResetBySystemMenu;
+} VREvent_SeatedZeroPoseReset_t;
+
+typedef struct VREvent_Screenshot_t
+{
+ uint32_t handle;
+ uint32_t type;
+} VREvent_Screenshot_t;
+
+typedef struct VREvent_ScreenshotProgress_t
+{
+ float progress;
+} VREvent_ScreenshotProgress_t;
+
+typedef struct VREvent_ApplicationLaunch_t
+{
+ uint32_t pid;
+ uint32_t unArgsHandle;
+} VREvent_ApplicationLaunch_t;
+
+typedef struct VREvent_EditingCameraSurface_t
+{
+ uint64_t overlayHandle;
+ uint32_t nVisualMode;
+} VREvent_EditingCameraSurface_t;
+
+typedef struct VREvent_MessageOverlay_t
+{
+ uint32_t unVRMessageOverlayResponse;
+} VREvent_MessageOverlay_t;
+
+typedef struct VREvent_Property_t
+{
+ PropertyContainerHandle_t container;
+ enum ETrackedDeviceProperty prop;
+} VREvent_Property_t;
+
+typedef struct HiddenAreaMesh_t
+{
+ struct HmdVector2_t * pVertexData; // const struct vr::HmdVector2_t *
+ uint32_t unTriangleCount;
+} HiddenAreaMesh_t;
+
+typedef struct VRControllerAxis_t
+{
+ float x;
+ float y;
+} VRControllerAxis_t;
+
+typedef struct VRControllerState_t
+{
+ uint32_t unPacketNum;
+ uint64_t ulButtonPressed;
+ uint64_t ulButtonTouched;
+ struct VRControllerAxis_t rAxis[5]; //struct vr::VRControllerAxis_t[5]
+} VRControllerState_t;
+
+typedef struct Compositor_OverlaySettings
+{
+ uint32_t size;
+ bool curved;
+ bool antialias;
+ float scale;
+ float distance;
+ float alpha;
+ float uOffset;
+ float vOffset;
+ float uScale;
+ float vScale;
+ float gridDivs;
+ float gridWidth;
+ float gridScale;
+ struct HmdMatrix44_t transform;
+} Compositor_OverlaySettings;
+
+typedef struct CameraVideoStreamFrameHeader_t
+{
+ enum EVRTrackedCameraFrameType eFrameType;
+ uint32_t nWidth;
+ uint32_t nHeight;
+ uint32_t nBytesPerPixel;
+ uint32_t nFrameSequence;
+ struct TrackedDevicePose_t standingTrackedDevicePose;
+} CameraVideoStreamFrameHeader_t;
+
+typedef struct AppOverrideKeys_t
+{
+ char * pchKey; // const char *
+ char * pchValue; // const char *
+} AppOverrideKeys_t;
+
+typedef struct Compositor_FrameTiming
+{
+ uint32_t m_nSize;
+ uint32_t m_nFrameIndex;
+ uint32_t m_nNumFramePresents;
+ uint32_t m_nNumMisPresented;
+ uint32_t m_nNumDroppedFrames;
+ uint32_t m_nReprojectionFlags;
+ double m_flSystemTimeInSeconds;
+ float m_flPreSubmitGpuMs;
+ float m_flPostSubmitGpuMs;
+ float m_flTotalRenderGpuMs;
+ float m_flCompositorRenderGpuMs;
+ float m_flCompositorRenderCpuMs;
+ float m_flCompositorIdleCpuMs;
+ float m_flClientFrameIntervalMs;
+ float m_flPresentCallCpuMs;
+ float m_flWaitForPresentCpuMs;
+ float m_flSubmitFrameMs;
+ float m_flWaitGetPosesCalledMs;
+ float m_flNewPosesReadyMs;
+ float m_flNewFrameReadyMs;
+ float m_flCompositorUpdateStartMs;
+ float m_flCompositorUpdateEndMs;
+ float m_flCompositorRenderStartMs;
+ TrackedDevicePose_t m_HmdPose;
+} Compositor_FrameTiming;
+
+typedef struct Compositor_CumulativeStats
+{
+ uint32_t m_nPid;
+ uint32_t m_nNumFramePresents;
+ uint32_t m_nNumDroppedFrames;
+ uint32_t m_nNumReprojectedFrames;
+ uint32_t m_nNumFramePresentsOnStartup;
+ uint32_t m_nNumDroppedFramesOnStartup;
+ uint32_t m_nNumReprojectedFramesOnStartup;
+ uint32_t m_nNumLoading;
+ uint32_t m_nNumFramePresentsLoading;
+ uint32_t m_nNumDroppedFramesLoading;
+ uint32_t m_nNumReprojectedFramesLoading;
+ uint32_t m_nNumTimedOut;
+ uint32_t m_nNumFramePresentsTimedOut;
+ uint32_t m_nNumDroppedFramesTimedOut;
+ uint32_t m_nNumReprojectedFramesTimedOut;
+} Compositor_CumulativeStats;
+
+typedef struct VROverlayIntersectionParams_t
+{
+ struct HmdVector3_t vSource;
+ struct HmdVector3_t vDirection;
+ enum ETrackingUniverseOrigin eOrigin;
+} VROverlayIntersectionParams_t;
+
+typedef struct VROverlayIntersectionResults_t
+{
+ struct HmdVector3_t vPoint;
+ struct HmdVector3_t vNormal;
+ struct HmdVector2_t vUVs;
+ float fDistance;
+} VROverlayIntersectionResults_t;
+
+typedef struct IntersectionMaskRectangle_t
+{
+ float m_flTopLeftX;
+ float m_flTopLeftY;
+ float m_flWidth;
+ float m_flHeight;
+} IntersectionMaskRectangle_t;
+
+typedef struct IntersectionMaskCircle_t
+{
+ float m_flCenterX;
+ float m_flCenterY;
+ float m_flRadius;
+} IntersectionMaskCircle_t;
+
+typedef struct RenderModel_ComponentState_t
+{
+ struct HmdMatrix34_t mTrackingToComponentRenderModel;
+ struct HmdMatrix34_t mTrackingToComponentLocal;
+ VRComponentProperties uProperties;
+} RenderModel_ComponentState_t;
+
+typedef struct RenderModel_Vertex_t
+{
+ struct HmdVector3_t vPosition;
+ struct HmdVector3_t vNormal;
+ float rfTextureCoord[2]; //float[2]
+} RenderModel_Vertex_t;
+
+#if defined(__linux__) || defined(__APPLE__)
+#pragma pack( push, 4 )
+#endif
+typedef struct RenderModel_TextureMap_t
+{
+ uint16_t unWidth;
+ uint16_t unHeight;
+ uint8_t * rubTextureMapData; // const uint8_t *
+} RenderModel_TextureMap_t;
+
+#if defined(__linux__) || defined(__APPLE__)
+#pragma pack( pop )
+#endif
+#if defined(__linux__) || defined(__APPLE__)
+#pragma pack( push, 4 )
+#endif
+typedef struct RenderModel_t
+{
+ struct RenderModel_Vertex_t * rVertexData; // const struct vr::RenderModel_Vertex_t *
+ uint32_t unVertexCount;
+ uint16_t * rIndexData; // const uint16_t *
+ uint32_t unTriangleCount;
+ TextureID_t diffuseTextureId;
+} RenderModel_t;
+
+#if defined(__linux__) || defined(__APPLE__)
+#pragma pack( pop )
+#endif
+typedef struct RenderModel_ControllerMode_State_t
+{
+ bool bScrollWheelVisible;
+} RenderModel_ControllerMode_State_t;
+
+typedef struct NotificationBitmap_t
+{
+ void * m_pImageData; // void *
+ int32_t m_nWidth;
+ int32_t m_nHeight;
+ int32_t m_nBytesPerPixel;
+} NotificationBitmap_t;
+
+typedef struct COpenVRContext
+{
+ intptr_t m_pVRSystem; // class vr::IVRSystem *
+ intptr_t m_pVRChaperone; // class vr::IVRChaperone *
+ intptr_t m_pVRChaperoneSetup; // class vr::IVRChaperoneSetup *
+ intptr_t m_pVRCompositor; // class vr::IVRCompositor *
+ intptr_t m_pVROverlay; // class vr::IVROverlay *
+ intptr_t m_pVRResources; // class vr::IVRResources *
+ intptr_t m_pVRRenderModels; // class vr::IVRRenderModels *
+ intptr_t m_pVRExtendedDisplay; // class vr::IVRExtendedDisplay *
+ intptr_t m_pVRSettings; // class vr::IVRSettings *
+ intptr_t m_pVRApplications; // class vr::IVRApplications *
+ intptr_t m_pVRTrackedCamera; // class vr::IVRTrackedCamera *
+ intptr_t m_pVRScreenshots; // class vr::IVRScreenshots *
+ intptr_t m_pVRDriverManager; // class vr::IVRDriverManager *
+} COpenVRContext;
+
+
+typedef union
+{
+ VREvent_Reserved_t reserved;
+ VREvent_Controller_t controller;
+ VREvent_Mouse_t mouse;
+ VREvent_Scroll_t scroll;
+ VREvent_Process_t process;
+ VREvent_Notification_t notification;
+ VREvent_Overlay_t overlay;
+ VREvent_Status_t status;
+ VREvent_Keyboard_t keyboard;
+ VREvent_Ipd_t ipd;
+ VREvent_Chaperone_t chaperone;
+ VREvent_PerformanceTest_t performanceTest;
+ VREvent_TouchPadMove_t touchPadMove;
+ VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset;
+} VREvent_Data_t;
+
+/** An event posted by the server to all running applications */
+struct VREvent_t
+{
+ uint32_t eventType; // EVREventType enum
+ TrackedDeviceIndex_t trackedDeviceIndex;
+ float eventAgeSeconds;
+ // event data must be the end of the struct as its size is variable
+ VREvent_Data_t data;
+};
+
+
+typedef union
+{
+ IntersectionMaskRectangle_t m_Rectangle;
+ IntersectionMaskCircle_t m_Circle;
+} VROverlayIntersectionMaskPrimitive_Data_t;
+
+struct VROverlayIntersectionMaskPrimitive_t
+{
+ EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType;
+ VROverlayIntersectionMaskPrimitive_Data_t m_Primitive;
+};
+
+
+// OpenVR Function Pointer Tables
+
+struct VR_IVRSystem_FnTable
+{
+ void (OPENVR_FNTABLE_CALLTYPE *GetRecommendedRenderTargetSize)(uint32_t * pnWidth, uint32_t * pnHeight);
+ struct HmdMatrix44_t (OPENVR_FNTABLE_CALLTYPE *GetProjectionMatrix)(EVREye eEye, float fNearZ, float fFarZ);
+ void (OPENVR_FNTABLE_CALLTYPE *GetProjectionRaw)(EVREye eEye, float * pfLeft, float * pfRight, float * pfTop, float * pfBottom);
+ bool (OPENVR_FNTABLE_CALLTYPE *ComputeDistortion)(EVREye eEye, float fU, float fV, struct DistortionCoordinates_t * pDistortionCoordinates);
+ struct HmdMatrix34_t (OPENVR_FNTABLE_CALLTYPE *GetEyeToHeadTransform)(EVREye eEye);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetTimeSinceLastVsync)(float * pfSecondsSinceLastVsync, uint64_t * pulFrameCounter);
+ int32_t (OPENVR_FNTABLE_CALLTYPE *GetD3D9AdapterIndex)();
+ void (OPENVR_FNTABLE_CALLTYPE *GetDXGIOutputInfo)(int32_t * pnAdapterIndex);
+ void (OPENVR_FNTABLE_CALLTYPE *GetOutputDevice)(uint64_t * pnDevice, ETextureType textureType);
+ bool (OPENVR_FNTABLE_CALLTYPE *IsDisplayOnDesktop)();
+ bool (OPENVR_FNTABLE_CALLTYPE *SetDisplayVisibility)(bool bIsVisibleOnDesktop);
+ void (OPENVR_FNTABLE_CALLTYPE *GetDeviceToAbsoluteTrackingPose)(ETrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, struct TrackedDevicePose_t * pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount);
+ void (OPENVR_FNTABLE_CALLTYPE *ResetSeatedZeroPose)();
+ struct HmdMatrix34_t (OPENVR_FNTABLE_CALLTYPE *GetSeatedZeroPoseToStandingAbsoluteTrackingPose)();
+ struct HmdMatrix34_t (OPENVR_FNTABLE_CALLTYPE *GetRawZeroPoseToStandingAbsoluteTrackingPose)();
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetSortedTrackedDeviceIndicesOfClass)(ETrackedDeviceClass eTrackedDeviceClass, TrackedDeviceIndex_t * punTrackedDeviceIndexArray, uint32_t unTrackedDeviceIndexArrayCount, TrackedDeviceIndex_t unRelativeToTrackedDeviceIndex);
+ EDeviceActivityLevel (OPENVR_FNTABLE_CALLTYPE *GetTrackedDeviceActivityLevel)(TrackedDeviceIndex_t unDeviceId);
+ void (OPENVR_FNTABLE_CALLTYPE *ApplyTransform)(struct TrackedDevicePose_t * pOutputPose, struct TrackedDevicePose_t * pTrackedDevicePose, struct HmdMatrix34_t * pTransform);
+ TrackedDeviceIndex_t (OPENVR_FNTABLE_CALLTYPE *GetTrackedDeviceIndexForControllerRole)(ETrackedControllerRole unDeviceType);
+ ETrackedControllerRole (OPENVR_FNTABLE_CALLTYPE *GetControllerRoleForTrackedDeviceIndex)(TrackedDeviceIndex_t unDeviceIndex);
+ ETrackedDeviceClass (OPENVR_FNTABLE_CALLTYPE *GetTrackedDeviceClass)(TrackedDeviceIndex_t unDeviceIndex);
+ bool (OPENVR_FNTABLE_CALLTYPE *IsTrackedDeviceConnected)(TrackedDeviceIndex_t unDeviceIndex);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetBoolTrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError * pError);
+ float (OPENVR_FNTABLE_CALLTYPE *GetFloatTrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError * pError);
+ int32_t (OPENVR_FNTABLE_CALLTYPE *GetInt32TrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError * pError);
+ uint64_t (OPENVR_FNTABLE_CALLTYPE *GetUint64TrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError * pError);
+ struct HmdMatrix34_t (OPENVR_FNTABLE_CALLTYPE *GetMatrix34TrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError * pError);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetStringTrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, char * pchValue, uint32_t unBufferSize, ETrackedPropertyError * pError);
+ char * (OPENVR_FNTABLE_CALLTYPE *GetPropErrorNameFromEnum)(ETrackedPropertyError error);
+ bool (OPENVR_FNTABLE_CALLTYPE *PollNextEvent)(struct VREvent_t * pEvent, uint32_t uncbVREvent);
+ bool (OPENVR_FNTABLE_CALLTYPE *PollNextEventWithPose)(ETrackingUniverseOrigin eOrigin, struct VREvent_t * pEvent, uint32_t uncbVREvent, TrackedDevicePose_t * pTrackedDevicePose);
+ char * (OPENVR_FNTABLE_CALLTYPE *GetEventTypeNameFromEnum)(EVREventType eType);
+ struct HiddenAreaMesh_t (OPENVR_FNTABLE_CALLTYPE *GetHiddenAreaMesh)(EVREye eEye, EHiddenAreaMeshType type);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetControllerState)(TrackedDeviceIndex_t unControllerDeviceIndex, VRControllerState_t * pControllerState, uint32_t unControllerStateSize);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetControllerStateWithPose)(ETrackingUniverseOrigin eOrigin, TrackedDeviceIndex_t unControllerDeviceIndex, VRControllerState_t * pControllerState, uint32_t unControllerStateSize, struct TrackedDevicePose_t * pTrackedDevicePose);
+ void (OPENVR_FNTABLE_CALLTYPE *TriggerHapticPulse)(TrackedDeviceIndex_t unControllerDeviceIndex, uint32_t unAxisId, unsigned short usDurationMicroSec);
+ char * (OPENVR_FNTABLE_CALLTYPE *GetButtonIdNameFromEnum)(EVRButtonId eButtonId);
+ char * (OPENVR_FNTABLE_CALLTYPE *GetControllerAxisTypeNameFromEnum)(EVRControllerAxisType eAxisType);
+ bool (OPENVR_FNTABLE_CALLTYPE *CaptureInputFocus)();
+ void (OPENVR_FNTABLE_CALLTYPE *ReleaseInputFocus)();
+ bool (OPENVR_FNTABLE_CALLTYPE *IsInputFocusCapturedByAnotherProcess)();
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *DriverDebugRequest)(TrackedDeviceIndex_t unDeviceIndex, char * pchRequest, char * pchResponseBuffer, uint32_t unResponseBufferSize);
+ EVRFirmwareError (OPENVR_FNTABLE_CALLTYPE *PerformFirmwareUpdate)(TrackedDeviceIndex_t unDeviceIndex);
+ void (OPENVR_FNTABLE_CALLTYPE *AcknowledgeQuit_Exiting)();
+ void (OPENVR_FNTABLE_CALLTYPE *AcknowledgeQuit_UserPrompt)();
+};
+
+struct VR_IVRExtendedDisplay_FnTable
+{
+ void (OPENVR_FNTABLE_CALLTYPE *GetWindowBounds)(int32_t * pnX, int32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+ void (OPENVR_FNTABLE_CALLTYPE *GetEyeOutputViewport)(EVREye eEye, uint32_t * pnX, uint32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight);
+ void (OPENVR_FNTABLE_CALLTYPE *GetDXGIOutputInfo)(int32_t * pnAdapterIndex, int32_t * pnAdapterOutputIndex);
+};
+
+struct VR_IVRTrackedCamera_FnTable
+{
+ char * (OPENVR_FNTABLE_CALLTYPE *GetCameraErrorNameFromEnum)(EVRTrackedCameraError eCameraError);
+ EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *HasCamera)(TrackedDeviceIndex_t nDeviceIndex, bool * pHasCamera);
+ EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetCameraFrameSize)(TrackedDeviceIndex_t nDeviceIndex, EVRTrackedCameraFrameType eFrameType, uint32_t * pnWidth, uint32_t * pnHeight, uint32_t * pnFrameBufferSize);
+ EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetCameraIntrinsics)(TrackedDeviceIndex_t nDeviceIndex, EVRTrackedCameraFrameType eFrameType, HmdVector2_t * pFocalLength, HmdVector2_t * pCenter);
+ EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetCameraProjection)(TrackedDeviceIndex_t nDeviceIndex, EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, HmdMatrix44_t * pProjection);
+ EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *AcquireVideoStreamingService)(TrackedDeviceIndex_t nDeviceIndex, TrackedCameraHandle_t * pHandle);
+ EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *ReleaseVideoStreamingService)(TrackedCameraHandle_t hTrackedCamera);
+ EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetVideoStreamFrameBuffer)(TrackedCameraHandle_t hTrackedCamera, EVRTrackedCameraFrameType eFrameType, void * pFrameBuffer, uint32_t nFrameBufferSize, CameraVideoStreamFrameHeader_t * pFrameHeader, uint32_t nFrameHeaderSize);
+ EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetVideoStreamTextureSize)(TrackedDeviceIndex_t nDeviceIndex, EVRTrackedCameraFrameType eFrameType, VRTextureBounds_t * pTextureBounds, uint32_t * pnWidth, uint32_t * pnHeight);
+ EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetVideoStreamTextureD3D11)(TrackedCameraHandle_t hTrackedCamera, EVRTrackedCameraFrameType eFrameType, void * pD3D11DeviceOrResource, void ** ppD3D11ShaderResourceView, CameraVideoStreamFrameHeader_t * pFrameHeader, uint32_t nFrameHeaderSize);
+ EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetVideoStreamTextureGL)(TrackedCameraHandle_t hTrackedCamera, EVRTrackedCameraFrameType eFrameType, glUInt_t * pglTextureId, CameraVideoStreamFrameHeader_t * pFrameHeader, uint32_t nFrameHeaderSize);
+ EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *ReleaseVideoStreamTextureGL)(TrackedCameraHandle_t hTrackedCamera, glUInt_t glTextureId);
+};
+
+struct VR_IVRApplications_FnTable
+{
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *AddApplicationManifest)(char * pchApplicationManifestFullPath, bool bTemporary);
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *RemoveApplicationManifest)(char * pchApplicationManifestFullPath);
+ bool (OPENVR_FNTABLE_CALLTYPE *IsApplicationInstalled)(char * pchAppKey);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationCount)();
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *GetApplicationKeyByIndex)(uint32_t unApplicationIndex, char * pchAppKeyBuffer, uint32_t unAppKeyBufferLen);
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *GetApplicationKeyByProcessId)(uint32_t unProcessId, char * pchAppKeyBuffer, uint32_t unAppKeyBufferLen);
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *LaunchApplication)(char * pchAppKey);
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *LaunchTemplateApplication)(char * pchTemplateAppKey, char * pchNewAppKey, struct AppOverrideKeys_t * pKeys, uint32_t unKeys);
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *LaunchApplicationFromMimeType)(char * pchMimeType, char * pchArgs);
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *LaunchDashboardOverlay)(char * pchAppKey);
+ bool (OPENVR_FNTABLE_CALLTYPE *CancelApplicationLaunch)(char * pchAppKey);
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *IdentifyApplication)(uint32_t unProcessId, char * pchAppKey);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationProcessId)(char * pchAppKey);
+ char * (OPENVR_FNTABLE_CALLTYPE *GetApplicationsErrorNameFromEnum)(EVRApplicationError error);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationPropertyString)(char * pchAppKey, EVRApplicationProperty eProperty, char * pchPropertyValueBuffer, uint32_t unPropertyValueBufferLen, EVRApplicationError * peError);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetApplicationPropertyBool)(char * pchAppKey, EVRApplicationProperty eProperty, EVRApplicationError * peError);
+ uint64_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationPropertyUint64)(char * pchAppKey, EVRApplicationProperty eProperty, EVRApplicationError * peError);
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *SetApplicationAutoLaunch)(char * pchAppKey, bool bAutoLaunch);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetApplicationAutoLaunch)(char * pchAppKey);
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *SetDefaultApplicationForMimeType)(char * pchAppKey, char * pchMimeType);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetDefaultApplicationForMimeType)(char * pchMimeType, char * pchAppKeyBuffer, uint32_t unAppKeyBufferLen);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetApplicationSupportedMimeTypes)(char * pchAppKey, char * pchMimeTypesBuffer, uint32_t unMimeTypesBuffer);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationsThatSupportMimeType)(char * pchMimeType, char * pchAppKeysThatSupportBuffer, uint32_t unAppKeysThatSupportBuffer);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationLaunchArguments)(uint32_t unHandle, char * pchArgs, uint32_t unArgs);
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *GetStartingApplication)(char * pchAppKeyBuffer, uint32_t unAppKeyBufferLen);
+ EVRApplicationTransitionState (OPENVR_FNTABLE_CALLTYPE *GetTransitionState)();
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *PerformApplicationPrelaunchCheck)(char * pchAppKey);
+ char * (OPENVR_FNTABLE_CALLTYPE *GetApplicationsTransitionStateNameFromEnum)(EVRApplicationTransitionState state);
+ bool (OPENVR_FNTABLE_CALLTYPE *IsQuitUserPromptRequested)();
+ EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *LaunchInternalProcess)(char * pchBinaryPath, char * pchArguments, char * pchWorkingDirectory);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetCurrentSceneProcessId)();
+};
+
+struct VR_IVRChaperone_FnTable
+{
+ ChaperoneCalibrationState (OPENVR_FNTABLE_CALLTYPE *GetCalibrationState)();
+ bool (OPENVR_FNTABLE_CALLTYPE *GetPlayAreaSize)(float * pSizeX, float * pSizeZ);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetPlayAreaRect)(struct HmdQuad_t * rect);
+ void (OPENVR_FNTABLE_CALLTYPE *ReloadInfo)();
+ void (OPENVR_FNTABLE_CALLTYPE *SetSceneColor)(struct HmdColor_t color);
+ void (OPENVR_FNTABLE_CALLTYPE *GetBoundsColor)(struct HmdColor_t * pOutputColorArray, int nNumOutputColors, float flCollisionBoundsFadeDistance, struct HmdColor_t * pOutputCameraColor);
+ bool (OPENVR_FNTABLE_CALLTYPE *AreBoundsVisible)();
+ void (OPENVR_FNTABLE_CALLTYPE *ForceBoundsVisible)(bool bForce);
+};
+
+struct VR_IVRChaperoneSetup_FnTable
+{
+ bool (OPENVR_FNTABLE_CALLTYPE *CommitWorkingCopy)(EChaperoneConfigFile configFile);
+ void (OPENVR_FNTABLE_CALLTYPE *RevertWorkingCopy)();
+ bool (OPENVR_FNTABLE_CALLTYPE *GetWorkingPlayAreaSize)(float * pSizeX, float * pSizeZ);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetWorkingPlayAreaRect)(struct HmdQuad_t * rect);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetWorkingCollisionBoundsInfo)(struct HmdQuad_t * pQuadsBuffer, uint32_t * punQuadsCount);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetLiveCollisionBoundsInfo)(struct HmdQuad_t * pQuadsBuffer, uint32_t * punQuadsCount);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetWorkingSeatedZeroPoseToRawTrackingPose)(struct HmdMatrix34_t * pmatSeatedZeroPoseToRawTrackingPose);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetWorkingStandingZeroPoseToRawTrackingPose)(struct HmdMatrix34_t * pmatStandingZeroPoseToRawTrackingPose);
+ void (OPENVR_FNTABLE_CALLTYPE *SetWorkingPlayAreaSize)(float sizeX, float sizeZ);
+ void (OPENVR_FNTABLE_CALLTYPE *SetWorkingCollisionBoundsInfo)(struct HmdQuad_t * pQuadsBuffer, uint32_t unQuadsCount);
+ void (OPENVR_FNTABLE_CALLTYPE *SetWorkingSeatedZeroPoseToRawTrackingPose)(struct HmdMatrix34_t * pMatSeatedZeroPoseToRawTrackingPose);
+ void (OPENVR_FNTABLE_CALLTYPE *SetWorkingStandingZeroPoseToRawTrackingPose)(struct HmdMatrix34_t * pMatStandingZeroPoseToRawTrackingPose);
+ void (OPENVR_FNTABLE_CALLTYPE *ReloadFromDisk)(EChaperoneConfigFile configFile);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetLiveSeatedZeroPoseToRawTrackingPose)(struct HmdMatrix34_t * pmatSeatedZeroPoseToRawTrackingPose);
+ void (OPENVR_FNTABLE_CALLTYPE *SetWorkingCollisionBoundsTagsInfo)(uint8_t * pTagsBuffer, uint32_t unTagCount);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetLiveCollisionBoundsTagsInfo)(uint8_t * pTagsBuffer, uint32_t * punTagCount);
+ bool (OPENVR_FNTABLE_CALLTYPE *SetWorkingPhysicalBoundsInfo)(struct HmdQuad_t * pQuadsBuffer, uint32_t unQuadsCount);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetLivePhysicalBoundsInfo)(struct HmdQuad_t * pQuadsBuffer, uint32_t * punQuadsCount);
+ bool (OPENVR_FNTABLE_CALLTYPE *ExportLiveToBuffer)(char * pBuffer, uint32_t * pnBufferLength);
+ bool (OPENVR_FNTABLE_CALLTYPE *ImportFromBufferToWorking)(char * pBuffer, uint32_t nImportFlags);
+};
+
+struct VR_IVRCompositor_FnTable
+{
+ void (OPENVR_FNTABLE_CALLTYPE *SetTrackingSpace)(ETrackingUniverseOrigin eOrigin);
+ ETrackingUniverseOrigin (OPENVR_FNTABLE_CALLTYPE *GetTrackingSpace)();
+ EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *WaitGetPoses)(struct TrackedDevicePose_t * pRenderPoseArray, uint32_t unRenderPoseArrayCount, struct TrackedDevicePose_t * pGamePoseArray, uint32_t unGamePoseArrayCount);
+ EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *GetLastPoses)(struct TrackedDevicePose_t * pRenderPoseArray, uint32_t unRenderPoseArrayCount, struct TrackedDevicePose_t * pGamePoseArray, uint32_t unGamePoseArrayCount);
+ EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *GetLastPoseForTrackedDeviceIndex)(TrackedDeviceIndex_t unDeviceIndex, struct TrackedDevicePose_t * pOutputPose, struct TrackedDevicePose_t * pOutputGamePose);
+ EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *Submit)(EVREye eEye, struct Texture_t * pTexture, struct VRTextureBounds_t * pBounds, EVRSubmitFlags nSubmitFlags);
+ void (OPENVR_FNTABLE_CALLTYPE *ClearLastSubmittedFrame)();
+ void (OPENVR_FNTABLE_CALLTYPE *PostPresentHandoff)();
+ bool (OPENVR_FNTABLE_CALLTYPE *GetFrameTiming)(struct Compositor_FrameTiming * pTiming, uint32_t unFramesAgo);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetFrameTimings)(struct Compositor_FrameTiming * pTiming, uint32_t nFrames);
+ float (OPENVR_FNTABLE_CALLTYPE *GetFrameTimeRemaining)();
+ void (OPENVR_FNTABLE_CALLTYPE *GetCumulativeStats)(struct Compositor_CumulativeStats * pStats, uint32_t nStatsSizeInBytes);
+ void (OPENVR_FNTABLE_CALLTYPE *FadeToColor)(float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, bool bBackground);
+ struct HmdColor_t (OPENVR_FNTABLE_CALLTYPE *GetCurrentFadeColor)(bool bBackground);
+ void (OPENVR_FNTABLE_CALLTYPE *FadeGrid)(float fSeconds, bool bFadeIn);
+ float (OPENVR_FNTABLE_CALLTYPE *GetCurrentGridAlpha)();
+ EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *SetSkyboxOverride)(struct Texture_t * pTextures, uint32_t unTextureCount);
+ void (OPENVR_FNTABLE_CALLTYPE *ClearSkyboxOverride)();
+ void (OPENVR_FNTABLE_CALLTYPE *CompositorBringToFront)();
+ void (OPENVR_FNTABLE_CALLTYPE *CompositorGoToBack)();
+ void (OPENVR_FNTABLE_CALLTYPE *CompositorQuit)();
+ bool (OPENVR_FNTABLE_CALLTYPE *IsFullscreen)();
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetCurrentSceneFocusProcess)();
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetLastFrameRenderer)();
+ bool (OPENVR_FNTABLE_CALLTYPE *CanRenderScene)();
+ void (OPENVR_FNTABLE_CALLTYPE *ShowMirrorWindow)();
+ void (OPENVR_FNTABLE_CALLTYPE *HideMirrorWindow)();
+ bool (OPENVR_FNTABLE_CALLTYPE *IsMirrorWindowVisible)();
+ void (OPENVR_FNTABLE_CALLTYPE *CompositorDumpImages)();
+ bool (OPENVR_FNTABLE_CALLTYPE *ShouldAppRenderWithLowResources)();
+ void (OPENVR_FNTABLE_CALLTYPE *ForceInterleavedReprojectionOn)(bool bOverride);
+ void (OPENVR_FNTABLE_CALLTYPE *ForceReconnectProcess)();
+ void (OPENVR_FNTABLE_CALLTYPE *SuspendRendering)(bool bSuspend);
+ EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *GetMirrorTextureD3D11)(EVREye eEye, void * pD3D11DeviceOrResource, void ** ppD3D11ShaderResourceView);
+ void (OPENVR_FNTABLE_CALLTYPE *ReleaseMirrorTextureD3D11)(void * pD3D11ShaderResourceView);
+ EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *GetMirrorTextureGL)(EVREye eEye, glUInt_t * pglTextureId, glSharedTextureHandle_t * pglSharedTextureHandle);
+ bool (OPENVR_FNTABLE_CALLTYPE *ReleaseSharedGLTexture)(glUInt_t glTextureId, glSharedTextureHandle_t glSharedTextureHandle);
+ void (OPENVR_FNTABLE_CALLTYPE *LockGLSharedTextureForAccess)(glSharedTextureHandle_t glSharedTextureHandle);
+ void (OPENVR_FNTABLE_CALLTYPE *UnlockGLSharedTextureForAccess)(glSharedTextureHandle_t glSharedTextureHandle);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetVulkanInstanceExtensionsRequired)(char * pchValue, uint32_t unBufferSize);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetVulkanDeviceExtensionsRequired)(struct VkPhysicalDevice_T * pPhysicalDevice, char * pchValue, uint32_t unBufferSize);
+};
+
+struct VR_IVROverlay_FnTable
+{
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *FindOverlay)(char * pchOverlayKey, VROverlayHandle_t * pOverlayHandle);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *CreateOverlay)(char * pchOverlayKey, char * pchOverlayName, VROverlayHandle_t * pOverlayHandle);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *DestroyOverlay)(VROverlayHandle_t ulOverlayHandle);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetHighQualityOverlay)(VROverlayHandle_t ulOverlayHandle);
+ VROverlayHandle_t (OPENVR_FNTABLE_CALLTYPE *GetHighQualityOverlay)();
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetOverlayKey)(VROverlayHandle_t ulOverlayHandle, char * pchValue, uint32_t unBufferSize, EVROverlayError * pError);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetOverlayName)(VROverlayHandle_t ulOverlayHandle, char * pchValue, uint32_t unBufferSize, EVROverlayError * pError);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayName)(VROverlayHandle_t ulOverlayHandle, char * pchName);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayImageData)(VROverlayHandle_t ulOverlayHandle, void * pvBuffer, uint32_t unBufferSize, uint32_t * punWidth, uint32_t * punHeight);
+ char * (OPENVR_FNTABLE_CALLTYPE *GetOverlayErrorNameFromEnum)(EVROverlayError error);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayRenderingPid)(VROverlayHandle_t ulOverlayHandle, uint32_t unPID);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetOverlayRenderingPid)(VROverlayHandle_t ulOverlayHandle);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayFlag)(VROverlayHandle_t ulOverlayHandle, VROverlayFlags eOverlayFlag, bool bEnabled);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayFlag)(VROverlayHandle_t ulOverlayHandle, VROverlayFlags eOverlayFlag, bool * pbEnabled);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayColor)(VROverlayHandle_t ulOverlayHandle, float fRed, float fGreen, float fBlue);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayColor)(VROverlayHandle_t ulOverlayHandle, float * pfRed, float * pfGreen, float * pfBlue);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayAlpha)(VROverlayHandle_t ulOverlayHandle, float fAlpha);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayAlpha)(VROverlayHandle_t ulOverlayHandle, float * pfAlpha);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTexelAspect)(VROverlayHandle_t ulOverlayHandle, float fTexelAspect);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTexelAspect)(VROverlayHandle_t ulOverlayHandle, float * pfTexelAspect);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlaySortOrder)(VROverlayHandle_t ulOverlayHandle, uint32_t unSortOrder);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlaySortOrder)(VROverlayHandle_t ulOverlayHandle, uint32_t * punSortOrder);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayWidthInMeters)(VROverlayHandle_t ulOverlayHandle, float fWidthInMeters);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayWidthInMeters)(VROverlayHandle_t ulOverlayHandle, float * pfWidthInMeters);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayAutoCurveDistanceRangeInMeters)(VROverlayHandle_t ulOverlayHandle, float fMinDistanceInMeters, float fMaxDistanceInMeters);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayAutoCurveDistanceRangeInMeters)(VROverlayHandle_t ulOverlayHandle, float * pfMinDistanceInMeters, float * pfMaxDistanceInMeters);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTextureColorSpace)(VROverlayHandle_t ulOverlayHandle, EColorSpace eTextureColorSpace);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTextureColorSpace)(VROverlayHandle_t ulOverlayHandle, EColorSpace * peTextureColorSpace);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTextureBounds)(VROverlayHandle_t ulOverlayHandle, struct VRTextureBounds_t * pOverlayTextureBounds);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTextureBounds)(VROverlayHandle_t ulOverlayHandle, struct VRTextureBounds_t * pOverlayTextureBounds);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetOverlayRenderModel)(VROverlayHandle_t ulOverlayHandle, char * pchValue, uint32_t unBufferSize, struct HmdColor_t * pColor, EVROverlayError * pError);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayRenderModel)(VROverlayHandle_t ulOverlayHandle, char * pchRenderModel, struct HmdColor_t * pColor);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTransformType)(VROverlayHandle_t ulOverlayHandle, VROverlayTransformType * peTransformType);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTransformAbsolute)(VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, struct HmdMatrix34_t * pmatTrackingOriginToOverlayTransform);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTransformAbsolute)(VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin * peTrackingOrigin, struct HmdMatrix34_t * pmatTrackingOriginToOverlayTransform);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTransformTrackedDeviceRelative)(VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unTrackedDevice, struct HmdMatrix34_t * pmatTrackedDeviceToOverlayTransform);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTransformTrackedDeviceRelative)(VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t * punTrackedDevice, struct HmdMatrix34_t * pmatTrackedDeviceToOverlayTransform);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTransformTrackedDeviceComponent)(VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unDeviceIndex, char * pchComponentName);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTransformTrackedDeviceComponent)(VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t * punDeviceIndex, char * pchComponentName, uint32_t unComponentNameSize);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTransformOverlayRelative)(VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t * ulOverlayHandleParent, struct HmdMatrix34_t * pmatParentOverlayToOverlayTransform);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTransformOverlayRelative)(VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t ulOverlayHandleParent, struct HmdMatrix34_t * pmatParentOverlayToOverlayTransform);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ShowOverlay)(VROverlayHandle_t ulOverlayHandle);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *HideOverlay)(VROverlayHandle_t ulOverlayHandle);
+ bool (OPENVR_FNTABLE_CALLTYPE *IsOverlayVisible)(VROverlayHandle_t ulOverlayHandle);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetTransformForOverlayCoordinates)(VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, struct HmdVector2_t coordinatesInOverlay, struct HmdMatrix34_t * pmatTransform);
+ bool (OPENVR_FNTABLE_CALLTYPE *PollNextOverlayEvent)(VROverlayHandle_t ulOverlayHandle, struct VREvent_t * pEvent, uint32_t uncbVREvent);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayInputMethod)(VROverlayHandle_t ulOverlayHandle, VROverlayInputMethod * peInputMethod);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayInputMethod)(VROverlayHandle_t ulOverlayHandle, VROverlayInputMethod eInputMethod);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayMouseScale)(VROverlayHandle_t ulOverlayHandle, struct HmdVector2_t * pvecMouseScale);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayMouseScale)(VROverlayHandle_t ulOverlayHandle, struct HmdVector2_t * pvecMouseScale);
+ bool (OPENVR_FNTABLE_CALLTYPE *ComputeOverlayIntersection)(VROverlayHandle_t ulOverlayHandle, struct VROverlayIntersectionParams_t * pParams, struct VROverlayIntersectionResults_t * pResults);
+ bool (OPENVR_FNTABLE_CALLTYPE *HandleControllerOverlayInteractionAsMouse)(VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unControllerDeviceIndex);
+ bool (OPENVR_FNTABLE_CALLTYPE *IsHoverTargetOverlay)(VROverlayHandle_t ulOverlayHandle);
+ VROverlayHandle_t (OPENVR_FNTABLE_CALLTYPE *GetGamepadFocusOverlay)();
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetGamepadFocusOverlay)(VROverlayHandle_t ulNewFocusOverlay);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayNeighbor)(EOverlayDirection eDirection, VROverlayHandle_t ulFrom, VROverlayHandle_t ulTo);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *MoveGamepadFocusToNeighbor)(EOverlayDirection eDirection, VROverlayHandle_t ulFrom);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTexture)(VROverlayHandle_t ulOverlayHandle, struct Texture_t * pTexture);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ClearOverlayTexture)(VROverlayHandle_t ulOverlayHandle);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayRaw)(VROverlayHandle_t ulOverlayHandle, void * pvBuffer, uint32_t unWidth, uint32_t unHeight, uint32_t unDepth);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayFromFile)(VROverlayHandle_t ulOverlayHandle, char * pchFilePath);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTexture)(VROverlayHandle_t ulOverlayHandle, void ** pNativeTextureHandle, void * pNativeTextureRef, uint32_t * pWidth, uint32_t * pHeight, uint32_t * pNativeFormat, ETextureType * pAPIType, EColorSpace * pColorSpace, struct VRTextureBounds_t * pTextureBounds);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ReleaseNativeOverlayHandle)(VROverlayHandle_t ulOverlayHandle, void * pNativeTextureHandle);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTextureSize)(VROverlayHandle_t ulOverlayHandle, uint32_t * pWidth, uint32_t * pHeight);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *CreateDashboardOverlay)(char * pchOverlayKey, char * pchOverlayFriendlyName, VROverlayHandle_t * pMainHandle, VROverlayHandle_t * pThumbnailHandle);
+ bool (OPENVR_FNTABLE_CALLTYPE *IsDashboardVisible)();
+ bool (OPENVR_FNTABLE_CALLTYPE *IsActiveDashboardOverlay)(VROverlayHandle_t ulOverlayHandle);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetDashboardOverlaySceneProcess)(VROverlayHandle_t ulOverlayHandle, uint32_t unProcessId);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetDashboardOverlaySceneProcess)(VROverlayHandle_t ulOverlayHandle, uint32_t * punProcessId);
+ void (OPENVR_FNTABLE_CALLTYPE *ShowDashboard)(char * pchOverlayToShow);
+ TrackedDeviceIndex_t (OPENVR_FNTABLE_CALLTYPE *GetPrimaryDashboardDevice)();
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ShowKeyboard)(EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, char * pchDescription, uint32_t unCharMax, char * pchExistingText, bool bUseMinimalMode, uint64_t uUserValue);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ShowKeyboardForOverlay)(VROverlayHandle_t ulOverlayHandle, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, char * pchDescription, uint32_t unCharMax, char * pchExistingText, bool bUseMinimalMode, uint64_t uUserValue);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetKeyboardText)(char * pchText, uint32_t cchText);
+ void (OPENVR_FNTABLE_CALLTYPE *HideKeyboard)();
+ void (OPENVR_FNTABLE_CALLTYPE *SetKeyboardTransformAbsolute)(ETrackingUniverseOrigin eTrackingOrigin, struct HmdMatrix34_t * pmatTrackingOriginToKeyboardTransform);
+ void (OPENVR_FNTABLE_CALLTYPE *SetKeyboardPositionForOverlay)(VROverlayHandle_t ulOverlayHandle, struct HmdRect2_t avoidRect);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayIntersectionMask)(VROverlayHandle_t ulOverlayHandle, struct VROverlayIntersectionMaskPrimitive_t * pMaskPrimitives, uint32_t unNumMaskPrimitives, uint32_t unPrimitiveSize);
+ EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayFlags)(VROverlayHandle_t ulOverlayHandle, uint32_t * pFlags);
+ VRMessageOverlayResponse (OPENVR_FNTABLE_CALLTYPE *ShowMessageOverlay)(char * pchText, char * pchCaption, char * pchButton0Text, char * pchButton1Text, char * pchButton2Text, char * pchButton3Text);
+};
+
+struct VR_IVRRenderModels_FnTable
+{
+ EVRRenderModelError (OPENVR_FNTABLE_CALLTYPE *LoadRenderModel_Async)(char * pchRenderModelName, struct RenderModel_t ** ppRenderModel);
+ void (OPENVR_FNTABLE_CALLTYPE *FreeRenderModel)(struct RenderModel_t * pRenderModel);
+ EVRRenderModelError (OPENVR_FNTABLE_CALLTYPE *LoadTexture_Async)(TextureID_t textureId, struct RenderModel_TextureMap_t ** ppTexture);
+ void (OPENVR_FNTABLE_CALLTYPE *FreeTexture)(struct RenderModel_TextureMap_t * pTexture);
+ EVRRenderModelError (OPENVR_FNTABLE_CALLTYPE *LoadTextureD3D11_Async)(TextureID_t textureId, void * pD3D11Device, void ** ppD3D11Texture2D);
+ EVRRenderModelError (OPENVR_FNTABLE_CALLTYPE *LoadIntoTextureD3D11_Async)(TextureID_t textureId, void * pDstTexture);
+ void (OPENVR_FNTABLE_CALLTYPE *FreeTextureD3D11)(void * pD3D11Texture2D);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetRenderModelName)(uint32_t unRenderModelIndex, char * pchRenderModelName, uint32_t unRenderModelNameLen);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetRenderModelCount)();
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetComponentCount)(char * pchRenderModelName);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetComponentName)(char * pchRenderModelName, uint32_t unComponentIndex, char * pchComponentName, uint32_t unComponentNameLen);
+ uint64_t (OPENVR_FNTABLE_CALLTYPE *GetComponentButtonMask)(char * pchRenderModelName, char * pchComponentName);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetComponentRenderModelName)(char * pchRenderModelName, char * pchComponentName, char * pchComponentRenderModelName, uint32_t unComponentRenderModelNameLen);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetComponentState)(char * pchRenderModelName, char * pchComponentName, VRControllerState_t * pControllerState, struct RenderModel_ControllerMode_State_t * pState, struct RenderModel_ComponentState_t * pComponentState);
+ bool (OPENVR_FNTABLE_CALLTYPE *RenderModelHasComponent)(char * pchRenderModelName, char * pchComponentName);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetRenderModelThumbnailURL)(char * pchRenderModelName, char * pchThumbnailURL, uint32_t unThumbnailURLLen, EVRRenderModelError * peError);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetRenderModelOriginalPath)(char * pchRenderModelName, char * pchOriginalPath, uint32_t unOriginalPathLen, EVRRenderModelError * peError);
+ char * (OPENVR_FNTABLE_CALLTYPE *GetRenderModelErrorNameFromEnum)(EVRRenderModelError error);
+};
+
+struct VR_IVRNotifications_FnTable
+{
+ EVRNotificationError (OPENVR_FNTABLE_CALLTYPE *CreateNotification)(VROverlayHandle_t ulOverlayHandle, uint64_t ulUserValue, EVRNotificationType type, char * pchText, EVRNotificationStyle style, struct NotificationBitmap_t * pImage, VRNotificationId * pNotificationId);
+ EVRNotificationError (OPENVR_FNTABLE_CALLTYPE *RemoveNotification)(VRNotificationId notificationId);
+};
+
+struct VR_IVRSettings_FnTable
+{
+ char * (OPENVR_FNTABLE_CALLTYPE *GetSettingsErrorNameFromEnum)(EVRSettingsError eError);
+ bool (OPENVR_FNTABLE_CALLTYPE *Sync)(bool bForce, EVRSettingsError * peError);
+ void (OPENVR_FNTABLE_CALLTYPE *SetBool)(char * pchSection, char * pchSettingsKey, bool bValue, EVRSettingsError * peError);
+ void (OPENVR_FNTABLE_CALLTYPE *SetInt32)(char * pchSection, char * pchSettingsKey, int32_t nValue, EVRSettingsError * peError);
+ void (OPENVR_FNTABLE_CALLTYPE *SetFloat)(char * pchSection, char * pchSettingsKey, float flValue, EVRSettingsError * peError);
+ void (OPENVR_FNTABLE_CALLTYPE *SetString)(char * pchSection, char * pchSettingsKey, char * pchValue, EVRSettingsError * peError);
+ bool (OPENVR_FNTABLE_CALLTYPE *GetBool)(char * pchSection, char * pchSettingsKey, EVRSettingsError * peError);
+ int32_t (OPENVR_FNTABLE_CALLTYPE *GetInt32)(char * pchSection, char * pchSettingsKey, EVRSettingsError * peError);
+ float (OPENVR_FNTABLE_CALLTYPE *GetFloat)(char * pchSection, char * pchSettingsKey, EVRSettingsError * peError);
+ void (OPENVR_FNTABLE_CALLTYPE *GetString)(char * pchSection, char * pchSettingsKey, char * pchValue, uint32_t unValueLen, EVRSettingsError * peError);
+ void (OPENVR_FNTABLE_CALLTYPE *RemoveSection)(char * pchSection, EVRSettingsError * peError);
+ void (OPENVR_FNTABLE_CALLTYPE *RemoveKeyInSection)(char * pchSection, char * pchSettingsKey, EVRSettingsError * peError);
+};
+
+struct VR_IVRScreenshots_FnTable
+{
+ EVRScreenshotError (OPENVR_FNTABLE_CALLTYPE *RequestScreenshot)(ScreenshotHandle_t * pOutScreenshotHandle, EVRScreenshotType type, char * pchPreviewFilename, char * pchVRFilename);
+ EVRScreenshotError (OPENVR_FNTABLE_CALLTYPE *HookScreenshot)(EVRScreenshotType * pSupportedTypes, int numTypes);
+ EVRScreenshotType (OPENVR_FNTABLE_CALLTYPE *GetScreenshotPropertyType)(ScreenshotHandle_t screenshotHandle, EVRScreenshotError * pError);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetScreenshotPropertyFilename)(ScreenshotHandle_t screenshotHandle, EVRScreenshotPropertyFilenames filenameType, char * pchFilename, uint32_t cchFilename, EVRScreenshotError * pError);
+ EVRScreenshotError (OPENVR_FNTABLE_CALLTYPE *UpdateScreenshotProgress)(ScreenshotHandle_t screenshotHandle, float flProgress);
+ EVRScreenshotError (OPENVR_FNTABLE_CALLTYPE *TakeStereoScreenshot)(ScreenshotHandle_t * pOutScreenshotHandle, char * pchPreviewFilename, char * pchVRFilename);
+ EVRScreenshotError (OPENVR_FNTABLE_CALLTYPE *SubmitScreenshot)(ScreenshotHandle_t screenshotHandle, EVRScreenshotType type, char * pchSourcePreviewFilename, char * pchSourceVRFilename);
+};
+
+struct VR_IVRResources_FnTable
+{
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *LoadSharedResource)(char * pchResourceName, char * pchBuffer, uint32_t unBufferLen);
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetResourceFullPath)(char * pchResourceName, char * pchResourceTypeDirectory, char * pchPathBuffer, uint32_t unBufferLen);
+};
+
+struct VR_IVRDriverManager_FnTable
+{
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetDriverCount)();
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetDriverName)(DriverId_t nDriver, char * pchValue, uint32_t unBufferSize);
+};
+
+
+#if 0
+// Global entry points
+S_API intptr_t VR_InitInternal( EVRInitError *peError, EVRApplicationType eType );
+S_API void VR_ShutdownInternal();
+S_API bool VR_IsHmdPresent();
+S_API intptr_t VR_GetGenericInterface( const char *pchInterfaceVersion, EVRInitError *peError );
+S_API bool VR_IsRuntimeInstalled();
+S_API const char * VR_GetVRInitErrorAsSymbol( EVRInitError error );
+S_API const char * VR_GetVRInitErrorAsEnglishDescription( EVRInitError error );
+#endif
+
+#endif // __OPENVR_API_FLAT_H__
+
+
diff --git a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_driver.h b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_driver.h
new file mode 100644
index 0000000..bfe24c0
--- /dev/null
+++ b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_driver.h
@@ -0,0 +1,2677 @@
+#pragma once
+
+// openvr_driver.h
+//========= Copyright Valve Corporation ============//
+// Dynamically generated file. Do not modify this file directly.
+
+#ifndef _OPENVR_DRIVER_API
+#define _OPENVR_DRIVER_API
+
+#include <stdint.h>
+
+
+
+// vrtypes.h
+#ifndef _INCLUDE_VRTYPES_H
+#define _INCLUDE_VRTYPES_H
+
+// Forward declarations to avoid requiring vulkan.h
+struct VkDevice_T;
+struct VkPhysicalDevice_T;
+struct VkInstance_T;
+struct VkQueue_T;
+
+// Forward declarations to avoid requiring d3d12.h
+struct ID3D12Resource;
+struct ID3D12CommandQueue;
+
+namespace vr
+{
+#pragma pack( push, 8 )
+
+typedef void* glSharedTextureHandle_t;
+typedef int32_t glInt_t;
+typedef uint32_t glUInt_t;
+
+// right-handed system
+// +y is up
+// +x is to the right
+// -z is going away from you
+// Distance unit is meters
+struct HmdMatrix34_t
+{
+ float m[3][4];
+};
+
+struct HmdMatrix44_t
+{
+ float m[4][4];
+};
+
+struct HmdVector3_t
+{
+ float v[3];
+};
+
+struct HmdVector4_t
+{
+ float v[4];
+};
+
+struct HmdVector3d_t
+{
+ double v[3];
+};
+
+struct HmdVector2_t
+{
+ float v[2];
+};
+
+struct HmdQuaternion_t
+{
+ double w, x, y, z;
+};
+
+struct HmdColor_t
+{
+ float r, g, b, a;
+};
+
+struct HmdQuad_t
+{
+ HmdVector3_t vCorners[ 4 ];
+};
+
+struct HmdRect2_t
+{
+ HmdVector2_t vTopLeft;
+ HmdVector2_t vBottomRight;
+};
+
+/** Used to return the post-distortion UVs for each color channel.
+* UVs range from 0 to 1 with 0,0 in the upper left corner of the
+* source render target. The 0,0 to 1,1 range covers a single eye. */
+struct DistortionCoordinates_t
+{
+ float rfRed[2];
+ float rfGreen[2];
+ float rfBlue[2];
+};
+
+enum EVREye
+{
+ Eye_Left = 0,
+ Eye_Right = 1
+};
+
+enum ETextureType
+{
+ TextureType_DirectX = 0, // Handle is an ID3D11Texture
+ TextureType_OpenGL = 1, // Handle is an OpenGL texture name or an OpenGL render buffer name, depending on submit flags
+ TextureType_Vulkan = 2, // Handle is a pointer to a VRVulkanTextureData_t structure
+ TextureType_IOSurface = 3, // Handle is a macOS cross-process-sharable IOSurfaceRef
+ TextureType_DirectX12 = 4, // Handle is a pointer to a D3D12TextureData_t structure
+};
+
+enum EColorSpace
+{
+ ColorSpace_Auto = 0, // Assumes 'gamma' for 8-bit per component formats, otherwise 'linear'. This mirrors the DXGI formats which have _SRGB variants.
+ ColorSpace_Gamma = 1, // Texture data can be displayed directly on the display without any conversion (a.k.a. display native format).
+ ColorSpace_Linear = 2, // Same as gamma but has been converted to a linear representation using DXGI's sRGB conversion algorithm.
+};
+
+struct Texture_t
+{
+ void* handle; // See ETextureType definition above
+ ETextureType eType;
+ EColorSpace eColorSpace;
+};
+
+// Handle to a shared texture (HANDLE on Windows obtained using OpenSharedResource).
+typedef uint64_t SharedTextureHandle_t;
+#define INVALID_SHARED_TEXTURE_HANDLE ((vr::SharedTextureHandle_t)0)
+
+enum ETrackingResult
+{
+ TrackingResult_Uninitialized = 1,
+
+ TrackingResult_Calibrating_InProgress = 100,
+ TrackingResult_Calibrating_OutOfRange = 101,
+
+ TrackingResult_Running_OK = 200,
+ TrackingResult_Running_OutOfRange = 201,
+};
+
+typedef uint32_t DriverId_t;
+static const uint32_t k_nDriverNone = 0xFFFFFFFF;
+
+static const uint32_t k_unMaxDriverDebugResponseSize = 32768;
+
+/** Used to pass device IDs to API calls */
+typedef uint32_t TrackedDeviceIndex_t;
+static const uint32_t k_unTrackedDeviceIndex_Hmd = 0;
+static const uint32_t k_unMaxTrackedDeviceCount = 16;
+static const uint32_t k_unTrackedDeviceIndexOther = 0xFFFFFFFE;
+static const uint32_t k_unTrackedDeviceIndexInvalid = 0xFFFFFFFF;
+
+/** Describes what kind of object is being tracked at a given ID */
+enum ETrackedDeviceClass
+{
+ TrackedDeviceClass_Invalid = 0, // the ID was not valid.
+ TrackedDeviceClass_HMD = 1, // Head-Mounted Displays
+ TrackedDeviceClass_Controller = 2, // Tracked controllers
+ TrackedDeviceClass_GenericTracker = 3, // Generic trackers, similar to controllers
+ TrackedDeviceClass_TrackingReference = 4, // Camera and base stations that serve as tracking reference points
+ TrackedDeviceClass_DisplayRedirect = 5, // Accessories that aren't necessarily tracked themselves, but may redirect video output from other tracked devices
+};
+
+
+/** Describes what specific role associated with a tracked device */
+enum ETrackedControllerRole
+{
+ TrackedControllerRole_Invalid = 0, // Invalid value for controller type
+ TrackedControllerRole_LeftHand = 1, // Tracked device associated with the left hand
+ TrackedControllerRole_RightHand = 2, // Tracked device associated with the right hand
+};
+
+
+/** describes a single pose for a tracked object */
+struct TrackedDevicePose_t
+{
+ HmdMatrix34_t mDeviceToAbsoluteTracking;
+ HmdVector3_t vVelocity; // velocity in tracker space in m/s
+ HmdVector3_t vAngularVelocity; // angular velocity in radians/s (?)
+ ETrackingResult eTrackingResult;
+ bool bPoseIsValid;
+
+ // This indicates that there is a device connected for this spot in the pose array.
+ // It could go from true to false if the user unplugs the device.
+ bool bDeviceIsConnected;
+};
+
+/** Identifies which style of tracking origin the application wants to use
+* for the poses it is requesting */
+enum ETrackingUniverseOrigin
+{
+ TrackingUniverseSeated = 0, // Poses are provided relative to the seated zero pose
+ TrackingUniverseStanding = 1, // Poses are provided relative to the safe bounds configured by the user
+ TrackingUniverseRawAndUncalibrated = 2, // Poses are provided in the coordinate system defined by the driver. It has Y up and is unified for devices of the same driver. You usually don't want this one.
+};
+
+// Refers to a single container of properties
+typedef uint64_t PropertyContainerHandle_t;
+typedef uint32_t PropertyTypeTag_t;
+
+static const PropertyContainerHandle_t k_ulInvalidPropertyContainer = 0;
+static const PropertyTypeTag_t k_unInvalidPropertyTag = 0;
+
+// Use these tags to set/get common types as struct properties
+static const PropertyTypeTag_t k_unFloatPropertyTag = 1;
+static const PropertyTypeTag_t k_unInt32PropertyTag = 2;
+static const PropertyTypeTag_t k_unUint64PropertyTag = 3;
+static const PropertyTypeTag_t k_unBoolPropertyTag = 4;
+static const PropertyTypeTag_t k_unStringPropertyTag = 5;
+
+static const PropertyTypeTag_t k_unHmdMatrix34PropertyTag = 20;
+static const PropertyTypeTag_t k_unHmdMatrix44PropertyTag = 21;
+static const PropertyTypeTag_t k_unHmdVector3PropertyTag = 22;
+static const PropertyTypeTag_t k_unHmdVector4PropertyTag = 23;
+
+static const PropertyTypeTag_t k_unHiddenAreaPropertyTag = 30;
+
+static const PropertyTypeTag_t k_unOpenVRInternalReserved_Start = 1000;
+static const PropertyTypeTag_t k_unOpenVRInternalReserved_End = 10000;
+
+
+/** Each entry in this enum represents a property that can be retrieved about a
+* tracked device. Many fields are only valid for one ETrackedDeviceClass. */
+enum ETrackedDeviceProperty
+{
+ Prop_Invalid = 0,
+
+ // general properties that apply to all device classes
+ 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, // 0 is empty, 1 is full
+ 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,
+
+ // Properties that are unique to TrackedDeviceClass_HMD
+ 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,
+
+ // Properties that are unique to TrackedDeviceClass_Controller
+ Prop_AttachedDeviceId_String = 3000,
+ Prop_SupportedButtons_Uint64 = 3001,
+ Prop_Axis0Type_Int32 = 3002, // Return value is of type EVRControllerAxisType
+ Prop_Axis1Type_Int32 = 3003, // Return value is of type EVRControllerAxisType
+ Prop_Axis2Type_Int32 = 3004, // Return value is of type EVRControllerAxisType
+ Prop_Axis3Type_Int32 = 3005, // Return value is of type EVRControllerAxisType
+ Prop_Axis4Type_Int32 = 3006, // Return value is of type EVRControllerAxisType
+ Prop_ControllerRoleHint_Int32 = 3007, // Return value is of type ETrackedControllerRole
+
+ // Properties that are unique to TrackedDeviceClass_TrackingReference
+ 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,
+
+ // Properties that are used for user interface like icons names
+ Prop_IconPathName_String = 5000, // DEPRECATED. Value not referenced. Now expected to be part of icon path properties.
+ Prop_NamedIconPathDeviceOff_String = 5001, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceSearching_String = 5002, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceSearchingAlert_String = 5003, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceReady_String = 5004, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceReadyAlert_String = 5005, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceNotReady_String = 5006, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceStandby_String = 5007, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+ Prop_NamedIconPathDeviceAlertLow_String = 5008, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others
+
+ // Properties that are used by helpers, but are opaque to applications
+ Prop_DisplayHiddenArea_Binary_Start = 5100,
+ Prop_DisplayHiddenArea_Binary_End = 5150,
+
+ // Properties that are unique to drivers
+ 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,
+
+ // Vendors are free to expose private debug data in this reserved region
+ Prop_VendorSpecific_Reserved_Start = 10000,
+ Prop_VendorSpecific_Reserved_End = 10999,
+};
+
+/** No string property will ever be longer than this length */
+static const uint32_t k_unMaxPropertyStringSize = 32 * 1024;
+
+/** Used to return errors that occur when reading properties. */
+enum ETrackedPropertyError
+{
+ TrackedProp_Success = 0,
+ TrackedProp_WrongDataType = 1,
+ TrackedProp_WrongDeviceClass = 2,
+ TrackedProp_BufferTooSmall = 3,
+ TrackedProp_UnknownProperty = 4, // Driver has not set the property (and may not ever).
+ TrackedProp_InvalidDevice = 5,
+ TrackedProp_CouldNotContactServer = 6,
+ TrackedProp_ValueNotProvidedByDevice = 7,
+ TrackedProp_StringExceedsMaximumLength = 8,
+ TrackedProp_NotYetAvailable = 9, // The property value isn't known yet, but is expected soon. Call again later.
+ TrackedProp_PermissionDenied = 10,
+ TrackedProp_InvalidOperation = 11,
+};
+
+/** Allows the application to control what part of the provided texture will be used in the
+* frame buffer. */
+struct VRTextureBounds_t
+{
+ float uMin, vMin;
+ float uMax, vMax;
+};
+
+
+/** Allows the application to control how scene textures are used by the compositor when calling Submit. */
+enum EVRSubmitFlags
+{
+ // Simple render path. App submits rendered left and right eye images with no lens distortion correction applied.
+ Submit_Default = 0x00,
+
+ // App submits final left and right eye images with lens distortion already applied (lens distortion makes the images appear
+ // barrel distorted with chromatic aberration correction applied). The app would have used the data returned by
+ // vr::IVRSystem::ComputeDistortion() to apply the correct distortion to the rendered images before calling Submit().
+ Submit_LensDistortionAlreadyApplied = 0x01,
+
+ // If the texture pointer passed in is actually a renderbuffer (e.g. for MSAA in OpenGL) then set this flag.
+ Submit_GlRenderBuffer = 0x02,
+
+ // Do not use
+ Submit_Reserved = 0x04,
+};
+
+/** Data required for passing Vulkan textures to IVRCompositor::Submit.
+* Be sure to call OpenVR_Shutdown before destroying these resources. */
+struct VRVulkanTextureData_t
+{
+ uint64_t m_nImage; // VkImage
+ VkDevice_T *m_pDevice;
+ VkPhysicalDevice_T *m_pPhysicalDevice;
+ VkInstance_T *m_pInstance;
+ VkQueue_T *m_pQueue;
+ uint32_t m_nQueueFamilyIndex;
+ uint32_t m_nWidth, m_nHeight, m_nFormat, m_nSampleCount;
+};
+
+/** Data required for passing D3D12 textures to IVRCompositor::Submit.
+* Be sure to call OpenVR_Shutdown before destroying these resources. */
+struct D3D12TextureData_t
+{
+ ID3D12Resource *m_pResource;
+ ID3D12CommandQueue *m_pCommandQueue;
+ uint32_t m_nNodeMask;
+};
+
+/** Status of the overall system or tracked objects */
+enum EVRState
+{
+ VRState_Undefined = -1,
+ VRState_Off = 0,
+ VRState_Searching = 1,
+ VRState_Searching_Alert = 2,
+ VRState_Ready = 3,
+ VRState_Ready_Alert = 4,
+ VRState_NotReady = 5,
+ VRState_Standby = 6,
+ VRState_Ready_Alert_Low = 7,
+};
+
+/** The types of events that could be posted (and what the parameters mean for each event type) */
+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_ButtonPress = 200, // data is controller
+ VREvent_ButtonUnpress = 201, // data is controller
+ VREvent_ButtonTouch = 202, // data is controller
+ VREvent_ButtonUntouch = 203, // data is controller
+
+ VREvent_MouseMove = 300, // data is mouse
+ VREvent_MouseButtonDown = 301, // data is mouse
+ VREvent_MouseButtonUp = 302, // data is mouse
+ VREvent_FocusEnter = 303, // data is overlay
+ VREvent_FocusLeave = 304, // data is overlay
+ VREvent_Scroll = 305, // data is mouse
+ VREvent_TouchPadMove = 306, // data is mouse
+ VREvent_OverlayFocusChanged = 307, // data is overlay, global event
+
+ VREvent_InputFocusCaptured = 400, // data is process DEPRECATED
+ VREvent_InputFocusReleased = 401, // data is process DEPRECATED
+ VREvent_SceneFocusLost = 402, // data is process
+ VREvent_SceneFocusGained = 403, // data is process
+ VREvent_SceneApplicationChanged = 404, // data is process - The App actually drawing the scene changed (usually to or from the compositor)
+ VREvent_SceneFocusChanged = 405, // data is process - New app got access to draw the scene
+ VREvent_InputFocusChanged = 406, // data is process
+ VREvent_SceneApplicationSecondaryRenderingStarted = 407, // data is process
+
+ VREvent_HideRenderModels = 410, // Sent to the scene application to request hiding render models temporarily
+ VREvent_ShowRenderModels = 411, // Sent to the scene application to request restoring render model visibility
+
+ VREvent_OverlayShown = 500,
+ VREvent_OverlayHidden = 501,
+ VREvent_DashboardActivated = 502,
+ VREvent_DashboardDeactivated = 503,
+ VREvent_DashboardThumbSelected = 504, // Sent to the overlay manager - data is overlay
+ VREvent_DashboardRequested = 505, // Sent to the overlay manager - data is overlay
+ VREvent_ResetDashboard = 506, // Send to the overlay manager
+ VREvent_RenderToast = 507, // Send to the dashboard to render a toast - data is the notification ID
+ VREvent_ImageLoaded = 508, // Sent to overlays when a SetOverlayRaw or SetOverlayFromFile call finishes loading
+ VREvent_ShowKeyboard = 509, // Sent to keyboard renderer in the dashboard to invoke it
+ VREvent_HideKeyboard = 510, // Sent to keyboard renderer in the dashboard to hide it
+ VREvent_OverlayGamepadFocusGained = 511, // Sent to an overlay when IVROverlay::SetFocusOverlay is called on it
+ VREvent_OverlayGamepadFocusLost = 512, // Send to an overlay when it previously had focus and IVROverlay::SetFocusOverlay is called on something else
+ VREvent_OverlaySharedTextureChanged = 513,
+ VREvent_DashboardGuideButtonDown = 514,
+ VREvent_DashboardGuideButtonUp = 515,
+ VREvent_ScreenshotTriggered = 516, // Screenshot button combo was pressed, Dashboard should request a screenshot
+ VREvent_ImageFailed = 517, // Sent to overlays when a SetOverlayRaw or SetOverlayfromFail fails to load
+ VREvent_DashboardOverlayCreated = 518,
+
+ // Screenshot API
+ VREvent_RequestScreenshot = 520, // Sent by vrclient application to compositor to take a screenshot
+ VREvent_ScreenshotTaken = 521, // Sent by compositor to the application that the screenshot has been taken
+ VREvent_ScreenshotFailed = 522, // Sent by compositor to the application that the screenshot failed to be taken
+ VREvent_SubmitScreenshotToDashboard = 523, // Sent by compositor to the dashboard that a completed screenshot was submitted
+ VREvent_ScreenshotProgressToDashboard = 524, // Sent by compositor to the dashboard that a completed screenshot was submitted
+
+ VREvent_PrimaryDashboardDeviceChanged = 525,
+
+ VREvent_Notification_Shown = 600,
+ VREvent_Notification_Hidden = 601,
+ VREvent_Notification_BeginInteraction = 602,
+ VREvent_Notification_Destroyed = 603,
+
+ VREvent_Quit = 700, // data is process
+ VREvent_ProcessQuit = 701, // data is process
+ VREvent_QuitAborted_UserPrompt = 702, // data is process
+ VREvent_QuitAcknowledged = 703, // data is process
+ VREvent_DriverRequestedQuit = 704, // The driver has requested that SteamVR shut down
+
+ VREvent_ChaperoneDataHasChanged = 800,
+ VREvent_ChaperoneUniverseHasChanged = 801,
+ VREvent_ChaperoneTempDataHasChanged = 802,
+ VREvent_ChaperoneSettingsHaveChanged = 803,
+ VREvent_SeatedZeroPoseReset = 804,
+
+ 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_StatusUpdate = 900,
+
+ VREvent_MCImageUpdated = 1000,
+
+ VREvent_FirmwareUpdateStarted = 1100,
+ VREvent_FirmwareUpdateFinished = 1101,
+
+ VREvent_KeyboardClosed = 1200,
+ VREvent_KeyboardCharInput = 1201,
+ VREvent_KeyboardDone = 1202, // Sent when DONE button clicked on keyboard
+
+ VREvent_ApplicationTransitionStarted = 1300,
+ VREvent_ApplicationTransitionAborted = 1301,
+ VREvent_ApplicationTransitionNewAppStarted = 1302,
+ VREvent_ApplicationListUpdated = 1303,
+ VREvent_ApplicationMimeTypeLoad = 1304,
+ VREvent_ApplicationTransitionNewAppLaunchComplete = 1305,
+ VREvent_ProcessConnected = 1306,
+ VREvent_ProcessDisconnected = 1307,
+
+ VREvent_Compositor_MirrorWindowShown = 1400,
+ VREvent_Compositor_MirrorWindowHidden = 1401,
+ VREvent_Compositor_ChaperoneBoundsShown = 1410,
+ VREvent_Compositor_ChaperoneBoundsHidden = 1411,
+
+ 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,
+
+ // Vendors are free to expose private events in this reserved region
+ VREvent_VendorSpecific_Reserved_Start = 10000,
+ VREvent_VendorSpecific_Reserved_End = 19999,
+};
+
+
+/** Level of Hmd activity */
+// UserInteraction_Timeout means the device is in the process of timing out.
+// InUse = ( k_EDeviceActivityLevel_UserInteraction || k_EDeviceActivityLevel_UserInteraction_Timeout )
+// VREvent_TrackedDeviceUserInteractionStarted fires when the devices transitions from Standby -> UserInteraction or Idle -> UserInteraction.
+// VREvent_TrackedDeviceUserInteractionEnded fires when the devices transitions from UserInteraction_Timeout -> Idle
+enum EDeviceActivityLevel
+{
+ k_EDeviceActivityLevel_Unknown = -1,
+ k_EDeviceActivityLevel_Idle = 0, // No activity for the last 10 seconds
+ k_EDeviceActivityLevel_UserInteraction = 1, // Activity (movement or prox sensor) is happening now
+ k_EDeviceActivityLevel_UserInteraction_Timeout = 2, // No activity for the last 0.5 seconds
+ k_EDeviceActivityLevel_Standby = 3, // Idle for at least 5 seconds (configurable in Settings -> Power Management)
+};
+
+
+/** VR controller button and axis IDs */
+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,
+
+ // aliases for well known controllers
+ k_EButton_SteamVR_Touchpad = k_EButton_Axis0,
+ k_EButton_SteamVR_Trigger = k_EButton_Axis1,
+
+ k_EButton_Dashboard_Back = k_EButton_Grip,
+
+ k_EButton_Max = 64
+};
+
+inline uint64_t ButtonMaskFromId( EVRButtonId id ) { return 1ull << id; }
+
+/** used for controller button events */
+struct VREvent_Controller_t
+{
+ uint32_t button; // EVRButtonId enum
+};
+
+
+/** used for simulated mouse events in overlay space */
+enum EVRMouseButton
+{
+ VRMouseButton_Left = 0x0001,
+ VRMouseButton_Right = 0x0002,
+ VRMouseButton_Middle = 0x0004,
+};
+
+
+/** used for simulated mouse events in overlay space */
+struct VREvent_Mouse_t
+{
+ float x, y; // co-ords are in GL space, bottom left of the texture is 0,0
+ uint32_t button; // EVRMouseButton enum
+};
+
+/** used for simulated mouse wheel scroll in overlay space */
+struct VREvent_Scroll_t
+{
+ float xdelta, ydelta; // movement in fraction of the pad traversed since last delta, 1.0 for a full swipe
+ uint32_t repeatCount;
+};
+
+/** when in mouse input mode you can receive data from the touchpad, these events are only sent if the users finger
+ is on the touchpad (or just released from it)
+**/
+struct VREvent_TouchPadMove_t
+{
+ // true if the users finger is detected on the touch pad
+ bool bFingerDown;
+
+ // How long the finger has been down in seconds
+ float flSecondsFingerDown;
+
+ // These values indicate the starting finger position (so you can do some basic swipe stuff)
+ float fValueXFirst;
+ float fValueYFirst;
+
+ // This is the raw sampled coordinate without deadzoning
+ float fValueXRaw;
+ float fValueYRaw;
+};
+
+/** notification related events. Details will still change at this point */
+struct VREvent_Notification_t
+{
+ uint64_t ulUserValue;
+ uint32_t notificationId;
+};
+
+/** Used for events about processes */
+struct VREvent_Process_t
+{
+ uint32_t pid;
+ uint32_t oldPid;
+ bool bForced;
+};
+
+
+/** Used for a few events about overlays */
+struct VREvent_Overlay_t
+{
+ uint64_t overlayHandle;
+};
+
+
+/** Used for a few events about overlays */
+struct VREvent_Status_t
+{
+ uint32_t statusState; // EVRState enum
+};
+
+/** Used for keyboard events **/
+struct VREvent_Keyboard_t
+{
+ char cNewInput[8]; // Up to 11 bytes of new input
+ uint64_t uUserValue; // Possible flags about the new input
+};
+
+struct VREvent_Ipd_t
+{
+ float ipdMeters;
+};
+
+struct VREvent_Chaperone_t
+{
+ uint64_t m_nPreviousUniverse;
+ uint64_t m_nCurrentUniverse;
+};
+
+/** Not actually used for any events */
+struct VREvent_Reserved_t
+{
+ uint64_t reserved0;
+ uint64_t reserved1;
+};
+
+struct VREvent_PerformanceTest_t
+{
+ uint32_t m_nFidelityLevel;
+};
+
+struct VREvent_SeatedZeroPoseReset_t
+{
+ bool bResetBySystemMenu;
+};
+
+struct VREvent_Screenshot_t
+{
+ uint32_t handle;
+ uint32_t type;
+};
+
+struct VREvent_ScreenshotProgress_t
+{
+ float progress;
+};
+
+struct VREvent_ApplicationLaunch_t
+{
+ uint32_t pid;
+ uint32_t unArgsHandle;
+};
+
+struct VREvent_EditingCameraSurface_t
+{
+ uint64_t overlayHandle;
+ uint32_t nVisualMode;
+};
+
+struct VREvent_MessageOverlay_t
+{
+ uint32_t unVRMessageOverlayResponse; // vr::VRMessageOverlayResponse enum
+};
+
+struct VREvent_Property_t
+{
+ PropertyContainerHandle_t container;
+ ETrackedDeviceProperty prop;
+};
+
+/** NOTE!!! If you change this you MUST manually update openvr_interop.cs.py */
+typedef union
+{
+ VREvent_Reserved_t reserved;
+ VREvent_Controller_t controller;
+ VREvent_Mouse_t mouse;
+ VREvent_Scroll_t scroll;
+ VREvent_Process_t process;
+ VREvent_Notification_t notification;
+ VREvent_Overlay_t overlay;
+ VREvent_Status_t status;
+ VREvent_Keyboard_t keyboard;
+ VREvent_Ipd_t ipd;
+ VREvent_Chaperone_t chaperone;
+ VREvent_PerformanceTest_t performanceTest;
+ VREvent_TouchPadMove_t touchPadMove;
+ VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset;
+ VREvent_Screenshot_t screenshot;
+ VREvent_ScreenshotProgress_t screenshotProgress;
+ VREvent_ApplicationLaunch_t applicationLaunch;
+ VREvent_EditingCameraSurface_t cameraSurface;
+ VREvent_MessageOverlay_t messageOverlay;
+ VREvent_Property_t property;
+} VREvent_Data_t;
+
+
+#if defined(__linux__) || defined(__APPLE__)
+// This structure was originally defined mis-packed on Linux, preserved for
+// compatibility.
+#pragma pack( push, 4 )
+#endif
+
+/** An event posted by the server to all running applications */
+struct VREvent_t
+{
+ uint32_t eventType; // EVREventType enum
+ TrackedDeviceIndex_t trackedDeviceIndex;
+ float eventAgeSeconds;
+ // event data must be the end of the struct as its size is variable
+ VREvent_Data_t data;
+};
+
+#if defined(__linux__) || defined(__APPLE__)
+#pragma pack( pop )
+#endif
+
+/** The mesh to draw into the stencil (or depth) buffer to perform
+* early stencil (or depth) kills of pixels that will never appear on the HMD.
+* This mesh draws on all the pixels that will be hidden after distortion.
+*
+* If the HMD does not provide a visible area mesh pVertexData will be
+* NULL and unTriangleCount will be 0. */
+struct HiddenAreaMesh_t
+{
+ const HmdVector2_t *pVertexData;
+ uint32_t unTriangleCount;
+};
+
+
+enum EHiddenAreaMeshType
+{
+ k_eHiddenAreaMesh_Standard = 0,
+ k_eHiddenAreaMesh_Inverse = 1,
+ k_eHiddenAreaMesh_LineLoop = 2,
+
+ k_eHiddenAreaMesh_Max = 3,
+};
+
+
+/** Identifies what kind of axis is on the controller at index n. Read this type
+* with pVRSystem->Get( nControllerDeviceIndex, Prop_Axis0Type_Int32 + n );
+*/
+enum EVRControllerAxisType
+{
+ k_eControllerAxis_None = 0,
+ k_eControllerAxis_TrackPad = 1,
+ k_eControllerAxis_Joystick = 2,
+ k_eControllerAxis_Trigger = 3, // Analog trigger data is in the X axis
+};
+
+
+/** contains information about one axis on the controller */
+struct VRControllerAxis_t
+{
+ float x; // Ranges from -1.0 to 1.0 for joysticks and track pads. Ranges from 0.0 to 1.0 for triggers were 0 is fully released.
+ float y; // Ranges from -1.0 to 1.0 for joysticks and track pads. Is always 0.0 for triggers.
+};
+
+
+/** the number of axes in the controller state */
+static const uint32_t k_unControllerStateAxisCount = 5;
+
+
+#if defined(__linux__) || defined(__APPLE__)
+// This structure was originally defined mis-packed on Linux, preserved for
+// compatibility.
+#pragma pack( push, 4 )
+#endif
+
+/** Holds all the state of a controller at one moment in time. */
+struct VRControllerState001_t
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32_t unPacketNum;
+
+ // bit flags for each of the buttons. Use ButtonMaskFromId to turn an ID into a mask
+ uint64_t ulButtonPressed;
+ uint64_t ulButtonTouched;
+
+ // Axis data for the controller's analog inputs
+ VRControllerAxis_t rAxis[ k_unControllerStateAxisCount ];
+};
+#if defined(__linux__) || defined(__APPLE__)
+#pragma pack( pop )
+#endif
+
+
+typedef VRControllerState001_t VRControllerState_t;
+
+
+/** determines how to provide output to the application of various event processing functions. */
+enum EVRControllerEventOutputType
+{
+ ControllerEventOutput_OSEvents = 0,
+ ControllerEventOutput_VREvents = 1,
+};
+
+
+
+/** Collision Bounds Style */
+enum ECollisionBoundsStyle
+{
+ COLLISION_BOUNDS_STYLE_BEGINNER = 0,
+ COLLISION_BOUNDS_STYLE_INTERMEDIATE,
+ COLLISION_BOUNDS_STYLE_SQUARES,
+ COLLISION_BOUNDS_STYLE_ADVANCED,
+ COLLISION_BOUNDS_STYLE_NONE,
+
+ COLLISION_BOUNDS_STYLE_COUNT
+};
+
+/** Allows the application to customize how the overlay appears in the compositor */
+struct Compositor_OverlaySettings
+{
+ uint32_t size; // sizeof(Compositor_OverlaySettings)
+ bool curved, antialias;
+ float scale, distance, alpha;
+ float uOffset, vOffset, uScale, vScale;
+ float gridDivs, gridWidth, gridScale;
+ HmdMatrix44_t transform;
+};
+
+/** used to refer to a single VR overlay */
+typedef uint64_t VROverlayHandle_t;
+
+static const VROverlayHandle_t k_ulOverlayHandleInvalid = 0;
+
+/** Errors that can occur around VR overlays */
+enum EVROverlayError
+{
+ VROverlayError_None = 0,
+
+ VROverlayError_UnknownOverlay = 10,
+ VROverlayError_InvalidHandle = 11,
+ VROverlayError_PermissionDenied = 12,
+ VROverlayError_OverlayLimitExceeded = 13, // No more overlays could be created because the maximum number already exist
+ VROverlayError_WrongVisibilityType = 14,
+ VROverlayError_KeyTooLong = 15,
+ VROverlayError_NameTooLong = 16,
+ VROverlayError_KeyInUse = 17,
+ VROverlayError_WrongTransformType = 18,
+ VROverlayError_InvalidTrackedDevice = 19,
+ VROverlayError_InvalidParameter = 20,
+ VROverlayError_ThumbnailCantBeDestroyed = 21,
+ VROverlayError_ArrayTooSmall = 22,
+ VROverlayError_RequestFailed = 23,
+ VROverlayError_InvalidTexture = 24,
+ VROverlayError_UnableToLoadFile = 25,
+ VROverlayError_KeyboardAlreadyInUse = 26,
+ VROverlayError_NoNeighbor = 27,
+ VROverlayError_TooManyMaskPrimitives = 29,
+ VROverlayError_BadMaskPrimitive = 30,
+};
+
+/** enum values to pass in to VR_Init to identify whether the application will
+* draw a 3D scene. */
+enum EVRApplicationType
+{
+ VRApplication_Other = 0, // Some other kind of application that isn't covered by the other entries
+ VRApplication_Scene = 1, // Application will submit 3D frames
+ VRApplication_Overlay = 2, // Application only interacts with overlays
+ VRApplication_Background = 3, // Application should not start SteamVR if it's not already running, and should not
+ // keep it running if everything else quits.
+ VRApplication_Utility = 4, // Init should not try to load any drivers. The application needs access to utility
+ // interfaces (like IVRSettings and IVRApplications) but not hardware.
+ VRApplication_VRMonitor = 5, // Reserved for vrmonitor
+ VRApplication_SteamWatchdog = 6,// Reserved for Steam
+ VRApplication_Bootstrapper = 7, // Start up SteamVR
+
+ VRApplication_Max
+};
+
+
+/** error codes for firmware */
+enum EVRFirmwareError
+{
+ VRFirmwareError_None = 0,
+ VRFirmwareError_Success = 1,
+ VRFirmwareError_Fail = 2,
+};
+
+
+/** error codes for notifications */
+enum EVRNotificationError
+{
+ VRNotificationError_OK = 0,
+ VRNotificationError_InvalidNotificationId = 100,
+ VRNotificationError_NotificationQueueFull = 101,
+ VRNotificationError_InvalidOverlayHandle = 102,
+ VRNotificationError_SystemWithUserValueAlreadyExists = 103,
+};
+
+
+/** error codes returned by Vr_Init */
+
+// Please add adequate error description to https://developer.valvesoftware.com/w/index.php?title=Category:SteamVRHelp
+enum EVRInitError
+{
+ VRInitError_None = 0,
+ VRInitError_Unknown = 1,
+
+ VRInitError_Init_InstallationNotFound = 100,
+ VRInitError_Init_InstallationCorrupt = 101,
+ VRInitError_Init_VRClientDLLNotFound = 102,
+ VRInitError_Init_FileNotFound = 103,
+ VRInitError_Init_FactoryNotFound = 104,
+ VRInitError_Init_InterfaceNotFound = 105,
+ VRInitError_Init_InvalidInterface = 106,
+ VRInitError_Init_UserConfigDirectoryInvalid = 107,
+ VRInitError_Init_HmdNotFound = 108,
+ VRInitError_Init_NotInitialized = 109,
+ VRInitError_Init_PathRegistryNotFound = 110,
+ VRInitError_Init_NoConfigPath = 111,
+ VRInitError_Init_NoLogPath = 112,
+ VRInitError_Init_PathRegistryNotWritable = 113,
+ VRInitError_Init_AppInfoInitFailed = 114,
+ VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver
+ VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup
+ VRInitError_Init_AnotherAppLaunching = 117,
+ VRInitError_Init_SettingsInitFailed = 118,
+ VRInitError_Init_ShuttingDown = 119,
+ VRInitError_Init_TooManyObjects = 120,
+ VRInitError_Init_NoServerForBackgroundApp = 121,
+ VRInitError_Init_NotSupportedWithCompositor = 122,
+ VRInitError_Init_NotAvailableToUtilityApps = 123,
+ VRInitError_Init_Internal = 124,
+ VRInitError_Init_HmdDriverIdIsNone = 125,
+ VRInitError_Init_HmdNotFoundPresenceFailed = 126,
+ VRInitError_Init_VRMonitorNotFound = 127,
+ VRInitError_Init_VRMonitorStartupFailed = 128,
+ VRInitError_Init_LowPowerWatchdogNotSupported = 129,
+ VRInitError_Init_InvalidApplicationType = 130,
+ VRInitError_Init_NotAvailableToWatchdogApps = 131,
+ VRInitError_Init_WatchdogDisabledInSettings = 132,
+ VRInitError_Init_VRDashboardNotFound = 133,
+ VRInitError_Init_VRDashboardStartupFailed = 134,
+ VRInitError_Init_VRHomeNotFound = 135,
+ VRInitError_Init_VRHomeStartupFailed = 136,
+
+ VRInitError_Driver_Failed = 200,
+ VRInitError_Driver_Unknown = 201,
+ VRInitError_Driver_HmdUnknown = 202,
+ VRInitError_Driver_NotLoaded = 203,
+ VRInitError_Driver_RuntimeOutOfDate = 204,
+ VRInitError_Driver_HmdInUse = 205,
+ VRInitError_Driver_NotCalibrated = 206,
+ VRInitError_Driver_CalibrationInvalid = 207,
+ VRInitError_Driver_HmdDisplayNotFound = 208,
+ VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209,
+ // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons
+ VRInitError_Driver_HmdDriverIdOutOfBounds = 211,
+ VRInitError_Driver_HmdDisplayMirrored = 212,
+
+ VRInitError_IPC_ServerInitFailed = 300,
+ VRInitError_IPC_ConnectFailed = 301,
+ VRInitError_IPC_SharedStateInitFailed = 302,
+ VRInitError_IPC_CompositorInitFailed = 303,
+ VRInitError_IPC_MutexInitFailed = 304,
+ VRInitError_IPC_Failed = 305,
+ VRInitError_IPC_CompositorConnectFailed = 306,
+ VRInitError_IPC_CompositorInvalidConnectResponse = 307,
+ VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308,
+
+ VRInitError_Compositor_Failed = 400,
+ VRInitError_Compositor_D3D11HardwareRequired = 401,
+ VRInitError_Compositor_FirmwareRequiresUpdate = 402,
+ VRInitError_Compositor_OverlayInitFailed = 403,
+ VRInitError_Compositor_ScreenshotsInitFailed = 404,
+ VRInitError_Compositor_UnableToCreateDevice = 405,
+
+ VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
+
+ VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101,
+ VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102,
+ VRInitError_VendorSpecific_HmdFound_NoStoredConfig = 1103,
+ VRInitError_VendorSpecific_HmdFound_ConfigTooBig = 1104,
+ VRInitError_VendorSpecific_HmdFound_ConfigTooSmall = 1105,
+ VRInitError_VendorSpecific_HmdFound_UnableToInitZLib = 1106,
+ VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107,
+ VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108,
+ VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109,
+ VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110,
+ VRInitError_VendorSpecific_HmdFound_UserDataAddressRange = 1111,
+ VRInitError_VendorSpecific_HmdFound_UserDataError = 1112,
+ VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113,
+
+ VRInitError_Steam_SteamInstallationNotFound = 2000,
+};
+
+enum EVRScreenshotType
+{
+ VRScreenshotType_None = 0,
+ VRScreenshotType_Mono = 1, // left eye only
+ VRScreenshotType_Stereo = 2,
+ VRScreenshotType_Cubemap = 3,
+ VRScreenshotType_MonoPanorama = 4,
+ VRScreenshotType_StereoPanorama = 5
+};
+
+enum EVRScreenshotPropertyFilenames
+{
+ VRScreenshotPropertyFilenames_Preview = 0,
+ VRScreenshotPropertyFilenames_VR = 1,
+};
+
+enum EVRTrackedCameraError
+{
+ VRTrackedCameraError_None = 0,
+ VRTrackedCameraError_OperationFailed = 100,
+ VRTrackedCameraError_InvalidHandle = 101,
+ VRTrackedCameraError_InvalidFrameHeaderVersion = 102,
+ VRTrackedCameraError_OutOfHandles = 103,
+ VRTrackedCameraError_IPCFailure = 104,
+ VRTrackedCameraError_NotSupportedForThisDevice = 105,
+ VRTrackedCameraError_SharedMemoryFailure = 106,
+ VRTrackedCameraError_FrameBufferingFailure = 107,
+ VRTrackedCameraError_StreamSetupFailure = 108,
+ VRTrackedCameraError_InvalidGLTextureId = 109,
+ VRTrackedCameraError_InvalidSharedTextureHandle = 110,
+ VRTrackedCameraError_FailedToGetGLTextureId = 111,
+ VRTrackedCameraError_SharedTextureFailure = 112,
+ VRTrackedCameraError_NoFrameAvailable = 113,
+ VRTrackedCameraError_InvalidArgument = 114,
+ VRTrackedCameraError_InvalidFrameBufferSize = 115,
+};
+
+enum EVRTrackedCameraFrameType
+{
+ VRTrackedCameraFrameType_Distorted = 0, // This is the camera video frame size in pixels, still distorted.
+ VRTrackedCameraFrameType_Undistorted, // In pixels, an undistorted inscribed rectangle region without invalid regions. This size is subject to changes shortly.
+ VRTrackedCameraFrameType_MaximumUndistorted, // In pixels, maximum undistorted with invalid regions. Non zero alpha component identifies valid regions.
+ MAX_CAMERA_FRAME_TYPES
+};
+
+typedef uint64_t TrackedCameraHandle_t;
+#define INVALID_TRACKED_CAMERA_HANDLE ((vr::TrackedCameraHandle_t)0)
+
+struct CameraVideoStreamFrameHeader_t
+{
+ EVRTrackedCameraFrameType eFrameType;
+
+ uint32_t nWidth;
+ uint32_t nHeight;
+ uint32_t nBytesPerPixel;
+
+ uint32_t nFrameSequence;
+
+ TrackedDevicePose_t standingTrackedDevicePose;
+};
+
+// Screenshot types
+typedef uint32_t ScreenshotHandle_t;
+
+static const uint32_t k_unScreenshotHandleInvalid = 0;
+
+#pragma pack( pop )
+
+// figure out how to import from the VR API dll
+#if defined(_WIN32)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __declspec( dllexport )
+#else
+#define VR_INTERFACE extern "C" __declspec( dllimport )
+#endif
+
+#elif defined(__GNUC__) || defined(COMPILER_GCC) || defined(__APPLE__)
+
+#ifdef VR_API_EXPORT
+#define VR_INTERFACE extern "C" __attribute__((visibility("default")))
+#else
+#define VR_INTERFACE extern "C"
+#endif
+
+#else
+#error "Unsupported Platform."
+#endif
+
+
+#if defined( _WIN32 )
+#define VR_CALLTYPE __cdecl
+#else
+#define VR_CALLTYPE
+#endif
+
+} // namespace vr
+
+#endif // _INCLUDE_VRTYPES_H
+
+
+// vrannotation.h
+#ifdef API_GEN
+# define VR_CLANG_ATTR(ATTR) __attribute__((annotate( ATTR )))
+#else
+# define VR_CLANG_ATTR(ATTR)
+#endif
+
+#define VR_METHOD_DESC(DESC) VR_CLANG_ATTR( "desc:" #DESC ";" )
+#define VR_IGNOREATTR() VR_CLANG_ATTR( "ignore" )
+#define VR_OUT_STRUCT() VR_CLANG_ATTR( "out_struct: ;" )
+#define VR_OUT_STRING() VR_CLANG_ATTR( "out_string: ;" )
+#define VR_OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) VR_CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" )
+#define VR_OUT_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "out_array_count:" #COUNTER ";" )
+#define VR_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "array_count:" #COUNTER ";" )
+#define VR_ARRAY_COUNT_D(COUNTER, DESC) VR_CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC )
+#define VR_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "buffer_count:" #COUNTER ";" )
+#define VR_OUT_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "out_buffer_count:" #COUNTER ";" )
+#define VR_OUT_STRING_COUNT(COUNTER) VR_CLANG_ATTR( "out_string_count:" #COUNTER ";" )
+
+// vrtrackedcameratypes.h
+#ifndef _VRTRACKEDCAMERATYPES_H
+#define _VRTRACKEDCAMERATYPES_H
+
+namespace vr
+{
+
+#pragma pack( push, 8 )
+
+enum ECameraVideoStreamFormat
+{
+ CVS_FORMAT_UNKNOWN = 0,
+ CVS_FORMAT_RAW10 = 1, // 10 bits per pixel
+ CVS_FORMAT_NV12 = 2, // 12 bits per pixel
+ CVS_FORMAT_RGB24 = 3, // 24 bits per pixel
+ CVS_MAX_FORMATS
+};
+
+enum ECameraCompatibilityMode
+{
+ CAMERA_COMPAT_MODE_BULK_DEFAULT = 0,
+ CAMERA_COMPAT_MODE_BULK_64K_DMA,
+ CAMERA_COMPAT_MODE_BULK_16K_DMA,
+ CAMERA_COMPAT_MODE_BULK_8K_DMA,
+ CAMERA_COMPAT_MODE_ISO_52FPS,
+ CAMERA_COMPAT_MODE_ISO_50FPS,
+ CAMERA_COMPAT_MODE_ISO_48FPS,
+ CAMERA_COMPAT_MODE_ISO_46FPS,
+ CAMERA_COMPAT_MODE_ISO_44FPS,
+ CAMERA_COMPAT_MODE_ISO_42FPS,
+ CAMERA_COMPAT_MODE_ISO_40FPS,
+ CAMERA_COMPAT_MODE_ISO_35FPS,
+ CAMERA_COMPAT_MODE_ISO_30FPS,
+ MAX_CAMERA_COMPAT_MODES
+};
+
+#ifdef _MSC_VER
+#define VR_CAMERA_DECL_ALIGN( x ) __declspec( align( x ) )
+#else
+#define VR_CAMERA_DECL_ALIGN( x ) //
+#endif
+
+#define MAX_CAMERA_FRAME_SHARED_HANDLES 4
+
+VR_CAMERA_DECL_ALIGN( 8 ) struct CameraVideoStreamFrame_t
+{
+ ECameraVideoStreamFormat m_nStreamFormat;
+
+ uint32_t m_nWidth;
+ uint32_t m_nHeight;
+
+ uint32_t m_nImageDataSize; // Based on stream format, width, height
+
+ uint32_t m_nFrameSequence; // Starts from 0 when stream starts.
+
+ uint32_t m_nBufferIndex; // Identifies which buffer the image data is hosted
+ uint32_t m_nBufferCount; // Total number of configured buffers
+
+ uint32_t m_nExposureTime;
+
+ uint32_t m_nISPFrameTimeStamp; // Driver provided time stamp per driver centric time base
+ uint32_t m_nISPReferenceTimeStamp;
+ uint32_t m_nSyncCounter;
+
+ uint32_t m_nCamSyncEvents;
+ uint32_t m_nISPSyncEvents;
+
+ double m_flReferenceCamSyncTime;
+
+ double m_flFrameElapsedTime; // Starts from 0 when stream starts. In seconds.
+ double m_flFrameDeliveryRate;
+
+ double m_flFrameCaptureTime_DriverAbsolute; // In USB time, via AuxEvent
+ double m_flFrameCaptureTime_ServerRelative; // In System time within the server
+ uint64_t m_nFrameCaptureTicks_ServerAbsolute; // In system ticks within the server
+ double m_flFrameCaptureTime_ClientRelative; // At the client, relative to when the frame was exposed/captured.
+
+ double m_flSyncMarkerError;
+
+ TrackedDevicePose_t m_StandingTrackedDevicePose; // Supplied by HMD layer when used as a tracked camera
+
+ uint64_t m_pImageData;
+};
+
+#pragma pack( pop )
+
+}
+
+#endif // _VRTRACKEDCAMERATYPES_H
+// ivrsettings.h
+namespace vr
+{
+ enum EVRSettingsError
+ {
+ VRSettingsError_None = 0,
+ VRSettingsError_IPCFailed = 1,
+ VRSettingsError_WriteFailed = 2,
+ VRSettingsError_ReadFailed = 3,
+ VRSettingsError_JsonParseFailed = 4,
+ VRSettingsError_UnsetSettingHasNoDefault = 5, // This will be returned if the setting does not appear in the appropriate default file and has not been set
+ };
+
+ // The maximum length of a settings key
+ static const uint32_t k_unMaxSettingsKeyLength = 128;
+
+ class IVRSettings
+ {
+ public:
+ virtual const char *GetSettingsErrorNameFromEnum( EVRSettingsError eError ) = 0;
+
+ // Returns true if file sync occurred (force or settings dirty)
+ virtual bool Sync( bool bForce = false, EVRSettingsError *peError = nullptr ) = 0;
+
+ virtual void SetBool( const char *pchSection, const char *pchSettingsKey, bool bValue, EVRSettingsError *peError = nullptr ) = 0;
+ virtual void SetInt32( const char *pchSection, const char *pchSettingsKey, int32_t nValue, EVRSettingsError *peError = nullptr ) = 0;
+ virtual void SetFloat( const char *pchSection, const char *pchSettingsKey, float flValue, EVRSettingsError *peError = nullptr ) = 0;
+ virtual void SetString( const char *pchSection, const char *pchSettingsKey, const char *pchValue, EVRSettingsError *peError = nullptr ) = 0;
+
+ // Users of the system need to provide a proper default in default.vrsettings in the resources/settings/ directory
+ // of either the runtime or the driver_xxx directory. Otherwise the default will be false, 0, 0.0 or ""
+ virtual bool GetBool( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0;
+ virtual int32_t GetInt32( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0;
+ virtual float GetFloat( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0;
+ virtual void GetString( const char *pchSection, const char *pchSettingsKey, VR_OUT_STRING() char *pchValue, uint32_t unValueLen, EVRSettingsError *peError = nullptr ) = 0;
+
+ virtual void RemoveSection( const char *pchSection, EVRSettingsError *peError = nullptr ) = 0;
+ virtual void RemoveKeyInSection( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0;
+ };
+
+ //-----------------------------------------------------------------------------
+ static const char * const IVRSettings_Version = "IVRSettings_002";
+
+ //-----------------------------------------------------------------------------
+ // steamvr keys
+ static const char * const k_pch_SteamVR_Section = "steamvr";
+ static const char * const k_pch_SteamVR_RequireHmd_String = "requireHmd";
+ static const char * const k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver";
+ static const char * const k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd";
+ static const char * const k_pch_SteamVR_DisplayDebug_Bool = "displayDebug";
+ static const char * const k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe";
+ static const char * const k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX";
+ static const char * const k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY";
+ static const char * const k_pch_SteamVR_SendSystemButtonToAllApps_Bool= "sendSystemButtonToAllApps";
+ static const char * const k_pch_SteamVR_LogLevel_Int32 = "loglevel";
+ static const char * const k_pch_SteamVR_IPD_Float = "ipd";
+ static const char * const k_pch_SteamVR_Background_String = "background";
+ static const char * const k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection";
+ static const char * const k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight";
+ static const char * const k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius";
+ static const char * const k_pch_SteamVR_GridColor_String = "gridColor";
+ static const char * const k_pch_SteamVR_PlayAreaColor_String = "playAreaColor";
+ static const char * const k_pch_SteamVR_ShowStage_Bool = "showStage";
+ static const char * const k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers";
+ static const char * const k_pch_SteamVR_DirectMode_Bool = "directMode";
+ static const char * const k_pch_SteamVR_DirectModeEdidVid_Int32 = "directModeEdidVid";
+ static const char * const k_pch_SteamVR_DirectModeEdidPid_Int32 = "directModeEdidPid";
+ static const char * const k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers";
+ static const char * const k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees";
+ static const char * const k_pch_SteamVR_BaseStationPowerManagement_Bool = "basestationPowerManagement";
+ static const char * const k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses";
+ static const char * const k_pch_SteamVR_SupersampleScale_Float = "supersampleScale";
+ static const char * const k_pch_SteamVR_AllowAsyncReprojection_Bool = "allowAsyncReprojection";
+ static const char * const k_pch_SteamVR_AllowReprojection_Bool = "allowInterleavedReprojection";
+ static const char * const k_pch_SteamVR_ForceReprojection_Bool = "forceReprojection";
+ static const char * const k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking";
+ static const char * const k_pch_SteamVR_DefaultMirrorView_Int32 = "defaultMirrorView";
+ static const char * const k_pch_SteamVR_ShowMirrorView_Bool = "showMirrorView";
+ static const char * const k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry";
+ static const char * const k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch";
+ static const char * const k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch";
+ static const char * const k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch";
+ static const char * const k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard";
+ static const char * const k_pch_SteamVR_EnableHomeApp = "enableHomeApp";
+ static const char * const k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec";
+ static const char * const k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
+ static const char * const k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
+ static const char * const k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+
+ //-----------------------------------------------------------------------------
+ // lighthouse keys
+ static const char * const k_pch_Lighthouse_Section = "driver_lighthouse";
+ static const char * const k_pch_Lighthouse_DisableIMU_Bool = "disableimu";
+ static const char * const k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation";
+ static const char * const k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug";
+ static const char * const k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation";
+ static const char * const k_pch_Lighthouse_DBHistory_Bool = "dbhistory";
+
+ //-----------------------------------------------------------------------------
+ // null keys
+ static const char * const k_pch_Null_Section = "driver_null";
+ static const char * const k_pch_Null_SerialNumber_String = "serialNumber";
+ static const char * const k_pch_Null_ModelNumber_String = "modelNumber";
+ static const char * const k_pch_Null_WindowX_Int32 = "windowX";
+ static const char * const k_pch_Null_WindowY_Int32 = "windowY";
+ static const char * const k_pch_Null_WindowWidth_Int32 = "windowWidth";
+ static const char * const k_pch_Null_WindowHeight_Int32 = "windowHeight";
+ static const char * const k_pch_Null_RenderWidth_Int32 = "renderWidth";
+ static const char * const k_pch_Null_RenderHeight_Int32 = "renderHeight";
+ static const char * const k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons";
+ static const char * const k_pch_Null_DisplayFrequency_Float = "displayFrequency";
+
+ //-----------------------------------------------------------------------------
+ // user interface keys
+ static const char * const k_pch_UserInterface_Section = "userinterface";
+ static const char * const k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop";
+ static const char * const k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray";
+ static const char * const k_pch_UserInterface_Screenshots_Bool = "screenshots";
+ static const char * const k_pch_UserInterface_ScreenshotType_Int = "screenshotType";
+
+ //-----------------------------------------------------------------------------
+ // notification keys
+ static const char * const k_pch_Notifications_Section = "notifications";
+ static const char * const k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb";
+
+ //-----------------------------------------------------------------------------
+ // keyboard keys
+ static const char * const k_pch_Keyboard_Section = "keyboard";
+ static const char * const k_pch_Keyboard_TutorialCompletions = "TutorialCompletions";
+ static const char * const k_pch_Keyboard_ScaleX = "ScaleX";
+ static const char * const k_pch_Keyboard_ScaleY = "ScaleY";
+ static const char * const k_pch_Keyboard_OffsetLeftX = "OffsetLeftX";
+ static const char * const k_pch_Keyboard_OffsetRightX = "OffsetRightX";
+ static const char * const k_pch_Keyboard_OffsetY = "OffsetY";
+ static const char * const k_pch_Keyboard_Smoothing = "Smoothing";
+
+ //-----------------------------------------------------------------------------
+ // perf keys
+ static const char * const k_pch_Perf_Section = "perfcheck";
+ static const char * const k_pch_Perf_HeuristicActive_Bool = "heuristicActive";
+ static const char * const k_pch_Perf_NotifyInHMD_Bool = "warnInHMD";
+ static const char * const k_pch_Perf_NotifyOnlyOnce_Bool = "warnOnlyOnce";
+ static const char * const k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore";
+ static const char * const k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit";
+ static const char * const k_pch_Perf_TestData_Float = "perfTestData";
+ static const char * const k_pch_Perf_LinuxGPUProfiling_Bool = "linuxGPUProfiling";
+
+ //-----------------------------------------------------------------------------
+ // collision bounds keys
+ static const char * const k_pch_CollisionBounds_Section = "collisionBounds";
+ static const char * const k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle";
+ static const char * const k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn";
+ static const char * const k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn";
+ static const char * const k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn";
+ static const char * const k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance";
+ static const char * const k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR";
+ static const char * const k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG";
+ static const char * const k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB";
+ static const char * const k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA";
+
+ //-----------------------------------------------------------------------------
+ // camera keys
+ static const char * const k_pch_Camera_Section = "camera";
+ static const char * const k_pch_Camera_EnableCamera_Bool = "enableCamera";
+ static const char * const k_pch_Camera_EnableCameraInDashboard_Bool = "enableCameraInDashboard";
+ static const char * const k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds";
+ static const char * const k_pch_Camera_EnableCameraForRoomView_Bool = "enableCameraForRoomView";
+ static const char * const k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR";
+ static const char * const k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG";
+ static const char * const k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB";
+ static const char * const k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA";
+ static const char * const k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength";
+
+ //-----------------------------------------------------------------------------
+ // audio keys
+ static const char * const k_pch_audio_Section = "audio";
+ static const char * const k_pch_audio_OnPlaybackDevice_String = "onPlaybackDevice";
+ static const char * const k_pch_audio_OnRecordDevice_String = "onRecordDevice";
+ static const char * const k_pch_audio_OnPlaybackMirrorDevice_String = "onPlaybackMirrorDevice";
+ static const char * const k_pch_audio_OffPlaybackDevice_String = "offPlaybackDevice";
+ static const char * const k_pch_audio_OffRecordDevice_String = "offRecordDevice";
+ static const char * const k_pch_audio_VIVEHDMIGain = "viveHDMIGain";
+
+ //-----------------------------------------------------------------------------
+ // power management keys
+ static const char * const k_pch_Power_Section = "power";
+ static const char * const k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit";
+ static const char * const k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout";
+ static const char * const k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout";
+ static const char * const k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout";
+ static const char * const k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress";
+
+ //-----------------------------------------------------------------------------
+ // dashboard keys
+ static const char * const k_pch_Dashboard_Section = "dashboard";
+ static const char * const k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard";
+ static const char * const k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode";
+
+ //-----------------------------------------------------------------------------
+ // model skin keys
+ static const char * const k_pch_modelskin_Section = "modelskins";
+
+ //-----------------------------------------------------------------------------
+ // driver keys - These could be checked in any driver_<name> section
+ static const char * const k_pch_Driver_Enable_Bool = "enable";
+
+} // namespace vr
+
+// iservertrackeddevicedriver.h
+namespace vr
+{
+
+
+struct DriverPoseQuaternion_t
+{
+ double w, x, y, z;
+};
+
+struct DriverPose_t
+{
+ /* Time offset of this pose, in seconds from the actual time of the pose,
+ * relative to the time of the PoseUpdated() call made by the driver.
+ */
+ double poseTimeOffset;
+
+ /* Generally, the pose maintained by a driver
+ * is in an inertial coordinate system different
+ * from the world system of x+ right, y+ up, z+ back.
+ * Also, the driver is not usually tracking the "head" position,
+ * but instead an internal IMU or another reference point in the HMD.
+ * The following two transforms transform positions and orientations
+ * to app world space from driver world space,
+ * and to HMD head space from driver local body space.
+ *
+ * We maintain the driver pose state in its internal coordinate system,
+ * so we can do the pose prediction math without having to
+ * use angular acceleration. A driver's angular acceleration is generally not measured,
+ * and is instead calculated from successive samples of angular velocity.
+ * This leads to a noisy angular acceleration values, which are also
+ * lagged due to the filtering required to reduce noise to an acceptable level.
+ */
+ vr::HmdQuaternion_t qWorldFromDriverRotation;
+ double vecWorldFromDriverTranslation[ 3 ];
+
+ vr::HmdQuaternion_t qDriverFromHeadRotation;
+ double vecDriverFromHeadTranslation[ 3 ];
+
+ /* State of driver pose, in meters and radians. */
+ /* Position of the driver tracking reference in driver world space
+ * +[0] (x) is right
+ * +[1] (y) is up
+ * -[2] (z) is forward
+ */
+ double vecPosition[ 3 ];
+
+ /* Velocity of the pose in meters/second */
+ double vecVelocity[ 3 ];
+
+ /* Acceleration of the pose in meters/second */
+ double vecAcceleration[ 3 ];
+
+ /* Orientation of the tracker, represented as a quaternion */
+ vr::HmdQuaternion_t qRotation;
+
+ /* Angular velocity of the pose in axis-angle
+ * representation. The direction is the angle of
+ * rotation and the magnitude is the angle around
+ * that axis in radians/second. */
+ double vecAngularVelocity[ 3 ];
+
+ /* Angular acceleration of the pose in axis-angle
+ * representation. The direction is the angle of
+ * rotation and the magnitude is the angle around
+ * that axis in radians/second^2. */
+ double vecAngularAcceleration[ 3 ];
+
+ ETrackingResult result;
+
+ bool poseIsValid;
+ bool willDriftInYaw;
+ bool shouldApplyHeadModel;
+ bool deviceIsConnected;
+};
+
+
+// ----------------------------------------------------------------------------------------------
+// Purpose: Represents a single tracked device in a driver
+// ----------------------------------------------------------------------------------------------
+class ITrackedDeviceServerDriver
+{
+public:
+
+ // ------------------------------------
+ // Management Methods
+ // ------------------------------------
+ /** This is called before an HMD is returned to the application. It will always be
+ * called before any display or tracking methods. Memory and processor use by the
+ * ITrackedDeviceServerDriver object should be kept to a minimum until it is activated.
+ * The pose listener is guaranteed to be valid until Deactivate is called, but
+ * should not be used after that point. */
+ virtual EVRInitError Activate( uint32_t unObjectId ) = 0;
+
+ /** This is called when The VR system is switching from this Hmd being the active display
+ * to another Hmd being the active display. The driver should clean whatever memory
+ * and thread use it can when it is deactivated */
+ virtual void Deactivate() = 0;
+
+ /** Handles a request from the system to put this device into standby mode. What that means is defined per-device. */
+ virtual void EnterStandby() = 0;
+
+ /** Requests a component interface of the driver for device-specific functionality. The driver should return NULL
+ * if the requested interface or version is not supported. */
+ virtual void *GetComponent( const char *pchComponentNameAndVersion ) = 0;
+
+ /** A VR Client has made this debug request of the driver. The set of valid requests is entirely
+ * up to the driver and the client to figure out, as is the format of the response. Responses that
+ * exceed the length of the supplied buffer should be truncated and null terminated */
+ virtual void DebugRequest( const char *pchRequest, char *pchResponseBuffer, uint32_t unResponseBufferSize ) = 0;
+
+ // ------------------------------------
+ // Tracking Methods
+ // ------------------------------------
+ virtual DriverPose_t GetPose() = 0;
+};
+
+
+
+static const char *ITrackedDeviceServerDriver_Version = "ITrackedDeviceServerDriver_005";
+
+}
+// ivrdisplaycomponent.h
+namespace vr
+{
+
+
+ // ----------------------------------------------------------------------------------------------
+ // Purpose: The display component on a single tracked device
+ // ----------------------------------------------------------------------------------------------
+ class IVRDisplayComponent
+ {
+ public:
+
+ // ------------------------------------
+ // Display Methods
+ // ------------------------------------
+
+ /** Size and position that the window needs to be on the VR display. */
+ virtual void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Returns true if the display is extending the desktop. */
+ virtual bool IsDisplayOnDesktop( ) = 0;
+
+ /** Returns true if the display is real and not a fictional display. */
+ virtual bool IsDisplayRealDisplay( ) = 0;
+
+ /** Suggested size for the intermediate render target that the distortion pulls from. */
+ virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** Gets the viewport in the frame buffer to draw the output of the distortion into */
+ virtual void GetEyeOutputViewport( EVREye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0;
+
+ /** The components necessary to build your own projection matrix in case your
+ * application is doing something fancy like infinite Z */
+ virtual void GetProjectionRaw( EVREye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0;
+
+ /** Returns the result of the distortion function for the specified eye and input UVs. UVs go from 0,0 in
+ * the upper left of that eye's viewport and 1,1 in the lower right of that eye's viewport. */
+ virtual DistortionCoordinates_t ComputeDistortion( EVREye eEye, float fU, float fV ) = 0;
+
+ };
+
+ static const char *IVRDisplayComponent_Version = "IVRDisplayComponent_002";
+
+}
+
+// ivrdriverdirectmodecomponent.h
+namespace vr
+{
+
+
+ // ----------------------------------------------------------------------------------------------
+ // Purpose: This component is used for drivers that implement direct mode entirely on their own
+ // without allowing the VR Compositor to own the window/device. Chances are you don't
+ // need to implement this component in your driver.
+ // ----------------------------------------------------------------------------------------------
+ class IVRDriverDirectModeComponent
+ {
+ public:
+
+ // -----------------------------------
+ // Direct mode methods
+ // -----------------------------------
+
+ /** Specific to Oculus compositor support, textures supplied must be created using this method. */
+ virtual void CreateSwapTextureSet( uint32_t unPid, uint32_t unFormat, uint32_t unWidth, uint32_t unHeight, vr::SharedTextureHandle_t( *pSharedTextureHandles )[ 3 ] ) {}
+
+ /** Used to textures created using CreateSwapTextureSet. Only one of the set's handles needs to be used to destroy the entire set. */
+ virtual void DestroySwapTextureSet( vr::SharedTextureHandle_t sharedTextureHandle ) {}
+
+ /** Used to purge all texture sets for a given process. */
+ virtual void DestroyAllSwapTextureSets( uint32_t unPid ) {}
+
+ /** After Present returns, calls this to get the next index to use for rendering. */
+ virtual void GetNextSwapTextureSetIndex( vr::SharedTextureHandle_t sharedTextureHandles[ 2 ], uint32_t( *pIndices )[ 2 ] ) {}
+
+ /** Call once per layer to draw for this frame. One shared texture handle per eye. Textures must be created
+ * using CreateSwapTextureSet and should be alternated per frame. Call Present once all layers have been submitted. */
+ virtual void SubmitLayer( vr::SharedTextureHandle_t sharedTextureHandles[ 2 ], const vr::VRTextureBounds_t( &bounds )[ 2 ], const vr::HmdMatrix34_t *pPose ) {}
+
+ /** Submits queued layers for display. */
+ virtual void Present( vr::SharedTextureHandle_t syncTexture ) {}
+
+ };
+
+ static const char *IVRDriverDirectModeComponent_Version = "IVRDriverDirectModeComponent_002";
+
+}
+
+// ivrcontrollercomponent.h
+namespace vr
+{
+
+
+ // ----------------------------------------------------------------------------------------------
+ // Purpose: Controller access on a single tracked device.
+ // ----------------------------------------------------------------------------------------------
+ class IVRControllerComponent
+ {
+ public:
+
+ // ------------------------------------
+ // Controller Methods
+ // ------------------------------------
+
+ /** Gets the current state of a controller. */
+ virtual VRControllerState_t GetControllerState( ) = 0;
+
+ /** Returns a uint64 property. If the property is not available this function will return 0. */
+ virtual bool TriggerHapticPulse( uint32_t unAxisId, uint16_t usPulseDurationMicroseconds ) = 0;
+
+ };
+
+
+
+ static const char *IVRControllerComponent_Version = "IVRControllerComponent_001";
+
+}
+// ivrcameracomponent.h
+namespace vr
+{
+ //-----------------------------------------------------------------------------
+ //-----------------------------------------------------------------------------
+ class ICameraVideoSinkCallback
+ {
+ public:
+ virtual void OnCameraVideoSinkCallback() = 0;
+ };
+
+ // ----------------------------------------------------------------------------------------------
+ // Purpose: The camera on a single tracked device
+ // ----------------------------------------------------------------------------------------------
+ class IVRCameraComponent
+ {
+ public:
+ // ------------------------------------
+ // Camera Methods
+ // ------------------------------------
+ virtual bool GetCameraFrameDimensions( vr::ECameraVideoStreamFormat nVideoStreamFormat, uint32_t *pWidth, uint32_t *pHeight ) = 0;
+ virtual bool GetCameraFrameBufferingRequirements( int *pDefaultFrameQueueSize, uint32_t *pFrameBufferDataSize ) = 0;
+ virtual bool SetCameraFrameBuffering( int nFrameBufferCount, void **ppFrameBuffers, uint32_t nFrameBufferDataSize ) = 0;
+ virtual bool SetCameraVideoStreamFormat( vr::ECameraVideoStreamFormat nVideoStreamFormat ) = 0;
+ virtual vr::ECameraVideoStreamFormat GetCameraVideoStreamFormat() = 0;
+ virtual bool StartVideoStream() = 0;
+ virtual void StopVideoStream() = 0;
+ virtual bool IsVideoStreamActive( bool *pbPaused, float *pflElapsedTime ) = 0;
+ virtual const vr::CameraVideoStreamFrame_t *GetVideoStreamFrame() = 0;
+ virtual void ReleaseVideoStreamFrame( const vr::CameraVideoStreamFrame_t *pFrameImage ) = 0;
+ virtual bool SetAutoExposure( bool bEnable ) = 0;
+ virtual bool PauseVideoStream() = 0;
+ virtual bool ResumeVideoStream() = 0;
+ virtual bool GetCameraDistortion( float flInputU, float flInputV, float *pflOutputU, float *pflOutputV ) = 0;
+ virtual bool GetCameraProjection( vr::EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, vr::HmdMatrix44_t *pProjection ) = 0;
+ virtual bool SetFrameRate( int nISPFrameRate, int nSensorFrameRate ) = 0;
+ virtual bool SetCameraVideoSinkCallback( vr::ICameraVideoSinkCallback *pCameraVideoSinkCallback ) = 0;
+ virtual bool GetCameraCompatibilityMode( vr::ECameraCompatibilityMode *pCameraCompatibilityMode ) = 0;
+ virtual bool SetCameraCompatibilityMode( vr::ECameraCompatibilityMode nCameraCompatibilityMode ) = 0;
+ virtual bool GetCameraFrameBounds( vr::EVRTrackedCameraFrameType eFrameType, uint32_t *pLeft, uint32_t *pTop, uint32_t *pWidth, uint32_t *pHeight ) = 0;
+ virtual bool GetCameraIntrinsics( vr::EVRTrackedCameraFrameType eFrameType, HmdVector2_t *pFocalLength, HmdVector2_t *pCenter ) = 0;
+ };
+
+ static const char *IVRCameraComponent_Version = "IVRCameraComponent_002";
+}
+// itrackeddevicedriverprovider.h
+namespace vr
+{
+
+class ITrackedDeviceServerDriver;
+struct TrackedDeviceDriverInfo_t;
+struct DriverPose_t;
+typedef PropertyContainerHandle_t DriverHandle_t;
+
+/** This interface is provided by vrserver to allow the driver to notify
+* the system when something changes about a device. These changes must
+* not change the serial number or class of the device because those values
+* are permanently associated with the device's index. */
+class IVRDriverContext
+{
+public:
+ /** Returns the requested interface. If the interface was not available it will return NULL and fill
+ * out the error. */
+ virtual void *GetGenericInterface( const char *pchInterfaceVersion, EVRInitError *peError = nullptr ) = 0;
+
+ /** Returns the property container handle for this driver */
+ virtual DriverHandle_t GetDriverHandle() = 0;
+};
+
+
+/** This interface must be implemented in each driver. It will be loaded in vrserver.exe */
+class IServerTrackedDeviceProvider
+{
+public:
+ /** initializes the driver. This will be called before any other methods are called.
+ * If Init returns anything other than VRInitError_None the driver DLL will be unloaded.
+ *
+ * pDriverHost will never be NULL, and will always be a pointer to a IServerDriverHost interface
+ *
+ * pchUserDriverConfigDir - The absolute path of the directory where the driver should store user
+ * config files.
+ * pchDriverInstallDir - The absolute path of the root directory for the driver.
+ */
+ virtual EVRInitError Init( IVRDriverContext *pDriverContext ) = 0;
+
+ /** cleans up the driver right before it is unloaded */
+ virtual void Cleanup() = 0;
+
+ /** Returns the version of the ITrackedDeviceServerDriver interface used by this driver */
+ virtual const char * const *GetInterfaceVersions() = 0;
+
+ /** Allows the driver do to some work in the main loop of the server. */
+ virtual void RunFrame() = 0;
+
+
+ // ------------ Power State Functions ----------------------- //
+
+ /** Returns true if the driver wants to block Standby mode. */
+ virtual bool ShouldBlockStandbyMode() = 0;
+
+ /** Called when the system is entering Standby mode. The driver should switch itself into whatever sort of low-power
+ * state it has. */
+ virtual void EnterStandby() = 0;
+
+ /** Called when the system is leaving Standby mode. The driver should switch itself back to
+ full operation. */
+ virtual void LeaveStandby() = 0;
+
+};
+
+
+static const char *IServerTrackedDeviceProvider_Version = "IServerTrackedDeviceProvider_004";
+
+
+
+
+/** This interface must be implemented in each driver. It will be loaded in vrclient.dll */
+class IVRWatchdogProvider
+{
+public:
+ /** initializes the driver in watchdog mode. */
+ virtual EVRInitError Init( IVRDriverContext *pDriverContext ) = 0;
+
+ /** cleans up the driver right before it is unloaded */
+ virtual void Cleanup() = 0;
+};
+
+static const char *IVRWatchdogProvider_Version = "IVRWatchdogProvider_001";
+
+}
+// ivrproperties.h
+#include <string>
+
+namespace vr
+{
+
+ enum EPropertyWriteType
+ {
+ PropertyWrite_Set = 0,
+ PropertyWrite_Erase = 1,
+ PropertyWrite_SetError = 2
+ };
+
+ struct PropertyWrite_t
+ {
+ ETrackedDeviceProperty prop;
+ EPropertyWriteType writeType;
+ ETrackedPropertyError eSetError;
+ void *pvBuffer;
+ uint32_t unBufferSize;
+ PropertyTypeTag_t unTag;
+ ETrackedPropertyError eError;
+ };
+
+ struct PropertyRead_t
+ {
+ ETrackedDeviceProperty prop;
+ void *pvBuffer;
+ uint32_t unBufferSize;
+ PropertyTypeTag_t unTag;
+ uint32_t unRequiredBufferSize;
+ ETrackedPropertyError eError;
+ };
+
+
+class IVRProperties
+{
+public:
+
+ /** Reads a set of properties atomically. See the PropertyReadBatch_t struct for more information. */
+ virtual ETrackedPropertyError ReadPropertyBatch( PropertyContainerHandle_t ulContainerHandle, PropertyRead_t *pBatch, uint32_t unBatchEntryCount ) = 0;
+
+ /** Writes a set of properties atomically. See the PropertyWriteBatch_t struct for more information. */
+ virtual ETrackedPropertyError WritePropertyBatch( PropertyContainerHandle_t ulContainerHandle, PropertyWrite_t *pBatch, uint32_t unBatchEntryCount ) = 0;
+
+ /** returns a string that corresponds with the specified property error. The string will be the name
+ * of the error enum value for all valid error codes */
+ virtual const char *GetPropErrorNameFromEnum( ETrackedPropertyError error ) = 0;
+
+ /** Returns a container handle given a tracked device index */
+ virtual PropertyContainerHandle_t TrackedDeviceToPropertyContainer( TrackedDeviceIndex_t nDevice ) = 0;
+
+};
+
+static const char * const IVRProperties_Version = "IVRProperties_001";
+
+class CVRPropertyHelpers
+{
+public:
+ CVRPropertyHelpers( IVRProperties * pProperties ) : m_pProperties( pProperties ) {}
+
+ /** Returns a scaler property. If the device index is not valid or the property value type does not match,
+ * this function will return false. */
+ bool GetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L );
+ float GetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L );
+ int32_t GetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L );
+ uint64_t GetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L );
+
+ /** Returns a single typed property. If the device index is not valid or the property is not a string type this function will
+ * return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing
+ * null. Strings will always fit in buffers of k_unMaxPropertyStringSize characters. */
+ uint32_t GetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() void *pvBuffer, uint32_t unBufferSize, PropertyTypeTag_t *punTag, ETrackedPropertyError *pError = 0L );
+
+
+ /** Returns a string property. If the device index is not valid or the property is not a string type this function will
+ * return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing
+ * null. Strings will always fit in buffers of k_unMaxPropertyStringSize characters. */
+ uint32_t GetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, ETrackedPropertyError *pError = 0L );
+
+ /** Returns a string property as a std::string. If the device index is not valid or the property is not a string type this function will
+ * return an empty string. */
+ std::string GetStringProperty( vr::PropertyContainerHandle_t ulContainer, vr::ETrackedDeviceProperty prop, vr::ETrackedPropertyError *peError = nullptr );
+
+ /** Sets a scaler property. The new value will be returned on any subsequent call to get this property in any process. */
+ ETrackedPropertyError SetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, bool bNewValue );
+ ETrackedPropertyError SetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, float fNewValue );
+ ETrackedPropertyError SetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, int32_t nNewValue );
+ ETrackedPropertyError SetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, uint64_t ulNewValue );
+
+ /** Sets a string property. The new value will be returned on any subsequent call to get this property in any process. */
+ ETrackedPropertyError SetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const char *pchNewValue );
+
+ /** Sets a single typed property. The new value will be returned on any subsequent call to get this property in any process. */
+ ETrackedPropertyError SetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, void *pvNewValue, uint32_t unNewValueSize, PropertyTypeTag_t unTag );
+
+ /** Sets the error return value for a property. This value will be returned on all subsequent requests to get the property */
+ ETrackedPropertyError SetPropertyError( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError eError );
+
+ /** Clears any value or error set for the property. */
+ ETrackedPropertyError EraseProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop );
+
+ /* Turns a device index into a property container handle. */
+ PropertyContainerHandle_t TrackedDeviceToPropertyContainer( TrackedDeviceIndex_t nDevice ) { return m_pProperties->TrackedDeviceToPropertyContainer( nDevice ); }
+
+private:
+ template<typename T>
+ T GetPropertyHelper( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError, T bDefault, PropertyTypeTag_t unTypeTag );
+
+ IVRProperties *m_pProperties;
+};
+
+
+inline uint32_t CVRPropertyHelpers::GetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() void *pvBuffer, uint32_t unBufferSize, PropertyTypeTag_t *punTag, ETrackedPropertyError *pError )
+{
+ PropertyRead_t batch;
+ batch.prop = prop;
+ batch.pvBuffer = pvBuffer;
+ batch.unBufferSize = unBufferSize;
+
+ m_pProperties->ReadPropertyBatch( ulContainerHandle, &batch, 1 );
+
+ if ( pError )
+ {
+ *pError = batch.eError;
+ }
+
+ if ( punTag )
+ {
+ *punTag = batch.unTag;
+ }
+
+ return batch.unRequiredBufferSize;
+}
+
+
+/** Sets a single typed property. The new value will be returned on any subsequent call to get this property in any process. */
+inline ETrackedPropertyError CVRPropertyHelpers::SetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, void *pvNewValue, uint32_t unNewValueSize, PropertyTypeTag_t unTag )
+{
+ PropertyWrite_t batch;
+ batch.writeType = PropertyWrite_Set;
+ batch.prop = prop;
+ batch.pvBuffer = pvNewValue;
+ batch.unBufferSize = unNewValueSize;
+ batch.unTag = unTag;
+
+ m_pProperties->WritePropertyBatch( ulContainerHandle, &batch, 1 );
+
+ return batch.eError;
+}
+
+
+/** Returns a string property. If the device index is not valid or the property is not a string type this function will
+* return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing
+* null. Strings will always fit in buffers of k_unMaxPropertyStringSize characters. */
+inline uint32_t CVRPropertyHelpers::GetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, ETrackedPropertyError *pError )
+{
+ PropertyTypeTag_t unTag;
+ ETrackedPropertyError error;
+ uint32_t unRequiredSize = GetProperty( ulContainerHandle, prop, pchValue, unBufferSize, &unTag, &error );
+ if ( unTag != k_unStringPropertyTag && error == TrackedProp_Success )
+ {
+ error = TrackedProp_WrongDataType;
+ }
+
+ if ( pError )
+ {
+ *pError = error;
+ }
+
+ if ( error != TrackedProp_Success )
+ {
+ if ( pchValue && unBufferSize )
+ {
+ *pchValue = '\0';
+ }
+ }
+
+ return unRequiredSize;
+}
+
+
+/** Returns a string property as a std::string. If the device index is not valid or the property is not a string type this function will
+* return an empty string. */
+inline std::string CVRPropertyHelpers::GetStringProperty( vr::PropertyContainerHandle_t ulContainer, vr::ETrackedDeviceProperty prop, vr::ETrackedPropertyError *peError )
+{
+ char buf[1024];
+ vr::ETrackedPropertyError err;
+ uint32_t unRequiredBufferLen = GetStringProperty( ulContainer, prop, buf, sizeof(buf), &err );
+
+ std::string sResult;
+
+ if ( err == TrackedProp_Success )
+ {
+ sResult = buf;
+ }
+ else if ( err == TrackedProp_BufferTooSmall )
+ {
+ char *pchBuffer = new char[unRequiredBufferLen];
+ unRequiredBufferLen = GetStringProperty( ulContainer, prop, pchBuffer, unRequiredBufferLen, &err );
+ sResult = pchBuffer;
+ delete[] pchBuffer;
+ }
+
+ if ( peError )
+ {
+ *peError = err;
+ }
+
+ return sResult;
+}
+
+
+/** Sets a string property. The new value will be returned on any subsequent call to get this property in any process. */
+inline ETrackedPropertyError CVRPropertyHelpers::SetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const char *pchNewValue )
+{
+ if ( !pchNewValue )
+ return TrackedProp_InvalidOperation;
+
+ // this is strlen without the dependency on string.h
+ const char *pchCurr = pchNewValue;
+ while ( *pchCurr )
+ {
+ pchCurr++;
+ }
+
+ return SetProperty( ulContainerHandle, prop, (void *)pchNewValue, (uint32_t)(pchCurr - pchNewValue) + 1, k_unStringPropertyTag );
+}
+
+
+template<typename T>
+inline T CVRPropertyHelpers::GetPropertyHelper( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError, T bDefault, PropertyTypeTag_t unTypeTag )
+{
+ T bValue;
+ ETrackedPropertyError eError;
+ PropertyTypeTag_t unReadTag;
+ GetProperty( ulContainerHandle, prop, &bValue, sizeof( bValue ), &unReadTag, &eError );
+ if ( unReadTag != unTypeTag && eError == TrackedProp_Success )
+ {
+ eError = TrackedProp_WrongDataType;
+ };
+
+ if ( pError )
+ *pError = eError;
+ if ( eError != TrackedProp_Success )
+ {
+ return bDefault;
+ }
+ else
+ {
+ return bValue;
+ }
+}
+
+
+inline bool CVRPropertyHelpers::GetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError )
+{
+ return GetPropertyHelper<bool>( ulContainerHandle, prop, pError, false, k_unBoolPropertyTag );
+}
+
+
+inline float CVRPropertyHelpers::GetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError )
+{
+ return GetPropertyHelper<float>( ulContainerHandle, prop, pError, 0.f, k_unFloatPropertyTag );
+}
+
+inline int32_t CVRPropertyHelpers::GetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError )
+{
+ return GetPropertyHelper<int32_t>( ulContainerHandle, prop, pError, 0, k_unInt32PropertyTag );
+}
+
+inline uint64_t CVRPropertyHelpers::GetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError )
+{
+ return GetPropertyHelper<uint64_t>( ulContainerHandle, prop, pError, 0, k_unUint64PropertyTag );
+}
+
+inline ETrackedPropertyError CVRPropertyHelpers::SetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, bool bNewValue )
+{
+ return SetProperty( ulContainerHandle, prop, &bNewValue, sizeof( bNewValue ), k_unBoolPropertyTag );
+}
+
+inline ETrackedPropertyError CVRPropertyHelpers::SetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, float fNewValue )
+{
+ return SetProperty( ulContainerHandle, prop, &fNewValue, sizeof( fNewValue ), k_unFloatPropertyTag );
+}
+
+inline ETrackedPropertyError CVRPropertyHelpers::SetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, int32_t nNewValue )
+{
+ return SetProperty( ulContainerHandle, prop, &nNewValue, sizeof( nNewValue ), k_unInt32PropertyTag );
+}
+
+inline ETrackedPropertyError CVRPropertyHelpers::SetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, uint64_t ulNewValue )
+{
+ return SetProperty( ulContainerHandle, prop, &ulNewValue, sizeof( ulNewValue ), k_unUint64PropertyTag );
+}
+
+/** Sets the error return value for a property. This value will be returned on all subsequent requests to get the property */
+inline ETrackedPropertyError CVRPropertyHelpers::SetPropertyError( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError eError )
+{
+ PropertyWrite_t batch;
+ batch.writeType = PropertyWrite_SetError;
+ batch.prop = prop;
+ batch.eSetError = eError;
+
+ m_pProperties->WritePropertyBatch( ulContainerHandle, &batch, 1 );
+
+ return batch.eError;
+}
+
+/** Clears any value or error set for the property. */
+inline ETrackedPropertyError CVRPropertyHelpers::EraseProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop )
+{
+ PropertyWrite_t batch;
+ batch.writeType = PropertyWrite_Erase;
+ batch.prop = prop;
+
+ m_pProperties->WritePropertyBatch( ulContainerHandle, &batch, 1 );
+
+ return batch.eError;
+
+}
+
+}
+
+
+// ivrdriverlog.h
+namespace vr
+{
+
+class IVRDriverLog
+{
+public:
+ /** Writes a log message to the log file prefixed with the driver name */
+ virtual void Log( const char *pchLogMessage ) = 0;
+};
+
+
+static const char *IVRDriverLog_Version = "IVRDriverLog_001";
+
+}
+// ivrserverdriverhost.h
+namespace vr
+{
+
+class ITrackedDeviceServerDriver;
+struct TrackedDeviceDriverInfo_t;
+struct DriverPose_t;
+
+/** This interface is provided by vrserver to allow the driver to notify
+* the system when something changes about a device. These changes must
+* not change the serial number or class of the device because those values
+* are permanently associated with the device's index. */
+class IVRServerDriverHost
+{
+public:
+ /** Notifies the server that a tracked device has been added. If this function returns true
+ * the server will call Activate on the device. If it returns false some kind of error
+ * has occurred and the device will not be activated. */
+ virtual bool TrackedDeviceAdded( const char *pchDeviceSerialNumber, ETrackedDeviceClass eDeviceClass, ITrackedDeviceServerDriver *pDriver ) = 0;
+
+ /** Notifies the server that a tracked device's pose has been updated */
+ virtual void TrackedDevicePoseUpdated( uint32_t unWhichDevice, const DriverPose_t & newPose, uint32_t unPoseStructSize ) = 0;
+
+ /** Notifies the server that vsync has occurred on the the display attached to the device. This is
+ * only permitted on devices of the HMD class. */
+ virtual void VsyncEvent( double vsyncTimeOffsetSeconds ) = 0;
+
+ /** notifies the server that the button was pressed */
+ virtual void TrackedDeviceButtonPressed( uint32_t unWhichDevice, EVRButtonId eButtonId, double eventTimeOffset ) = 0;
+
+ /** notifies the server that the button was unpressed */
+ virtual void TrackedDeviceButtonUnpressed( uint32_t unWhichDevice, EVRButtonId eButtonId, double eventTimeOffset ) = 0;
+
+ /** notifies the server that the button was pressed */
+ virtual void TrackedDeviceButtonTouched( uint32_t unWhichDevice, EVRButtonId eButtonId, double eventTimeOffset ) = 0;
+
+ /** notifies the server that the button was unpressed */
+ virtual void TrackedDeviceButtonUntouched( uint32_t unWhichDevice, EVRButtonId eButtonId, double eventTimeOffset ) = 0;
+
+ /** notifies the server than a controller axis changed */
+ virtual void TrackedDeviceAxisUpdated( uint32_t unWhichDevice, uint32_t unWhichAxis, const VRControllerAxis_t & axisState ) = 0;
+
+ /** Notifies the server that the proximity sensor on the specified device */
+ virtual void ProximitySensorState( uint32_t unWhichDevice, bool bProximitySensorTriggered ) = 0;
+
+ /** Sends a vendor specific event (VREvent_VendorSpecific_Reserved_Start..VREvent_VendorSpecific_Reserved_End */
+ virtual void VendorSpecificEvent( uint32_t unWhichDevice, vr::EVREventType eventType, const VREvent_Data_t & eventData, double eventTimeOffset ) = 0;
+
+ /** Returns true if SteamVR is exiting */
+ virtual bool IsExiting() = 0;
+
+ /** Returns true and fills the event with the next event on the queue if there is one. If there are no events
+ * this method returns false. uncbVREvent should be the size in bytes of the VREvent_t struct */
+ virtual bool PollNextEvent( VREvent_t *pEvent, uint32_t uncbVREvent ) = 0;
+
+ /** Provides access to device poses for drivers. Poses are in their "raw" tracking space which is uniquely
+ * defined by each driver providing poses for its devices. It is up to clients of this function to correlate
+ * poses across different drivers. Poses are indexed by their device id, and their associated driver and
+ * other properties can be looked up via IVRProperties. */
+ virtual void GetRawTrackedDevicePoses( float fPredictedSecondsFromNow, TrackedDevicePose_t *pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount ) = 0;
+
+ /** Notifies the server that a tracked device's display component transforms have been updated. */
+ virtual void TrackedDeviceDisplayTransformUpdated( uint32_t unWhichDevice, HmdMatrix34_t eyeToHeadLeft, HmdMatrix34_t eyeToHeadRight ) = 0;
+};
+
+static const char *IVRServerDriverHost_Version = "IVRServerDriverHost_004";
+
+}
+
+// ivrhiddenarea.h
+namespace vr
+{
+
+class CVRHiddenAreaHelpers
+{
+public:
+ CVRHiddenAreaHelpers( IVRProperties *pProperties ) : m_pProperties( pProperties ) {}
+
+ /** Stores a hidden area mesh in a property */
+ ETrackedPropertyError SetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount );
+
+ /** retrieves a hidden area mesh from a property. Returns the vert count read out of the property. */
+ uint32_t GetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount, ETrackedPropertyError *peError );
+
+private:
+ ETrackedDeviceProperty GetPropertyEnum( EVREye eEye, EHiddenAreaMeshType type )
+ {
+ return (ETrackedDeviceProperty)(Prop_DisplayHiddenArea_Binary_Start + ((int)type * 2) + (int)eEye);
+ }
+
+ IVRProperties *m_pProperties;
+};
+
+
+inline ETrackedPropertyError CVRHiddenAreaHelpers::SetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount )
+{
+ ETrackedDeviceProperty prop = GetPropertyEnum( eEye, type );
+ CVRPropertyHelpers propHelpers( m_pProperties );
+ return propHelpers.SetProperty( propHelpers.TrackedDeviceToPropertyContainer( k_unTrackedDeviceIndex_Hmd ), prop, pVerts, sizeof( HmdVector2_t ) * unVertCount, k_unHiddenAreaPropertyTag );
+}
+
+
+inline uint32_t CVRHiddenAreaHelpers::GetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount, ETrackedPropertyError *peError )
+{
+ ETrackedDeviceProperty prop = GetPropertyEnum( eEye, type );
+ CVRPropertyHelpers propHelpers( m_pProperties );
+ ETrackedPropertyError propError;
+ PropertyTypeTag_t unTag;
+ uint32_t unBytesNeeded = propHelpers.GetProperty( propHelpers.TrackedDeviceToPropertyContainer( k_unTrackedDeviceIndex_Hmd ), prop, pVerts, sizeof( HmdVector2_t )*unVertCount, &unTag, &propError );
+ if ( propError == TrackedProp_Success && unTag != k_unHiddenAreaPropertyTag )
+ {
+ propError = TrackedProp_WrongDataType;
+ unBytesNeeded = 0;
+ }
+
+ if ( peError )
+ {
+ *peError = propError;
+ }
+
+ return unBytesNeeded / sizeof( HmdVector2_t );
+}
+
+}
+// ivrwatchdoghost.h
+namespace vr
+{
+
+/** This interface is provided by vrclient to allow the driver to make everything wake up */
+class IVRWatchdogHost
+{
+public:
+ /** Client drivers in watchdog mode should call this when they have received a signal from hardware that should
+ * cause SteamVR to start */
+ virtual void WatchdogWakeUp() = 0;
+};
+
+static const char *IVRWatchdogHost_Version = "IVRWatchdogHost_001";
+
+};
+
+
+
+// ivrvirtualdisplay.h
+namespace vr
+{
+ // ----------------------------------------------------------------------------------------------
+ // Purpose: This component is used for drivers that implement a virtual display (e.g. wireless).
+ // ----------------------------------------------------------------------------------------------
+ class IVRVirtualDisplay
+ {
+ public:
+
+ /** Submits final backbuffer for display. */
+ virtual void Present( vr::SharedTextureHandle_t backbufferTextureHandle ) = 0;
+
+ /** Block until the last presented buffer start scanning out. */
+ virtual void WaitForPresent() = 0;
+
+ /** Provides timing data for synchronizing with display. */
+ virtual bool GetTimeSinceLastVsync( float *pfSecondsSinceLastVsync, uint64_t *pulFrameCounter ) = 0;
+ };
+
+ static const char *IVRVirtualDisplay_Version = "IVRVirtualDisplay_001";
+
+ /** Returns the current IVRVirtualDisplay pointer or NULL the interface could not be found. */
+ VR_INTERFACE vr::IVRVirtualDisplay *VR_CALLTYPE VRVirtualDisplay();
+}
+
+
+// ivrresources.h
+namespace vr
+{
+
+class IVRResources
+{
+public:
+
+ // ------------------------------------
+ // Shared Resource Methods
+ // ------------------------------------
+
+ /** Loads the specified resource into the provided buffer if large enough.
+ * Returns the size in bytes of the buffer required to hold the specified resource. */
+ virtual uint32_t LoadSharedResource( const char *pchResourceName, char *pchBuffer, uint32_t unBufferLen ) = 0;
+
+ /** Provides the full path to the specified resource. Resource names can include named directories for
+ * drivers and other things, and this resolves all of those and returns the actual physical path.
+ * pchResourceTypeDirectory is the subdirectory of resources to look in. */
+ virtual uint32_t GetResourceFullPath( const char *pchResourceName, const char *pchResourceTypeDirectory, char *pchPathBuffer, uint32_t unBufferLen ) = 0;
+};
+
+static const char * const IVRResources_Version = "IVRResources_001";
+
+
+}
+// ivrdrivermanager.h
+namespace vr
+{
+
+class IVRDriverManager
+{
+public:
+ virtual uint32_t GetDriverCount() const = 0;
+
+ /** Returns the length of the number of bytes necessary to hold this string including the trailing null. */
+ virtual uint32_t GetDriverName( vr::DriverId_t nDriver, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0;
+};
+
+static const char * const IVRDriverManager_Version = "IVRDriverManager_001";
+
+} // namespace vr
+
+
+
+
+
+namespace vr
+{
+ static const char * const k_InterfaceVersions[] =
+ {
+ IVRSettings_Version,
+ ITrackedDeviceServerDriver_Version,
+ IVRDisplayComponent_Version,
+ IVRDriverDirectModeComponent_Version,
+ IVRControllerComponent_Version,
+ IVRCameraComponent_Version,
+ IServerTrackedDeviceProvider_Version,
+ IVRWatchdogProvider_Version,
+ IVRVirtualDisplay_Version,
+ IVRDriverManager_Version,
+ IVRResources_Version,
+ nullptr
+ };
+
+ inline IVRDriverContext *&VRDriverContext()
+ {
+ static IVRDriverContext *pHost;
+ return pHost;
+ }
+
+ class COpenVRDriverContext
+ {
+ public:
+ COpenVRDriverContext() : m_propertyHelpers(nullptr), m_hiddenAreaHelpers(nullptr) { Clear(); }
+ void Clear();
+
+ EVRInitError InitServer();
+ EVRInitError InitWatchdog();
+
+ IVRSettings *VRSettings()
+ {
+ if ( m_pVRSettings == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRSettings = (IVRSettings *)VRDriverContext()->GetGenericInterface( IVRSettings_Version, &eError );
+ }
+ return m_pVRSettings;
+ }
+
+ IVRProperties *VRPropertiesRaw()
+ {
+ if ( m_pVRProperties == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRProperties = (IVRProperties *)VRDriverContext()->GetGenericInterface( IVRProperties_Version, &eError );
+ m_propertyHelpers = CVRPropertyHelpers( m_pVRProperties );
+ m_hiddenAreaHelpers = CVRHiddenAreaHelpers( m_pVRProperties );
+ }
+ return m_pVRProperties;
+ }
+
+ CVRPropertyHelpers *VRProperties()
+ {
+ VRPropertiesRaw();
+ return &m_propertyHelpers;
+ }
+
+ CVRHiddenAreaHelpers *VRHiddenArea()
+ {
+ VRPropertiesRaw();
+ return &m_hiddenAreaHelpers;
+ }
+
+ IVRServerDriverHost *VRServerDriverHost()
+ {
+ if ( m_pVRServerDriverHost == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRServerDriverHost = (IVRServerDriverHost *)VRDriverContext()->GetGenericInterface( IVRServerDriverHost_Version, &eError );
+ }
+ return m_pVRServerDriverHost;
+ }
+
+ IVRWatchdogHost *VRWatchdogHost()
+ {
+ if ( m_pVRWatchdogHost == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRWatchdogHost = (IVRWatchdogHost *)VRDriverContext()->GetGenericInterface( IVRWatchdogHost_Version, &eError );
+ }
+ return m_pVRWatchdogHost;
+ }
+
+ IVRDriverLog *VRDriverLog()
+ {
+ if ( m_pVRDriverLog == nullptr )
+ {
+ EVRInitError eError;
+ m_pVRDriverLog = (IVRDriverLog *)VRDriverContext()->GetGenericInterface( IVRDriverLog_Version, &eError );
+ }
+ return m_pVRDriverLog;
+ }
+
+ DriverHandle_t VR_CALLTYPE VRDriverHandle()
+ {
+ return VRDriverContext()->GetDriverHandle();
+ }
+
+ IVRDriverManager *VRDriverManager()
+ {
+ if ( !m_pVRDriverManager )
+ {
+ EVRInitError eError;
+ m_pVRDriverManager = (IVRDriverManager *)VRDriverContext()->GetGenericInterface( IVRDriverManager_Version, &eError );
+ }
+ return m_pVRDriverManager;
+ }
+
+ IVRResources *VRResources()
+ {
+ if ( !m_pVRResources )
+ {
+ EVRInitError eError;
+ m_pVRResources = (IVRResources *)VRDriverContext()->GetGenericInterface( IVRResources_Version, &eError );
+ }
+ return m_pVRResources;
+ }
+
+ private:
+ CVRPropertyHelpers m_propertyHelpers;
+ CVRHiddenAreaHelpers m_hiddenAreaHelpers;
+
+ IVRSettings *m_pVRSettings;
+ IVRProperties *m_pVRProperties;
+ IVRServerDriverHost *m_pVRServerDriverHost;
+ IVRWatchdogHost *m_pVRWatchdogHost;
+ IVRDriverLog *m_pVRDriverLog;
+ IVRDriverManager *m_pVRDriverManager;
+ IVRResources *m_pVRResources;
+ };
+
+ inline COpenVRDriverContext &OpenVRInternal_ModuleServerDriverContext()
+ {
+ static void *ctx[sizeof( COpenVRDriverContext ) / sizeof( void * )];
+ return *(COpenVRDriverContext *)ctx; // bypass zero-init constructor
+ }
+
+ inline IVRSettings *VR_CALLTYPE VRSettings() { return OpenVRInternal_ModuleServerDriverContext().VRSettings(); }
+ inline IVRProperties *VR_CALLTYPE VRPropertiesRaw() { return OpenVRInternal_ModuleServerDriverContext().VRPropertiesRaw(); }
+ inline CVRPropertyHelpers *VR_CALLTYPE VRProperties() { return OpenVRInternal_ModuleServerDriverContext().VRProperties(); }
+ inline CVRHiddenAreaHelpers *VR_CALLTYPE VRHiddenArea() { return OpenVRInternal_ModuleServerDriverContext().VRHiddenArea(); }
+ inline IVRDriverLog *VR_CALLTYPE VRDriverLog() { return OpenVRInternal_ModuleServerDriverContext().VRDriverLog(); }
+ inline IVRServerDriverHost *VR_CALLTYPE VRServerDriverHost() { return OpenVRInternal_ModuleServerDriverContext().VRServerDriverHost(); }
+ inline IVRWatchdogHost *VR_CALLTYPE VRWatchdogHost() { return OpenVRInternal_ModuleServerDriverContext().VRWatchdogHost(); }
+ inline DriverHandle_t VR_CALLTYPE VRDriverHandle() { return OpenVRInternal_ModuleServerDriverContext().VRDriverHandle(); }
+ inline IVRDriverManager *VR_CALLTYPE VRDriverManager() { return OpenVRInternal_ModuleServerDriverContext().VRDriverManager(); }
+ inline IVRResources *VR_CALLTYPE VRResources() { return OpenVRInternal_ModuleServerDriverContext().VRResources(); }
+
+ inline void COpenVRDriverContext::Clear()
+ {
+ m_pVRSettings = nullptr;
+ m_pVRProperties = nullptr;
+ m_pVRServerDriverHost = nullptr;
+ m_pVRDriverLog = nullptr;
+ m_pVRWatchdogHost = nullptr;
+ m_pVRDriverManager = nullptr;
+ m_pVRResources = nullptr;
+ }
+
+ inline EVRInitError COpenVRDriverContext::InitServer()
+ {
+ Clear();
+ if ( !VRServerDriverHost()
+ || !VRSettings()
+ || !VRProperties()
+ || !VRDriverLog()
+ || !VRDriverManager()
+ || !VRResources() )
+ return VRInitError_Init_InterfaceNotFound;
+ return VRInitError_None;
+ }
+
+ inline EVRInitError COpenVRDriverContext::InitWatchdog()
+ {
+ Clear();
+ if ( !VRWatchdogHost()
+ || !VRSettings()
+ || !VRDriverLog() )
+ return VRInitError_Init_InterfaceNotFound;
+ return VRInitError_None;
+ }
+
+ inline EVRInitError InitServerDriverContext( IVRDriverContext *pContext )
+ {
+ VRDriverContext() = pContext;
+ return OpenVRInternal_ModuleServerDriverContext().InitServer();
+ }
+
+ inline EVRInitError InitWatchdogDriverContext( IVRDriverContext *pContext )
+ {
+ VRDriverContext() = pContext;
+ return OpenVRInternal_ModuleServerDriverContext().InitWatchdog();
+ }
+
+ inline void CleanupDriverContext()
+ {
+ VRDriverContext() = nullptr;
+ OpenVRInternal_ModuleServerDriverContext().Clear();
+ }
+
+ #define VR_INIT_SERVER_DRIVER_CONTEXT( pContext ) \
+ { \
+ vr::EVRInitError eError = vr::InitServerDriverContext( pContext ); \
+ if( eError != vr::VRInitError_None ) \
+ return eError; \
+ }
+
+ #define VR_CLEANUP_SERVER_DRIVER_CONTEXT() \
+ vr::CleanupDriverContext();
+
+ #define VR_INIT_WATCHDOG_DRIVER_CONTEXT( pContext ) \
+ { \
+ vr::EVRInitError eError = vr::InitWatchdogDriverContext( pContext ); \
+ if( eError != vr::VRInitError_None ) \
+ return eError; \
+ }
+
+ #define VR_CLEANUP_WATCHDOG_DRIVER_CONTEXT() \
+ vr::CleanupDriverContext();
+}
+// End
+
+#endif // _OPENVR_DRIVER_API
+
+
diff --git a/bin/osx64/OpenVR.framework/Versions/A/OpenVR b/bin/osx64/OpenVR.framework/Versions/A/OpenVR
new file mode 100755
index 0000000..1609501
--- /dev/null
+++ b/bin/osx64/OpenVR.framework/Versions/A/OpenVR
Binary files differ
diff --git a/bin/osx64/OpenVR.framework/Versions/A/Resources/Info.plist b/bin/osx64/OpenVR.framework/Versions/A/Resources/Info.plist
new file mode 100644
index 0000000..50ff90a
--- /dev/null
+++ b/bin/osx64/OpenVR.framework/Versions/A/Resources/Info.plist
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleIdentifier</key>
+ <string>com.valvesoftware.OpenVR.framework</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>OpenVR</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+</dict>
+</plist>
diff --git a/bin/osx64/OpenVR.framework/Versions/Current b/bin/osx64/OpenVR.framework/Versions/Current
new file mode 120000
index 0000000..8c7e5a6
--- /dev/null
+++ b/bin/osx64/OpenVR.framework/Versions/Current
@@ -0,0 +1 @@
+A \ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5ad5cfa..58954d6 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -5,15 +5,15 @@ set( LIBNAME "openvr_api" )
# Set some properies for specific files.
if(APPLE)
- set(CMAKE_MACOSX_RPATH 0)
+ set(CMAKE_MACOSX_RPATH 1)
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
set_source_files_properties(vrcommon/pathtools_public.cpp vrcommon/vrpathregistry_public.cpp PROPERTIES COMPILE_FLAGS "-x objective-c++")
endif()
- if(BUILD_SHARED)
+ if(BUILD_SHARED OR BUILD_FRAMEWORK)
find_library(FOUNDATION_FRAMEWORK Foundation)
mark_as_advanced(FOUNDATION_FRAMEWORK)
set(EXTRA_LIBS ${EXTRA_LIBS} ${FOUNDATION_FRAMEWORK})
- endif(BUILD_SHARED)
+ endif(BUILD_SHARED OR BUILD_FRAMEWORK)
elseif(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
add_definitions( -DWIN64 )
@@ -61,6 +61,28 @@ source_group("VRCommon" FILES
# Build the library.
if(BUILD_SHARED)
add_library(${LIBNAME} SHARED ${SOURCE_FILES})
+elseif(BUILD_FRAMEWORK)
+ set( LIBNAME "OpenVR" )
+ add_library( ${LIBNAME}
+ SHARED ${SOURCE_FILES}
+ ${CMAKE_SOURCE_DIR}/headers/openvr.h
+ ${CMAKE_SOURCE_DIR}/headers/openvr_api.cs
+ ${CMAKE_SOURCE_DIR}/headers/openvr_api.json
+ ${CMAKE_SOURCE_DIR}/headers/openvr_capi.h
+ ${CMAKE_SOURCE_DIR}/headers/openvr_driver.h
+ )
+ set_target_properties(OpenVR PROPERTIES
+ FRAMEWORK TRUE
+ FRAMEWORK_VERSION A
+ MACOSX_FRAMEWORK_IDENTIFIER com.valvesoftware.OpenVR.framework
+ MACOSX_FRAMEWORK_INFO_PLIST ${CMAKE_SOURCE_DIR}/src/Info.plist
+ # "current version" in semantic format in Mach-O binary file
+ VERSION 1.0.6
+ # "compatibility version" in semantic format in Mach-O binary file
+ SOVERSION 1.0.0
+ PUBLIC_HEADER "${CMAKE_SOURCE_DIR}/headers/openvr.h;${CMAKE_SOURCE_DIR}/headers/openvr_api.cs;${CMAKE_SOURCE_DIR}/headers/openvr_api.json;${CMAKE_SOURCE_DIR}/headers/openvr_capi.h;${CMAKE_SOURCE_DIR}/headers/openvr_driver.h"
+ LINKER_LANGUAGE CXX
+ )
else()
add_library(${LIBNAME} STATIC ${SOURCE_FILES})
endif()
diff --git a/src/Info.plist b/src/Info.plist
new file mode 100644
index 0000000..50ff90a
--- /dev/null
+++ b/src/Info.plist
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleIdentifier</key>
+ <string>com.valvesoftware.OpenVR.framework</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>OpenVR</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+</dict>
+</plist>
diff --git a/src/README b/src/README
index 953e105..826c58d 100644
--- a/src/README
+++ b/src/README
@@ -3,9 +3,9 @@ OpenVR applications to the SteamVR runtime, taking into account the version
of the OpenVR interface they were compiled against.
The client binding library - openvr_api.dll on Windows, openvr_api.so on
-Linux, and openvr_api.dylib on macOS - knows how to find and read the
-SteamVR runtime installation information which allows it to find and
-dynamically connect to the installed runtime. In combination with the
+Linux, and openvr_api.dylib or OpenVR.framework on macOS - knows how to find
+and read the SteamVR runtime installation information which allows it to
+find and dynamically connect to the installed runtime. In combination with the
interface version identifiers from /include/openvr.h which are baked
into applications at the time they are built, the OpenVR API client
binding library captures and conveys to the SteamVR runtime the version
@@ -32,4 +32,8 @@ for your platform. For example, to build on a POSIX system simply perform
cd src; mkdir _build; cd _build; cmake ..; make
-and you will end up with the static library /src/_build/libopenvr_api.a \ No newline at end of file
+and you will end up with the static library /src/bin/<arch>/libopenvr_api.a
+
+To build a shared library, pass -DBUILD_SHARED=1 to cmake.
+To build as a framework on apple platforms, pass -DBUILD_FRAMEWORK=1 to cmake.
+To see a complete list of configurable build options, use `cmake -LAH`