mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2024-12-29 11:06:18 +00:00
xrt|ipc|st/oxr: Adds support for XR_EXT_hand_interaction
profile.
This commit is contained in:
parent
eaa7017217
commit
b6b5610c05
|
@ -54,6 +54,7 @@ EXTENSIONS = (
|
||||||
['XR_EXT_debug_utils', 'XRT_FEATURE_OPENXR_DEBUG_UTILS'],
|
['XR_EXT_debug_utils', 'XRT_FEATURE_OPENXR_DEBUG_UTILS'],
|
||||||
['XR_EXT_dpad_binding'],
|
['XR_EXT_dpad_binding'],
|
||||||
['XR_EXT_eye_gaze_interaction'],
|
['XR_EXT_eye_gaze_interaction'],
|
||||||
|
['XR_EXT_hand_interaction'],
|
||||||
['XR_EXT_hand_tracking'],
|
['XR_EXT_hand_tracking'],
|
||||||
['XR_EXT_hp_mixed_reality_controller'],
|
['XR_EXT_hp_mixed_reality_controller'],
|
||||||
['XR_EXT_palm_pose', 'ALWAYS_DISABLED'],
|
['XR_EXT_palm_pose', 'ALWAYS_DISABLED'],
|
||||||
|
|
|
@ -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": {
|
"/interaction_profiles/khr/simple_controller": {
|
||||||
"title": "Khronos Simple Controller",
|
"title": "Khronos Simple Controller",
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"steamvr_controllertype": "khr_simple_controller",
|
"steamvr_controllertype": "khr_simple_controller",
|
||||||
"monado_device": "XRT_DEVICE_SIMPLE_CONTROLLER",
|
"monado_device": "XRT_DEVICE_SIMPLE_CONTROLLER",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -80,7 +166,7 @@
|
||||||
"title": "Google Daydream Controller",
|
"title": "Google Daydream Controller",
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"monado_device": "XRT_DEVICE_DAYDREAM",
|
"monado_device": "XRT_DEVICE_DAYDREAM",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -133,7 +219,7 @@
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"steamvr_controllertype": "vive_controller",
|
"steamvr_controllertype": "vive_controller",
|
||||||
"monado_device": "XRT_DEVICE_VIVE_WAND",
|
"monado_device": "XRT_DEVICE_VIVE_WAND",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -220,7 +306,7 @@
|
||||||
"type": "tracked_hmd",
|
"type": "tracked_hmd",
|
||||||
"steamvr_controllertype": "vive_pro",
|
"steamvr_controllertype": "vive_pro",
|
||||||
"monado_device": "XRT_DEVICE_VIVE_PRO",
|
"monado_device": "XRT_DEVICE_VIVE_PRO",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/head"
|
"/user/head"
|
||||||
],
|
],
|
||||||
|
@ -265,7 +351,7 @@
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"steamvr_controllertype": "holographic_controller",
|
"steamvr_controllertype": "holographic_controller",
|
||||||
"monado_device": "XRT_DEVICE_WMR_CONTROLLER",
|
"monado_device": "XRT_DEVICE_WMR_CONTROLLER",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -355,7 +441,7 @@
|
||||||
"type": "untracked_controller",
|
"type": "untracked_controller",
|
||||||
"steamvr_controllertype": "gamepad",
|
"steamvr_controllertype": "gamepad",
|
||||||
"monado_device": "XRT_DEVICE_XBOX_CONTROLLER",
|
"monado_device": "XRT_DEVICE_XBOX_CONTROLLER",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/gamepad"
|
"/user/gamepad"
|
||||||
],
|
],
|
||||||
|
@ -537,7 +623,7 @@
|
||||||
"title": "Oculus Go Controller",
|
"title": "Oculus Go Controller",
|
||||||
"type": "untracked_controller",
|
"type": "untracked_controller",
|
||||||
"monado_device": "XRT_DEVICE_GO_CONTROLLER",
|
"monado_device": "XRT_DEVICE_GO_CONTROLLER",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -606,7 +692,7 @@
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"steamvr_controllertype": "oculus_touch",
|
"steamvr_controllertype": "oculus_touch",
|
||||||
"monado_device": "XRT_DEVICE_TOUCH_CONTROLLER",
|
"monado_device": "XRT_DEVICE_TOUCH_CONTROLLER",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -741,7 +827,7 @@
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"steamvr_controllertype": "knuckles",
|
"steamvr_controllertype": "knuckles",
|
||||||
"monado_device": "XRT_DEVICE_INDEX_CONTROLLER",
|
"monado_device": "XRT_DEVICE_INDEX_CONTROLLER",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -855,7 +941,7 @@
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"monado_device": "XRT_DEVICE_HP_REVERB_G2_CONTROLLER",
|
"monado_device": "XRT_DEVICE_HP_REVERB_G2_CONTROLLER",
|
||||||
"extension": "XR_EXT_hp_mixed_reality_controller",
|
"extension": "XR_EXT_hp_mixed_reality_controller",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -966,7 +1052,7 @@
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"monado_device": "XRT_DEVICE_SAMSUNG_ODYSSEY_CONTROLLER",
|
"monado_device": "XRT_DEVICE_SAMSUNG_ODYSSEY_CONTROLLER",
|
||||||
"extension": "XR_EXT_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": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -1056,7 +1142,7 @@
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"monado_device": "XRT_DEVICE_ML2_CONTROLLER",
|
"monado_device": "XRT_DEVICE_ML2_CONTROLLER",
|
||||||
"extension": "XR_ML_ml2_controller_interaction",
|
"extension": "XR_ML_ml2_controller_interaction",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -1143,7 +1229,7 @@
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"monado_device": "XRT_DEVICE_HAND_INTERACTION",
|
"monado_device": "XRT_DEVICE_HAND_INTERACTION",
|
||||||
"extension": "XR_MSFT_hand_interaction",
|
"extension": "XR_MSFT_hand_interaction",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -1189,7 +1275,7 @@
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"monado_device": "XRT_DEVICE_PSMV",
|
"monado_device": "XRT_DEVICE_PSMV",
|
||||||
"extension": "XR_MNDX_ball_on_a_stick_controller",
|
"extension": "XR_MNDX_ball_on_a_stick_controller",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -1315,7 +1401,7 @@
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"monado_device": "XRT_DEVICE_HYDRA",
|
"monado_device": "XRT_DEVICE_HYDRA",
|
||||||
"extension": "XR_MNDX_hydra",
|
"extension": "XR_MNDX_hydra",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
@ -1398,7 +1484,7 @@
|
||||||
"type": "eye_tracker",
|
"type": "eye_tracker",
|
||||||
"monado_device": "XRT_DEVICE_EYE_GAZE_INTERACTION",
|
"monado_device": "XRT_DEVICE_EYE_GAZE_INTERACTION",
|
||||||
"extension": "XR_EXT_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": [
|
"subaction_paths": [
|
||||||
"/user/eyes_ext"
|
"/user/eyes_ext"
|
||||||
],
|
],
|
||||||
|
@ -1418,7 +1504,7 @@
|
||||||
"type": "tracked_controller",
|
"type": "tracked_controller",
|
||||||
"monado_device": "XRT_DEVICE_VIVE_TRACKER",
|
"monado_device": "XRT_DEVICE_VIVE_TRACKER",
|
||||||
"extension": "XR_HTCX_vive_tracker_interaction",
|
"extension": "XR_HTCX_vive_tracker_interaction",
|
||||||
"extended_by": ["ext/palm_pose"],
|
"extended_by": ["ext/palm_pose", "ext/hand_interaction_poses"],
|
||||||
"subaction_paths": [
|
"subaction_paths": [
|
||||||
"/user/hand/left",
|
"/user/hand/left",
|
||||||
"/user/hand/right"
|
"/user/hand/right"
|
||||||
|
|
|
@ -33,7 +33,8 @@
|
||||||
"value",
|
"value",
|
||||||
"haptic",
|
"haptic",
|
||||||
"force",
|
"force",
|
||||||
"pose"
|
"pose",
|
||||||
|
"ready_ext"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"subActionPathName": {
|
"subActionPathName": {
|
||||||
|
@ -94,6 +95,9 @@
|
||||||
},
|
},
|
||||||
"pose": {
|
"pose": {
|
||||||
"$ref": "#/definitions/monadoBindingDefine"
|
"$ref": "#/definitions/monadoBindingDefine"
|
||||||
|
},
|
||||||
|
"ready_ext": {
|
||||||
|
"$ref": "#/definitions/monadoBindingDefine"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -197,7 +201,7 @@
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"title": "Paths provided by this profile",
|
"title": "Paths provided by this profile",
|
||||||
"propertyNames": {
|
"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": {
|
"additionalProperties": {
|
||||||
"$ref": "#/definitions/subpathData"
|
"$ref": "#/definitions/subpathData"
|
||||||
|
|
|
@ -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_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_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_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;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -373,6 +373,7 @@ update_session_state_locked(struct multi_system_compositor *msc)
|
||||||
.view_type = XRT_VIEW_TYPE_STEREO,
|
.view_type = XRT_VIEW_TYPE_STEREO,
|
||||||
.ext_hand_tracking_enabled = false,
|
.ext_hand_tracking_enabled = false,
|
||||||
.ext_eye_gaze_interaction_enabled = false,
|
.ext_eye_gaze_interaction_enabled = false,
|
||||||
|
.ext_hand_interaction_enabled = false,
|
||||||
};
|
};
|
||||||
|
|
||||||
switch (msc->sessions.state) {
|
switch (msc->sessions.state) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright 2019-2022, Collabora, Ltd.
|
// Copyright 2019-2023, Collabora, Ltd.
|
||||||
// SPDX-License-Identifier: BSL-1.0
|
// SPDX-License-Identifier: BSL-1.0
|
||||||
/*!
|
/*!
|
||||||
* @file
|
* @file
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
* @author Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
|
* @author Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
|
||||||
* @author Ryan Pavlik <ryan.pavlik@collabora.com>
|
* @author Ryan Pavlik <ryan.pavlik@collabora.com>
|
||||||
* @author Christoph Haag <christoph.haag@collabora.com>
|
* @author Christoph Haag <christoph.haag@collabora.com>
|
||||||
|
* @author Korcan Hussein <korcan.hussein@collabora.com>
|
||||||
* @ingroup xrt_iface
|
* @ingroup xrt_iface
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -862,6 +863,7 @@ struct xrt_begin_session_info
|
||||||
enum xrt_view_type view_type;
|
enum xrt_view_type view_type;
|
||||||
bool ext_hand_tracking_enabled;
|
bool ext_hand_tracking_enabled;
|
||||||
bool ext_eye_gaze_interaction_enabled;
|
bool ext_eye_gaze_interaction_enabled;
|
||||||
|
bool ext_hand_interaction_enabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -970,6 +970,16 @@ enum xrt_input_name
|
||||||
XRT_INPUT_PSSENSE_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x0314, BOOLEAN),
|
XRT_INPUT_PSSENSE_THUMBSTICK_TOUCH = XRT_INPUT_NAME(0x0314, BOOLEAN),
|
||||||
XRT_INPUT_PSSENSE_GRIP_POSE = XRT_INPUT_NAME(0x0315, POSE),
|
XRT_INPUT_PSSENSE_GRIP_POSE = XRT_INPUT_NAME(0x0315, POSE),
|
||||||
XRT_INPUT_PSSENSE_AIM_POSE = XRT_INPUT_NAME(0x0316, 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
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ struct xrt_instance_info
|
||||||
char application_name[XRT_MAX_APPLICATION_NAME_SIZE];
|
char application_name[XRT_MAX_APPLICATION_NAME_SIZE];
|
||||||
bool ext_hand_tracking_enabled;
|
bool ext_hand_tracking_enabled;
|
||||||
bool ext_eye_gaze_interaction_enabled;
|
bool ext_eye_gaze_interaction_enabled;
|
||||||
|
bool ext_hand_interaction_enabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
* @brief Handling functions called from generated dispatch function.
|
* @brief Handling functions called from generated dispatch function.
|
||||||
* @author Pete Black <pblack@collabora.com>
|
* @author Pete Black <pblack@collabora.com>
|
||||||
* @author Jakob Bornecrantz <jakob@collabora.com>
|
* @author Jakob Bornecrantz <jakob@collabora.com>
|
||||||
|
* @author Korcan Hussein <korcan.hussein@collabora.com>
|
||||||
* @ingroup ipc_server
|
* @ingroup ipc_server
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -215,6 +216,7 @@ ipc_handle_session_begin(volatile struct ipc_client_state *ics)
|
||||||
.view_type = XRT_VIEW_TYPE_STEREO,
|
.view_type = XRT_VIEW_TYPE_STEREO,
|
||||||
.ext_hand_tracking_enabled = ics->client_state.info.ext_hand_tracking_enabled,
|
.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_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);
|
return xrt_comp_begin_session(ics->xc, &begin_session_info);
|
||||||
|
|
|
@ -305,6 +305,16 @@ oxr_xrSuggestInteractionProfileBindings(XrInstance instance,
|
||||||
subpath_fn = oxr_verify_ext_eye_gaze_interaction_subpath;
|
subpath_fn = oxr_verify_ext_eye_gaze_interaction_subpath;
|
||||||
dpad_path_fn = oxr_verify_ext_eye_gaze_interaction_dpad_path;
|
dpad_path_fn = oxr_verify_ext_eye_gaze_interaction_dpad_path;
|
||||||
dpad_emulator_fn = oxr_verify_ext_eye_gaze_interaction_dpad_emulator;
|
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 {
|
} else {
|
||||||
return oxr_error(&log, XR_ERROR_PATH_UNSUPPORTED,
|
return oxr_error(&log, XR_ERROR_PATH_UNSUPPORTED,
|
||||||
"(suggestedBindings->interactionProfile == \"%s\") is not "
|
"(suggestedBindings->interactionProfile == \"%s\") is not "
|
||||||
|
@ -318,6 +328,9 @@ oxr_xrSuggestInteractionProfileBindings(XrInstance instance,
|
||||||
const struct oxr_verify_extension_status verify_ext_status = {
|
const struct oxr_verify_extension_status verify_ext_status = {
|
||||||
#ifdef OXR_HAVE_EXT_palm_pose
|
#ifdef OXR_HAVE_EXT_palm_pose
|
||||||
.EXT_palm_pose = inst->extensions.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
|
#endif
|
||||||
.EXT_hp_mixed_reality_controller = inst->extensions.EXT_hp_mixed_reality_controller,
|
.EXT_hp_mixed_reality_controller = inst->extensions.EXT_hp_mixed_reality_controller,
|
||||||
.EXT_samsung_odyssey_controller = inst->extensions.EXT_samsung_odyssey_controller,
|
.EXT_samsung_odyssey_controller = inst->extensions.EXT_samsung_odyssey_controller,
|
||||||
|
|
|
@ -257,6 +257,17 @@
|
||||||
#endif
|
#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
|
* XR_EXT_hand_tracking
|
||||||
*/
|
*/
|
||||||
|
@ -472,6 +483,7 @@
|
||||||
OXR_EXTENSION_SUPPORT_EXT_debug_utils(_) \
|
OXR_EXTENSION_SUPPORT_EXT_debug_utils(_) \
|
||||||
OXR_EXTENSION_SUPPORT_EXT_dpad_binding(_) \
|
OXR_EXTENSION_SUPPORT_EXT_dpad_binding(_) \
|
||||||
OXR_EXTENSION_SUPPORT_EXT_eye_gaze_interaction(_) \
|
OXR_EXTENSION_SUPPORT_EXT_eye_gaze_interaction(_) \
|
||||||
|
OXR_EXTENSION_SUPPORT_EXT_hand_interaction(_) \
|
||||||
OXR_EXTENSION_SUPPORT_EXT_hand_tracking(_) \
|
OXR_EXTENSION_SUPPORT_EXT_hand_tracking(_) \
|
||||||
OXR_EXTENSION_SUPPORT_EXT_hp_mixed_reality_controller(_) \
|
OXR_EXTENSION_SUPPORT_EXT_hp_mixed_reality_controller(_) \
|
||||||
OXR_EXTENSION_SUPPORT_EXT_palm_pose(_) \
|
OXR_EXTENSION_SUPPORT_EXT_palm_pose(_) \
|
||||||
|
|
|
@ -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/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/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/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
|
// clang-format on
|
||||||
|
|
||||||
|
@ -249,6 +250,7 @@ oxr_instance_create(struct oxr_logger *log,
|
||||||
struct xrt_instance_info i_info = {
|
struct xrt_instance_info i_info = {
|
||||||
.ext_hand_tracking_enabled = extensions->EXT_hand_tracking,
|
.ext_hand_tracking_enabled = extensions->EXT_hand_tracking,
|
||||||
.ext_eye_gaze_interaction_enabled = extensions->EXT_eye_gaze_interaction,
|
.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",
|
snprintf(i_info.application_name, sizeof(inst->xinst->instance_info.application_name), "%s",
|
||||||
createInfo->applicationInfo.applicationName);
|
createInfo->applicationInfo.applicationName);
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
* @file
|
* @file
|
||||||
* @brief The objects representing OpenXR handles, and prototypes for internal functions used in the state tracker.
|
* @brief The objects representing OpenXR handles, and prototypes for internal functions used in the state tracker.
|
||||||
* @author Jakob Bornecrantz <jakob@collabora.com>
|
* @author Jakob Bornecrantz <jakob@collabora.com>
|
||||||
|
* @author Korcan Hussein <korcan.hussein@collabora.com>
|
||||||
* @ingroup oxr_main
|
* @ingroup oxr_main
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1366,6 +1367,7 @@ struct oxr_instance
|
||||||
XrPath mndx_ball_on_a_stick_controller;
|
XrPath mndx_ball_on_a_stick_controller;
|
||||||
XrPath msft_hand_interaction;
|
XrPath msft_hand_interaction;
|
||||||
XrPath ext_eye_gaze_interaction;
|
XrPath ext_eye_gaze_interaction;
|
||||||
|
XrPath ext_hand_interaction;
|
||||||
} path_cache;
|
} path_cache;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|
|
|
@ -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,
|
.view_type = (enum xrt_view_type)beginInfo->primaryViewConfigurationType,
|
||||||
.ext_hand_tracking_enabled = extensions->EXT_hand_tracking,
|
.ext_hand_tracking_enabled = extensions->EXT_hand_tracking,
|
||||||
.ext_eye_gaze_interaction_enabled = extensions->EXT_eye_gaze_interaction,
|
.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);
|
xrt_result_t xret = xrt_comp_begin_session(xc, &begin_session_info);
|
||||||
|
|
Loading…
Reference in a new issue