Assets 2

OpenVR SDK Update 1.1.3


  • Added required SteamVR version number to the header file.


  • New VRCompositor_FrameTiming ReprojectionFlag: VRCompositor_ReprojectionMotion. This flag will be set for application frames where motion smoothing was applied at least one of the times it was displayed.
  • New interface IsMotionSmoothingEnabled added to determine if that user has enabled motion smoothing or not.


  • Added VREvent_ChaperoneFlushCache, which is sent when the application should reload any cached data they loaded from the chaperone API. This event indicates the user's current chaperone settings have changed.
  • The VREvent_ChaperoneDataHasChanged event will no longer be sent, and IVRChaperone::ReloadInfo no longer has any effect.


  • Removed some unimplemented functions:
  • SetWorkingCollisionBoundsTagsInfo
  • GetLiveCollisionBoundsTagsInfo
  • SetWorkingPhysicalBoundsInfo
  • GetLivePhysicalBoundsInfo
  • Added ShowWorkingSetPreview/HideWorkingSetPreview, which will cause the application's current working set to show as the chaperone bounds rendered by the compositor. Unless your application is modifying the user's chaperone bounds, you won't need to call these functions. They are independent of bounds turning on and off based on how close the user is to them.


  • Added flag VROverlayFlags_MakeOverlaysInteractiveIfVisible. If this flag is set on an overlay and that overlay is visible, SteamVR will be placed into laser mouse mode. This will prevent the scene application from receiving any input, so use this flag carefully.
  • Changed SetOverlayDualAnalogTransform to take a pointer to better support the C API.


  • for headsets (like Vive Pro) which include multiple camera images in a single video stream, GetCameraIntrinsics and GetCameraProjection now support a uint32_t nCameraIndex parameter to get data about the specific camera.


  • Added an argument to GetOriginLocalizedName to allow the caller to specify which parts of the name they want in the returned string. The possible values are:
  • VRInputString_Hand - Which hand the origin is in. E.g. "Left Hand"
  • VRInputString_ControllerType - What kind of controller the user has in that hand. E.g. "Vive Controller"
  • VRInputString_InputSource - What part of that controller is the origin. E.g. "Trackpad"
  • VRInputString_All - All of the above. E.g. "Left Hand Vive Controller Trackpad"
  • Skeletal Input:
  • Added GetBoneCount to return the number of bones in the skeleton associated with an action
  • Added GetBoneHierarchy which returns the index of each bone's parent in a user-provided array
  • Added GetBoneName to retrieve the name of the bones in the skeleton
  • Added GetSkeletalReferenceTransforms to retrieve the transforms for several specific hand skeleton poses:
    • Bind Pose
    • Open Hand
    • Fist
    • Grip Limit, which is the shape of the hand when closed around the controller
  • Added GetSkeletalTrackingLevel to retrieve an estimate of the level of detail with which the controller associated with an action can track actual the movement of the user's body. The levels are:
    • Estimated: body part location can't be directly determined by the device. Any skeletal pose provided by the device is estimated by assuming the position required to active buttons, triggers, joysticks, or other input sensors. e.g. Vive Controller, Gamepad
    • Partial: body part location can be measured directly but with fewer degrees of freedom than the actual body part. Certain body part positions may be unmeasured by the device and estimated from other input data. e.g. Knuckles, gloves that only measure finger curl
    • Full: body part location can be measured directly throughout the entire range of motion of the body part. e.g. Mocap suit for the full body, gloves that measure rotation of each finger segment
  • Added GetSkeletalSummaryData which returns meta data about the current pose of the hand such as finger curl and splay
  • Removed ulRestrictToDevice as a parameter from all skeletal input functions

Driver API:

  • Added TrackedControllerRole_Treadmill, which lets a driver specify that a device is intended to function as a treadmill. This opts the device out of hand selection. The new input path /user/treadmill is automatically assigned to the first treadmill device to activate.


  • CVS_FORMAT_BAYER16BG for cameras which support delivering raw sensor data
  • Added camera index to GetCameraDistortion, GetCameraProjection, and GetCameraIntrinsics to support multiple cameras on the same device (see also IVRTrackedCamera)
  • Added the ability for cameras to return one of a small set of programmatic distortion function types and function parameters in addition to or instead of UV-sampling distortion through GetCameraDistortion. See EVRDistortionFunctionType and IVRCameraComponent::GetCameraIntrinsics and refer to OpenCV camera calibration and undistortion documentation.


  • Added parameter to CreateSkeletonComponent to allow the driver to specify the skeletal tracking level that the controller supports


  • Fixed texture corruption bug with hellovr_vulkan when controller is turned on after starting the application.

[git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4837234]

OpenVR SDK 1.1.3b:

  • Fixed issue with EVRSkeletalTrackingLevel not being defined in openvr_driver.h
    Fixes #947

[git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4837752]

@jeremyselan jeremyselan released this Oct 16, 2018 · 2 commits to master since this release

Assets 2

OpenVR SDK 1.0.17


  • Prop_CameraStreamFormat_Int32 - value from the openvr_driver.h ECameraVideoStreamFormat indicating the expected delivery format of the device
  • TrackedProp_IPCReadFailure


  • CameraVideoStreamFrameHeader_t:: ulFrameExposureTime - additional field which carries the time in absolute system ticks of when the frame exposure happened, and the time of the frames pose.
  • CVS_FORMAT_YUYV16 - new opener_driver.h ECameraVideoStreamFormat value indicating 16-bit YUYV raw image encoding


  • Fixed cNewInput and rchRenderModelComponentName having an incorrect type

IVRCompositor FrameTiming:

  • Added frame prediction and throttling bits to reprojection flags. Use the macros VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES and VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES for easy access. These values can be used to provide a better job at updating game simulation time for rendered frames when unable to meet native refresh rate requirements.
  • Added m_nNumVSyncsReadyForUse for tracking how long each frame took to render.
  • Added m_nNumVSyncsToFirstView for tracking how many vsync intervals before a given frame was first viewed (i.e. scanned out). This may differ from NumVSyncsReadyForUse if the frame was predicted further ahead since frames will never be displayed earlier than the time they were predicted to.
  • See for more details.

Driver API:

  • Added TrackingResult_Fallback_RotationOnly, which drivers can return if they have lost positional tracking but wish to still provide rotation-only tracking.

[git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4759625]

@jeremyselan jeremyselan released this Jul 27, 2018 · 3 commits to master since this release

Assets 2

OpenVR SDK 1.0.16

SteamVR Input (IVRInput/IVRDriverInput):

  • Added motion range parameter to UpdateSkeletonComponent in IVRDriverInput. This allows the driver to specify which range of motion set the given transforms are for, with controller or without controller
  • Added boneCount member InputSkeletalActionData struct. This lets users know how many bones are in the target skeleton by calling GetSkeletalActionData.
  • Added GetSkeletalBoneData as a separate call to get the bone transforms. User code should now call GetSkeletalActionData first to determine if the action is active, and if so then call GetSkeletalBoneData to retrieve the transforms.
  • Added an input example to the sample driver. This includes an input profile, localized strings, icons, etc.
  • Added ulRestrictToDevice argument to GetDigitalActionData, GetAnalogActionData, GetSkeletalActionData, GetSkeletalBoneData, GetSkeletalBoneDataCompressed, and TriggerHapticVibration. This allows applications to use the same action for both hands and differentiate them when calling to fetch the actual data. To get these handles, pass "/user/hand/right" or "/user/hand/left" to IVRInput::GetInputSourceHandle.
  • Added nPriority to VRActiveActionSet_t. This allows applications to control how multiple bindings from different actions sets block each other. If action set A and action set B both have something bound to the trigger, the action set with the larger priority number will be returned to the application and the action set with the smaller priority number will receive no input. If multiple action sets use the same priority number, the application will get inputs from all actions in those sets even if they're bound to the same input source.


  • Added GetComponentStateForDevicePath, which allows applications to animate controller components while using the new input system. To get these handles, pass "/user/hand/right" or "/user/hand/left" to IVRInput::GetInputSourceHandle or use the devicePath field in the structure filled out by IVRInput::GetOriginTrackedDeviceInfo.


  • Add a new interface that lets clients request driver descriptors for physical locations. These descriptors are opaque strings that are stored by the client until they want to recover that position for future use. The driver can update the coordinates whenever it has better information (for example when the HMD gets physically closer to the original location). The client should treat active anchors like object poses that could update at any time. Drivers don't have to implement any special support for this, in which case the runtime will provide fallback descriptors which are no better or worse than just having the application record virtual coordinates. As of this release, no drivers are providing special descriptors. This interface is present for prototyping but is not recommended for production use at this time. Further documentation is provided in the associated headers.


  • Added the ability for DisplayRedirect devices to disable mura correction in the compositor (set Prop_DriverRequestedMuraCorrectionMode_Int32 to EVRMuraCorrectionMode_NoCorrection).
  • Added the ability for DisplayRedirect devices to specify parameters to use for mura feathering. This is to allow DisplayRedirect devices that use the IVRVirtualDisplay interface to handle only a subset of mura correction in the middle of the display, while the compositor continues to correct the outer area. Mura correction values are linearly interpolated to zero over the specified ranges in pixels; corners use the max value.


  • Initial support for loading SteamVR drivers in the compositor process. Currently only supports IVRVirtualDisplay components in order to provide async reprojection support.

New texture submission formats for macOS 10.14:

  • macOS 10.14 now supports cross-process sharable MTLTexture objects. Applications on macOS 10.14 or higher should prefer submitting textures to the compositor using TextureType_Metal rather than TextureType_IOSurface.
  • TextureType_Metal textures of type MTLTextureType2D and MTLTextureType2DArray can be submitted to IVRCompositor::Submit. When submitting MTLTextureType2DArray textures, the compositor assumes layer 0 is the left eye texture (vr::EVREye::Eye_left) and layer 1 is the right eye texture (vr::EVREye::Eye_Right). Applications must still call IVRCompositor::Submit twice, once for each eye, when submitting MTLTextureType2DArray textures, and the two layers of the texture will only be utilized if the same MTLTexturetype2DArray texture is submitted to each call.

[git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4637165]

@jeremyselan jeremyselan released this May 15, 2018 · 4 commits to master since this release

Assets 2

OpenVR SDK 1.0.15

Added support for the new SteamVR Input system. Please see the documentation for details:

Added support for tracked devices to provide access to their raw inertial measurement unit (IMU) data stream. Please see the documentation for details:

The stream of IMU data in the form of vr::ImuSample_t structures is provided through a new way of sharing data between applications and drivers called IVRIOBuffers. For details, see the documentation:

A new section in the steamvr.vrsettings file supports tracked devices overriding the tracking of other devices. Please see the documentation for details:

[git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4505287]

@jeremyselan jeremyselan released this Apr 5, 2018 · 5 commits to master since this release

Assets 2

OpenVR SDK 1.0.14

Tracked Camera

  • Added property Prop_NumCameras_Int32 for drivers to specify the number of cameras a given headset provides.
  • Added property Prop_CameraFrameLayout_Int32 for drivers to specify the frame layout of images delivered (use provided EVRTrackedCameraFrameLayout values).


  • Added vsync mode, frame id, and vsync timing data to Present call.

[git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4455565]

@jeremyselan jeremyselan released this Feb 15, 2018 · 6 commits to master since this release

Assets 2

OpenVR SDK 1.0.13


  • Added VREvent_RoomViewShown and VREvent_RoomViewHidden. Indicates that the "room view" pass-through camera mode has been started or stopped by the user. An application or driver can use this to enable or disable other functionality.


  • Added TextureType_DXGISharedHandle. This is used to submit a shared texture handle directly and avoid an extra copy on the resource. This texture type is current only supported for overlays on Windows.

Driver Interface

  • Added TrackedControllerRole_OptOut. Set a controller to this if you want that controller to be ignored for the purposes of right/left hand selection.
  • Added Prop_NeverTracked_Bool. Set that property to true on a device if you want to inform the system that the device is never going to have a valid pose. For instance, you might use this for an untracked gamepad.
  • Prop_DistortionMeshResolution_Int32. Set this property on an HMD device if you want the system to generate a distortion mesh with a different resolution than the default, which is an approximately 50x50 grid across the full texture which is then trimmed to the area within the hidden area mesh.
  • Added Prop_MinimumIpdStepMeters_Float. Set this to the minimum IPD change in meters that should cause the IPD UI to be shown.
  • IVRDriverDirectModeComponent.CreateSwapTextureSet added the ability to specify sample count.
  • IVRDriverDirectModeComponent.SubmitLayer

[git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4366099]

@jeremyselan jeremyselan released this Jan 9, 2018 · 7 commits to master since this release

Assets 2

OpenVR SDK 1.0.12


  • Removed the concept of "input focus" and all the associated APIs.
  • Added more granular "system behavior" functions to allow applications to query whether or not they should modify their behavior based on the state of the system. The new function are:
  • IsInputAvailable() -- This will return true if the application is receiving input events. For instance, it will return false when the SteamVR dashboard is visible.
  • IsSteamVRDrawingControllers() -- This will return true if SteamVR is drawing the user's actual controllers for any reason. It will be true if the dashboard is visible or if the SteamVR keyboard is visible over the application.
  • ShouldApplicationPause() -- This will return true is applications should pause (where appropriate.) It generally indicates that the user's attention is being taken by something like the SteamVR dashboard. Multiplayer games and other applications where "pause" is unavailable can ignore this.
  • ShouldApplicationReduceRenderingWork() -- This will return true when SteamVR is using more GPU and CPU resources than normal. It is a hint to the application to reduce its own rendering workload. A common way of doing this is to submit smaller render targets per eye.
  • Added ability to pass depth info for scene textures. Use VRTextureWithDepth_t (or VRTextureWithPoseAndDepth_t) and pass Submit_TextureWithDepth flag to Submit.

Driver API

  • Replaced the API that drivers use to report input (button, trackpad, joystick, etc.) state. See IVRDriverInput documentation] for more information:
  • Replaced the haptic API into drivers with an events. Drivers will receive an event of type VREvent_Input_HapticVibration which uses the hapticVibration member of the data until to specify parameters.
  • Prop_CameraToHeadTransforms_Matrix34_Array - HMD devices which support multiple cameras expose camera extrinsic information in this property as an array of 3x4 transforms, one for each camera sensor. It is suggested that new devices also choose one of their cameras as a �primary� and expose its extrinsics as Prop_CameraToHeadTransform_Matrix34 for backwards compatibility with applications designed to recognize a single camera sensor.
  • Prop_DriverIsDrawingControllers_Bool � Drivers should set this property if they are rendering controllers on top of the scene in their own compositor. This will hint the application to stop drawing them separately.
  • Prop_DriverRequestsApplicationPause_Bool � Drivers can set this to true in order to hint applications to pause their game (e.g. when bringing up a custom dashboard).
  • Prop_DriverRequestsReducedRendering_Bool � Drivers can set this to true in order to hint applications to reduce rendering (e.g. when bringing up a custom dashboard).


  • Removed HandleControllerOverlayInteractionAsMouse. Overlay applications should use the mouse overlay input method instead.

[git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4305765]

@jeremyselan jeremyselan released this Dec 5, 2017 · 8 commits to master since this release

Assets 2

OpenVR SDK 1.0.11


  • k_unMaxTrackedDeviceCount is now 64 to support larger numbers of trackers.


  • resolves memory leaks with caller/callee MRC/ARC mismatches - consider re-integrating if you bundle or build libopenvr_api from source


  • extend SetExplicitTimingMode() with an extra mode to allow the application to instruct the runtime to never implicitly call PostPresentHandoff() instead of relying on sequencing of other calls to decide if it should.

Driver Interface:

  • Added several new driver properties to support better status UI layout and device-specific default idle icons for custom headset and tracked controller drivers:
  • Prop_ExpectedTrackingReferenceCount_Int32 - specifies the expected number of tracking sensors or basestations to reserve UI space for, though it can later offer more or fewer actual tracking reference devices.
  • Prop_ExpectedControllerCount_Int32 - specifics the expected number of tracked controllers to reserve UI space for, though it can later offer more or fewer actual tracked controllers.
  • Prop_NamedIconPathControllerLeftDeviceOff_String - specifies the placeholder inactive icon for the expected "left" controller when no controller has yet been found or activated.
  • Prop_NamedIconPathControllerRightDeviceOff_String - specifies the placeholder inactive icon for the expected "right" controller when no controller has yet been found or activated.
  • Prop_NamedIconPathTrackingReferenceDeviceOff_String -specifies the placeholder inactive icon for the expected tracking reference sensor/base when no tracking references have yet been found or activated.


  • Added separate PostPresent call which can be implemented to allow Present to return early after having called AcquiredSync on the provided syncTexture to unblock the compositor from continuing its work. Added GetFrameTiming to allow DriverDirectMode implementations to return additional timing information that only the driver's compositor knows about.
  • Added new property Prop_DoNotApplyPrediction_Bool - Can be set by drivers which implement DriverDirectMode to tell the compositor not to apply any prediction to the poses provided by the driver.

[git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4268903]

@natbro natbro released this Sep 1, 2017 · 10 commits to master since this release

Assets 2

OpenVR SDK 1.0.10



  • New IVROverlay::CloseMessageOverlay for closing modal dashboard dialogs the process owns


  • Adds context to IVRSystem::GetOutputDevice required to discriminate graphics device in Vulkan


  • Fixes crashes under some multithreading circumstances using OpenVR VR_* APIs
  • Updates hellovr_vulkan sample to use IVRSystem::GetOutputDevice
  • Fixes a crash with hellovr_opengl sample under macOS

@jeremyselan jeremyselan released this Jul 19, 2017 · 11 commits to master since this release

Assets 2

OpenVR SDK 1.0.9

  • Added TrackedDeviceDisplayTransformUpdated, which allows HMD drivers to explicitly specify the 4x3 eye-to-head transforms. The classic mechanism of setting Prop_UserIpdMeters_Float is still supported.
  • Added Prop_DriverProvidedChaperonePath_String, which a driver can set on the HMD device to specify a fallback chaperone setup that will be used if no other chaperone data is available for the universe returned by that driver. This string is a JSON object in the same format as the .vrchap file.
  • Added VREvent_WirelessDisconnect and VREvent_WirelessReconnect events for display redirect drivers to notify the runtime of display connection status.

[git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4059277]