diff --git a/scripts/generate_oxr_ext_support.py b/scripts/generate_oxr_ext_support.py index 4a823f6d1..282645b64 100755 --- a/scripts/generate_oxr_ext_support.py +++ b/scripts/generate_oxr_ext_support.py @@ -54,6 +54,7 @@ EXTENSIONS = ( ['XR_EXT_debug_utils', 'XRT_FEATURE_OPENXR_DEBUG_UTILS'], ['XR_EXT_dpad_binding'], ['XR_EXT_eye_gaze_interaction'], + ['XR_EXT_hand_interaction'], ['XR_EXT_hand_tracking'], ['XR_EXT_hp_mixed_reality_controller'], ['XR_EXT_palm_pose', 'ALWAYS_DISABLED'], diff --git a/src/xrt/auxiliary/bindings/bindings.json b/src/xrt/auxiliary/bindings/bindings.json index f679a0859..506cf6272 100644 --- a/src/xrt/auxiliary/bindings/bindings.json +++ b/src/xrt/auxiliary/bindings/bindings.json @@ -22,12 +22,98 @@ } }, + "/virtual_profiles/ext/hand_interaction_poses": { + "title": "Ext Hand Interaction Poses", + "type": "tracked_controller", + "monado_device": "XRT_DEVICE_HAND_INTERACTION", + "extension": "XR_EXT_hand_interaction", + "subaction_paths": [ + "/user/hand/left", + "/user/hand/right" + ], + "subpaths": { + "/input/pinch_ext": { + "type": "pose", + "localized_name": "Pinch", + "components": ["pose"], + "monado_bindings": { + "pose": "XRT_INPUT_HAND_PINCH_POSE" + } + }, + "/input/poke_ext": { + "type": "pose", + "localized_name": "Poke", + "components": ["pose"], + "monado_bindings": { + "pose": "XRT_INPUT_HAND_POKE_POSE" + } + } + } + }, + + "/interaction_profiles/ext/hand_interaction_ext": { + "title": "Ext Hand Interaction", + "type": "tracked_controller", + "monado_device": "XRT_DEVICE_HAND_INTERACTION", + "extension": "XR_EXT_hand_interaction", + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], + "subaction_paths": [ + "/user/hand/left", + "/user/hand/right" + ], + "subpaths": { + "/input/grip": { + "type": "pose", + "localized_name": "Grip", + "components": ["pose"], + "monado_bindings": { + "pose": "XRT_INPUT_HAND_GRIP_POSE" + } + }, + "/input/aim": { + "type": "pose", + "localized_name": "Aim", + "components": ["pose"], + "monado_bindings": { + "pose": "XRT_INPUT_HAND_AIM_POSE" + } + }, + "/input/pinch_ext": { + "type": "trigger", + "localized_name": "Pinch", + "components": ["value", "ready_ext"], + "monado_bindings": { + "value": "XRT_INPUT_HAND_PINCH_VALUE", + "ready_ext": "XRT_INPUT_HAND_PINCH_READY" + } + }, + "/input/aim_activate_ext": { + "type": "trigger", + "localized_name": "Aim Activate", + "components": ["value", "ready_ext"], + "monado_bindings": { + "value": "XRT_INPUT_HAND_AIM_ACTIVATE_VALUE", + "ready_ext": "XRT_INPUT_HAND_AIM_ACTIVATE_READY" + } + }, + "/input/grasp_ext": { + "type": "trigger", + "localized_name": "Grasp", + "components": ["value", "ready_ext"], + "monado_bindings": { + "value": "XRT_INPUT_HAND_GRASP_VALUE", + "ready_ext": "XRT_INPUT_HAND_GRASP_READY" + } + } + } + }, + "/interaction_profiles/khr/simple_controller": { "title": "Khronos Simple Controller", "type": "tracked_controller", "steamvr_controllertype": "khr_simple_controller", "monado_device": "XRT_DEVICE_SIMPLE_CONTROLLER", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -80,7 +166,7 @@ "title": "Google Daydream Controller", "type": "tracked_controller", "monado_device": "XRT_DEVICE_DAYDREAM", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -133,7 +219,7 @@ "type": "tracked_controller", "steamvr_controllertype": "vive_controller", "monado_device": "XRT_DEVICE_VIVE_WAND", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -220,7 +306,7 @@ "type": "tracked_hmd", "steamvr_controllertype": "vive_pro", "monado_device": "XRT_DEVICE_VIVE_PRO", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/head" ], @@ -265,7 +351,7 @@ "type": "tracked_controller", "steamvr_controllertype": "holographic_controller", "monado_device": "XRT_DEVICE_WMR_CONTROLLER", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -355,7 +441,7 @@ "type": "untracked_controller", "steamvr_controllertype": "gamepad", "monado_device": "XRT_DEVICE_XBOX_CONTROLLER", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/gamepad" ], @@ -537,7 +623,7 @@ "title": "Oculus Go Controller", "type": "untracked_controller", "monado_device": "XRT_DEVICE_GO_CONTROLLER", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -606,7 +692,7 @@ "type": "tracked_controller", "steamvr_controllertype": "oculus_touch", "monado_device": "XRT_DEVICE_TOUCH_CONTROLLER", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -741,7 +827,7 @@ "type": "tracked_controller", "steamvr_controllertype": "knuckles", "monado_device": "XRT_DEVICE_INDEX_CONTROLLER", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -855,7 +941,7 @@ "type": "tracked_controller", "monado_device": "XRT_DEVICE_HP_REVERB_G2_CONTROLLER", "extension": "XR_EXT_hp_mixed_reality_controller", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -966,7 +1052,7 @@ "type": "tracked_controller", "monado_device": "XRT_DEVICE_SAMSUNG_ODYSSEY_CONTROLLER", "extension": "XR_EXT_samsung_odyssey_controller", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -1056,7 +1142,7 @@ "type": "tracked_controller", "monado_device": "XRT_DEVICE_ML2_CONTROLLER", "extension": "XR_ML_ml2_controller_interaction", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -1143,7 +1229,7 @@ "type": "tracked_controller", "monado_device": "XRT_DEVICE_HAND_INTERACTION", "extension": "XR_MSFT_hand_interaction", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -1189,7 +1275,7 @@ "type": "tracked_controller", "monado_device": "XRT_DEVICE_PSMV", "extension": "XR_MNDX_ball_on_a_stick_controller", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -1315,7 +1401,7 @@ "type": "tracked_controller", "monado_device": "XRT_DEVICE_HYDRA", "extension": "XR_MNDX_hydra", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" @@ -1398,7 +1484,7 @@ "type": "eye_tracker", "monado_device": "XRT_DEVICE_EYE_GAZE_INTERACTION", "extension": "XR_EXT_eye_gaze_interaction", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/eyes_ext" ], @@ -1418,7 +1504,7 @@ "type": "tracked_controller", "monado_device": "XRT_DEVICE_VIVE_TRACKER", "extension": "XR_HTCX_vive_tracker_interaction", - "extended_by": ["ext/palm_pose"], + "extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"], "subaction_paths": [ "/user/hand/left", "/user/hand/right" diff --git a/src/xrt/auxiliary/bindings/bindings.schema.json b/src/xrt/auxiliary/bindings/bindings.schema.json index 1d7c2a9fe..d1080945b 100644 --- a/src/xrt/auxiliary/bindings/bindings.schema.json +++ b/src/xrt/auxiliary/bindings/bindings.schema.json @@ -33,7 +33,8 @@ "value", "haptic", "force", - "pose" + "pose", + "ready_ext" ] }, "subActionPathName": { @@ -94,6 +95,9 @@ }, "pose": { "$ref": "#/definitions/monadoBindingDefine" + }, + "ready_ext": { + "$ref": "#/definitions/monadoBindingDefine" } } }, @@ -197,7 +201,7 @@ "type": "object", "title": "Paths provided by this profile", "propertyNames": { - "pattern": "^(/input/(select|menu|grip|aim|trackpad|system|squeeze|trigger|volume_up|volume_down|mute_mic|thumbrest|home|start|gaze_ext|([a-z]+)_mndx|[1-4]|thumbstick(_left|_right)?|view|a|b|x|y|dpad_(up|down|left|right)|shoulder(_left|_right)?))|(/output/haptic(_left|_right|_left_trigger|_right_trigger)?)$" + "pattern": "^(/input/(select|menu|grip|aim|pinch|poke|trackpad|system|squeeze|trigger|volume_up|volume_down|mute_mic|thumbrest|home|start|gaze_ext|ready_ext|([a-z]+)_mndx|[1-4]|thumbstick(_left|_right)?|view|a|b|x|y|dpad_(up|down|left|right)|shoulder(_left|_right)?))|(/output/haptic(_left|_right|_left_trigger|_right_trigger)?)$" }, "additionalProperties": { "$ref": "#/definitions/subpathData" diff --git a/src/xrt/auxiliary/util/u_pretty_print.c b/src/xrt/auxiliary/util/u_pretty_print.c index ca583d835..dafbc135f 100644 --- a/src/xrt/auxiliary/util/u_pretty_print.c +++ b/src/xrt/auxiliary/util/u_pretty_print.c @@ -276,6 +276,14 @@ u_pp_xrt_input_name(struct u_pp_delegate dg, enum xrt_input_name name) case XRT_INPUT_ML2_CONTROLLER_GRIP_POSE: DG("XRT_INPUT_ML2_CONTROLLER_GRIP_POSE"); return; case XRT_INPUT_ML2_CONTROLLER_AIM_POSE: DG("XRT_INPUT_ML2_CONTROLLER_AIM_POSE"); return; case XRT_INPUT_ML2_CONTROLLER_SHOULDER_CLICK: DG("XRT_INPUT_ML2_CONTROLLER_SHOULDER_CLICK"); return; + case XRT_INPUT_HAND_PINCH_POSE: DG("XRT_INPUT_HAND_PINCH_POSE"); return; + case XRT_INPUT_HAND_POKE_POSE: DG("XRT_INPUT_HAND_POKE_POSE"); return; + case XRT_INPUT_HAND_PINCH_VALUE: DG("XRT_INPUT_HAND_PINCH_VALUE"); return; + case XRT_INPUT_HAND_AIM_ACTIVATE_VALUE: DG("XRT_INPUT_HAND_AIM_ACTIVATE_VALUE"); return; + case XRT_INPUT_HAND_GRASP_VALUE: DG("XRT_INPUT_HAND_GRASP_VALUE"); return; + case XRT_INPUT_HAND_PINCH_READY: DG("XRT_INPUT_HAND_PINCH_READY"); return; + case XRT_INPUT_HAND_AIM_ACTIVATE_READY: DG("XRT_INPUT_HAND_AIM_ACTIVATE_READY"); return; + case XRT_INPUT_HAND_GRASP_READY: DG("XRT_INPUT_HAND_GRASP_READY"); return; default: break; } diff --git a/src/xrt/compositor/multi/comp_multi_system.c b/src/xrt/compositor/multi/comp_multi_system.c index 5283e71d5..710e63b1e 100644 --- a/src/xrt/compositor/multi/comp_multi_system.c +++ b/src/xrt/compositor/multi/comp_multi_system.c @@ -373,6 +373,7 @@ update_session_state_locked(struct multi_system_compositor *msc) .view_type = XRT_VIEW_TYPE_STEREO, .ext_hand_tracking_enabled = false, .ext_eye_gaze_interaction_enabled = false, + .ext_hand_interaction_enabled = false, }; switch (msc->sessions.state) { diff --git a/src/xrt/include/xrt/xrt_compositor.h b/src/xrt/include/xrt/xrt_compositor.h index 193801e15..ff8921389 100644 --- a/src/xrt/include/xrt/xrt_compositor.h +++ b/src/xrt/include/xrt/xrt_compositor.h @@ -1,4 +1,4 @@ -// Copyright 2019-2022, Collabora, Ltd. +// Copyright 2019-2023, Collabora, Ltd. // SPDX-License-Identifier: BSL-1.0 /*! * @file @@ -7,6 +7,7 @@ * @author Lubosz Sarnecki * @author Ryan Pavlik * @author Christoph Haag + * @author Korcan Hussein * @ingroup xrt_iface */ @@ -862,6 +863,7 @@ struct xrt_begin_session_info enum xrt_view_type view_type; bool ext_hand_tracking_enabled; bool ext_eye_gaze_interaction_enabled; + bool ext_hand_interaction_enabled; }; /*! diff --git a/src/xrt/include/xrt/xrt_defines.h b/src/xrt/include/xrt/xrt_defines.h index 69e38f86b..6743e855a 100644 --- a/src/xrt/include/xrt/xrt_defines.h +++ b/src/xrt/include/xrt/xrt_defines.h @@ -970,6 +970,16 @@ enum xrt_input_name XRT_INPUT_PSSENSE_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x0314, BOOLEAN), XRT_INPUT_PSSENSE_GRIP_POSE = XRT_INPUT_NAME(0x0315, POSE), XRT_INPUT_PSSENSE_AIM_POSE = XRT_INPUT_NAME(0x0316, POSE), + + // XR_EXT_hand_interaction + XRT_INPUT_HAND_PINCH_POSE = XRT_INPUT_NAME(0x0401, POSE), + XRT_INPUT_HAND_POKE_POSE = XRT_INPUT_NAME(0x0402, POSE), + XRT_INPUT_HAND_PINCH_VALUE = XRT_INPUT_NAME(0x0403, VEC1_ZERO_TO_ONE), + XRT_INPUT_HAND_AIM_ACTIVATE_VALUE = XRT_INPUT_NAME(0x0404, VEC1_ZERO_TO_ONE), + XRT_INPUT_HAND_GRASP_VALUE = XRT_INPUT_NAME(0x0405, VEC1_ZERO_TO_ONE), + XRT_INPUT_HAND_PINCH_READY = XRT_INPUT_NAME(0x0406, BOOLEAN), + XRT_INPUT_HAND_AIM_ACTIVATE_READY = XRT_INPUT_NAME(0x0407, BOOLEAN), + XRT_INPUT_HAND_GRASP_READY = XRT_INPUT_NAME(0x0408, BOOLEAN), // clang-format on }; diff --git a/src/xrt/include/xrt/xrt_instance.h b/src/xrt/include/xrt/xrt_instance.h index 12e261286..fa073d993 100644 --- a/src/xrt/include/xrt/xrt_instance.h +++ b/src/xrt/include/xrt/xrt_instance.h @@ -41,6 +41,7 @@ struct xrt_instance_info char application_name[XRT_MAX_APPLICATION_NAME_SIZE]; bool ext_hand_tracking_enabled; bool ext_eye_gaze_interaction_enabled; + bool ext_hand_interaction_enabled; }; /*! diff --git a/src/xrt/ipc/server/ipc_server_handler.c b/src/xrt/ipc/server/ipc_server_handler.c index 7515d5244..431eb7abc 100644 --- a/src/xrt/ipc/server/ipc_server_handler.c +++ b/src/xrt/ipc/server/ipc_server_handler.c @@ -5,6 +5,7 @@ * @brief Handling functions called from generated dispatch function. * @author Pete Black * @author Jakob Bornecrantz + * @author Korcan Hussein * @ingroup ipc_server */ @@ -215,6 +216,7 @@ ipc_handle_session_begin(volatile struct ipc_client_state *ics) .view_type = XRT_VIEW_TYPE_STEREO, .ext_hand_tracking_enabled = ics->client_state.info.ext_hand_tracking_enabled, .ext_eye_gaze_interaction_enabled = ics->client_state.info.ext_eye_gaze_interaction_enabled, + .ext_hand_interaction_enabled = ics->client_state.info.ext_hand_interaction_enabled, }; return xrt_comp_begin_session(ics->xc, &begin_session_info); diff --git a/src/xrt/state_trackers/oxr/oxr_api_action.c b/src/xrt/state_trackers/oxr/oxr_api_action.c index 6d24d7372..437308654 100644 --- a/src/xrt/state_trackers/oxr/oxr_api_action.c +++ b/src/xrt/state_trackers/oxr/oxr_api_action.c @@ -305,6 +305,16 @@ oxr_xrSuggestInteractionProfileBindings(XrInstance instance, subpath_fn = oxr_verify_ext_eye_gaze_interaction_subpath; dpad_path_fn = oxr_verify_ext_eye_gaze_interaction_dpad_path; dpad_emulator_fn = oxr_verify_ext_eye_gaze_interaction_dpad_emulator; + } else if (ip == inst->path_cache.ext_hand_interaction) { + if (!inst->extensions.EXT_hand_interaction) { + return oxr_error(&log, XR_ERROR_PATH_UNSUPPORTED, + "(suggestedBindings->interactionProfile == \"%s\") used but " + "XR_EXT_hand_interaction not enabled", + ip_str); + } + subpath_fn = oxr_verify_ext_hand_interaction_ext_subpath; + dpad_path_fn = oxr_verify_ext_hand_interaction_ext_dpad_path; + dpad_emulator_fn = oxr_verify_ext_hand_interaction_ext_dpad_emulator; } else { return oxr_error(&log, XR_ERROR_PATH_UNSUPPORTED, "(suggestedBindings->interactionProfile == \"%s\") is not " @@ -318,6 +328,9 @@ oxr_xrSuggestInteractionProfileBindings(XrInstance instance, const struct oxr_verify_extension_status verify_ext_status = { #ifdef OXR_HAVE_EXT_palm_pose .EXT_palm_pose = inst->extensions.EXT_palm_pose, +#endif +#ifdef OXR_HAVE_EXT_hand_interaction + .EXT_hand_interaction = inst->extensions.EXT_hand_interaction, #endif .EXT_hp_mixed_reality_controller = inst->extensions.EXT_hp_mixed_reality_controller, .EXT_samsung_odyssey_controller = inst->extensions.EXT_samsung_odyssey_controller, diff --git a/src/xrt/state_trackers/oxr/oxr_extension_support.h b/src/xrt/state_trackers/oxr/oxr_extension_support.h index 272a8e698..55cf5fa61 100644 --- a/src/xrt/state_trackers/oxr/oxr_extension_support.h +++ b/src/xrt/state_trackers/oxr/oxr_extension_support.h @@ -257,6 +257,17 @@ #endif +/* + * XR_EXT_hand_interaction + */ +#if defined(XR_EXT_hand_interaction) +#define OXR_HAVE_EXT_hand_interaction +#define OXR_EXTENSION_SUPPORT_EXT_hand_interaction(_) _(EXT_hand_interaction, EXT_HAND_INTERACTION) +#else +#define OXR_EXTENSION_SUPPORT_EXT_hand_interaction(_) +#endif + + /* * XR_EXT_hand_tracking */ @@ -472,6 +483,7 @@ OXR_EXTENSION_SUPPORT_EXT_debug_utils(_) \ OXR_EXTENSION_SUPPORT_EXT_dpad_binding(_) \ OXR_EXTENSION_SUPPORT_EXT_eye_gaze_interaction(_) \ + OXR_EXTENSION_SUPPORT_EXT_hand_interaction(_) \ OXR_EXTENSION_SUPPORT_EXT_hand_tracking(_) \ OXR_EXTENSION_SUPPORT_EXT_hp_mixed_reality_controller(_) \ OXR_EXTENSION_SUPPORT_EXT_palm_pose(_) \ diff --git a/src/xrt/state_trackers/oxr/oxr_instance.c b/src/xrt/state_trackers/oxr/oxr_instance.c index 004de6d49..da5aaffd5 100644 --- a/src/xrt/state_trackers/oxr/oxr_instance.c +++ b/src/xrt/state_trackers/oxr/oxr_instance.c @@ -240,6 +240,7 @@ oxr_instance_create(struct oxr_logger *log, cache_path(log, inst, "/interaction_profiles/mndx/ball_on_a_stick_controller", &inst->path_cache.mndx_ball_on_a_stick_controller); cache_path(log, inst, "/interaction_profiles/microsoft/hand_interaction", &inst->path_cache.msft_hand_interaction); cache_path(log, inst, "/interaction_profiles/ext/eye_gaze_interaction", &inst->path_cache.ext_eye_gaze_interaction); + cache_path(log, inst, "/interaction_profiles/ext/hand_interaction_ext", &inst->path_cache.ext_hand_interaction); // clang-format on @@ -249,6 +250,7 @@ oxr_instance_create(struct oxr_logger *log, struct xrt_instance_info i_info = { .ext_hand_tracking_enabled = extensions->EXT_hand_tracking, .ext_eye_gaze_interaction_enabled = extensions->EXT_eye_gaze_interaction, + .ext_hand_interaction_enabled = extensions->EXT_hand_interaction, }; snprintf(i_info.application_name, sizeof(inst->xinst->instance_info.application_name), "%s", createInfo->applicationInfo.applicationName); diff --git a/src/xrt/state_trackers/oxr/oxr_objects.h b/src/xrt/state_trackers/oxr/oxr_objects.h index edea2eebd..624707b5f 100644 --- a/src/xrt/state_trackers/oxr/oxr_objects.h +++ b/src/xrt/state_trackers/oxr/oxr_objects.h @@ -4,6 +4,7 @@ * @file * @brief The objects representing OpenXR handles, and prototypes for internal functions used in the state tracker. * @author Jakob Bornecrantz + * @author Korcan Hussein * @ingroup oxr_main */ @@ -1366,6 +1367,7 @@ struct oxr_instance XrPath mndx_ball_on_a_stick_controller; XrPath msft_hand_interaction; XrPath ext_eye_gaze_interaction; + XrPath ext_hand_interaction; } path_cache; struct diff --git a/src/xrt/state_trackers/oxr/oxr_session.c b/src/xrt/state_trackers/oxr/oxr_session.c index fc254678a..03b450f15 100644 --- a/src/xrt/state_trackers/oxr/oxr_session.c +++ b/src/xrt/state_trackers/oxr/oxr_session.c @@ -146,6 +146,7 @@ oxr_session_begin(struct oxr_logger *log, struct oxr_session *sess, const XrSess .view_type = (enum xrt_view_type)beginInfo->primaryViewConfigurationType, .ext_hand_tracking_enabled = extensions->EXT_hand_tracking, .ext_eye_gaze_interaction_enabled = extensions->EXT_eye_gaze_interaction, + .ext_hand_interaction_enabled = extensions->EXT_hand_interaction, }; xrt_result_t xret = xrt_comp_begin_session(xc, &begin_session_info);