C Specification

// Provided by XR_META_simultaneous_hands_and_controllers
XrResult xrResumeSimultaneousHandsAndControllersTrackingMETA(
    XrSession                                   session,
    const XrSimultaneousHandsAndControllersTrackingResumeInfoMETA* resumeInfo);

Parameters

Parameter Descriptions

Description

An application can call xrResumeSimultaneousHandsAndControllersTrackingMETA to enable simultaneous hands and controller tracking.

Runtimes must initialize the simultaneous tracking feature in a paused state, so applications call the resume function for the simultaneous tracking to start.

If xrResumeSimultaneousHandsAndControllersTrackingMETA is called when the feature is already in a resumed state, the runtime must return XR_SUCCESS.

If a system supports detection of whether a controller is currently held by the user, the runtime should represent this transition by switching the active interaction profile in the relevant hand from the active controller interaction profile to an interaction profile representing hands if available.

For example, the returned interaction from xrGetCurrentInteractionProfile on /user/hand/left might change from /interaction_profiles/facebook/touch_controller_pro to /interaction_profiles/ext/hand_interaction_ext, generating an XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED (XrEventDataInteractionProfileChanged) event, assuming that bindings were suggested for both of those interaction profiles on that path.

This would indicate that the user put down the controller and is no longer holding a controller in their left hand. Note that in this example, if the user is holding a controller in their right hand, xrGetCurrentInteractionProfile on /user/hand/right still returns /interaction_profiles/facebook/touch_controller_pro.

Also note that if the XR_META_detached_controllers extension is used alongside XR_META_simultaneous_hands_and_controllers, then when a controller leaves the hand, it may report that interaction profile as current for the corresponding /user/detached_controller_meta path if bindings have been suggested for that path. See XR_META_simultaneous_hands_and_controllers for details.

When simultaneous tracking is resumed, runtimes should allow xrGetCurrentInteractionProfile to return different interaction profiles for different top level /user paths (e.g. /user/hand/left and /user/hand/right). Note that this behavior is already allowed by the specification, even without this extension, but runtimes exposing this extension may choose to not expose different interaction profiles for different top level /user paths unless it is enabled.

When a held controller transitions to an unheld state, the current interaction profile for the relevant top level path must change to an interaction profile representing hand tracking, if available.

Valid Usage (Implicit)
Return Codes
On success, this command returns
  • XR_SUCCESS

  • XR_SESSION_LOSS_PENDING

On failure, this command returns
  • XR_ERROR_FUNCTION_UNSUPPORTED

  • XR_ERROR_VALIDATION_FAILURE

  • XR_ERROR_RUNTIME_FAILURE

  • XR_ERROR_HANDLE_INVALID

  • XR_ERROR_INSTANCE_LOST

  • XR_ERROR_SESSION_LOST

  • XR_ERROR_FEATURE_UNSUPPORTED

See Also

Document Notes

For more information, see the OpenXR Specification

This page is extracted from the OpenXR Specification. Fixes and changes should be made to the Specification, not directly.

Copyright 2014-2025 The Khronos Group Inc.