From 958dcd742b8c98ebba111bdb6846e280a39afe1c Mon Sep 17 00:00:00 2001 From: hare_ware <3469405-hare_ware@users.noreply.gitlab.com> Date: Fri, 12 Apr 2024 03:44:04 -0400 Subject: [PATCH] Add bindings for WMR controllers --- src/backend/openxr/helpers.rs | 6 ++++ src/backend/openxr/input.rs | 63 +++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/src/backend/openxr/helpers.rs b/src/backend/openxr/helpers.rs index e127dde..529bdbd 100644 --- a/src/backend/openxr/helpers.rs +++ b/src/backend/openxr/helpers.rs @@ -21,6 +21,12 @@ pub(super) fn init_xr() -> Result<(xr::Instance, xr::SystemId), anyhow::Error> { let mut enabled_extensions = xr::ExtensionSet::default(); enabled_extensions.khr_vulkan_enable2 = true; enabled_extensions.extx_overlay = true; + if available_extensions.khr_binding_modification && available_extensions.ext_dpad_binding { + enabled_extensions.khr_binding_modification = true; + enabled_extensions.ext_dpad_binding = true; + } else { + log::warn!("Missing EXT_dpad_binding extension."); + } //#[cfg(not(debug_assertions))] let layers = []; diff --git a/src/backend/openxr/input.rs b/src/backend/openxr/input.rs index e452036..752dbdd 100644 --- a/src/backend/openxr/input.rs +++ b/src/backend/openxr/input.rs @@ -521,5 +521,68 @@ fn suggest_bindings( ], )?; + let path = instance.string_to_path("/interaction_profiles/microsoft/motion_controller")?; + instance.suggest_interaction_profile_bindings( + path, + &[ + xr::Binding::new( + &hands[0].action_pose, + instance.string_to_path("/user/hand/left/input/aim/pose")?, + ), + xr::Binding::new( + &hands[1].action_pose, + instance.string_to_path("/user/hand/right/input/aim/pose")?, + ), + xr::Binding::new( + &hands[1].action_click, + instance.string_to_path("/user/hand/right/input/trigger/value")?, + ), + xr::Binding::new( + &hands[0].action_grab, + instance.string_to_path("/user/hand/left/input/squeeze/click")?, + ), + xr::Binding::new( + &hands[1].action_grab, + instance.string_to_path("/user/hand/right/input/squeeze/click")?, + ), + xr::Binding::new( + &hands[0].action_click_modifier_right, + instance.string_to_path("/user/hand/left/input/trackpad/dpad_up")?, + ), + xr::Binding::new( + &hands[1].action_click_modifier_right, + instance.string_to_path("/user/hand/right/input/trackpad/dpad_up")?, + ), + xr::Binding::new( + &hands[0].action_click_modifier_middle, + instance.string_to_path("/user/hand/left/input/trackpad/dpad_down")?, + ), + xr::Binding::new( + &hands[1].action_click_modifier_middle, + instance.string_to_path("/user/hand/right/input/trackpad/dpad_down")?, + ), + xr::Binding::new( + &hands[0].action_scroll, + instance.string_to_path("/user/hand/left/input/thumbstick/y")?, + ), + xr::Binding::new( + &hands[1].action_scroll, + instance.string_to_path("/user/hand/right/input/thumbstick/y")?, + ), + xr::Binding::new( + &hands[0].action_show_hide, + instance.string_to_path("/user/hand/left/input/menu/click")?, + ), + xr::Binding::new( + &hands[0].action_haptics, + instance.string_to_path("/user/hand/left/output/haptic")?, + ), + xr::Binding::new( + &hands[1].action_haptics, + instance.string_to_path("/user/hand/right/output/haptic")?, + ), + ], + )?; + Ok(()) }