From 23364f05f8208d31bb4af0bf6dc26ae7ea256725 Mon Sep 17 00:00:00 2001 From: Ada Date: Mon, 14 Apr 2025 01:54:10 +1000 Subject: [PATCH] Use Odyssey controller extension, might fix? --- plugins/openxr/src/OpenXrContext.cpp | 8 ++++++++ plugins/openxr/src/OpenXrInputPlugin.cpp | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/plugins/openxr/src/OpenXrContext.cpp b/plugins/openxr/src/OpenXrContext.cpp index d999671959..232f771c56 100644 --- a/plugins/openxr/src/OpenXrContext.cpp +++ b/plugins/openxr/src/OpenXrContext.cpp @@ -96,6 +96,7 @@ bool OpenXrContext::initInstance() { bool openglSupported = false; bool userPresenceSupported = false; + bool odysseyControllerSupported = false; qCInfo(xr_context_cat, "Runtime supports %d extensions:", count); for (uint32_t i = 0; i < count; i++) { @@ -104,6 +105,8 @@ bool OpenXrContext::initInstance() { openglSupported = true; } else if (strcmp(XR_EXT_USER_PRESENCE_EXTENSION_NAME, properties[i].extensionName) == 0) { userPresenceSupported = true; + } else if (strcmp(XR_EXT_SAMSUNG_ODYSSEY_CONTROLLER_EXTENSION_NAME, properties[i].extensionName) == 0) { + odysseyControllerSupported = true; } } @@ -113,10 +116,15 @@ bool OpenXrContext::initInstance() { } std::vector enabled = {XR_KHR_OPENGL_ENABLE_EXTENSION_NAME}; + if (userPresenceSupported) { enabled.push_back(XR_EXT_USER_PRESENCE_EXTENSION_NAME); } + if (odysseyControllerSupported) { + enabled.push_back(XR_EXT_SAMSUNG_ODYSSEY_CONTROLLER_EXTENSION_NAME); + } + XrInstanceCreateInfo info = { .type = XR_TYPE_INSTANCE_CREATE_INFO, .applicationInfo = { diff --git a/plugins/openxr/src/OpenXrInputPlugin.cpp b/plugins/openxr/src/OpenXrInputPlugin.cpp index 44198ee666..d3b8010f26 100644 --- a/plugins/openxr/src/OpenXrInputPlugin.cpp +++ b/plugins/openxr/src/OpenXrInputPlugin.cpp @@ -468,6 +468,25 @@ bool OpenXrInputPlugin::InputDevice::initActions() { {"right_pose", hand_right + "/grip/pose"}, {"right_haptic", "/user/hand/right/output/haptic"}, }}, + {"/interaction_profiles/samsung/odyssey_controller", { + {"left_secondary_click", hand_left + "/menu/click"}, + {"left_squeeze_value", hand_left + "/squeeze/click"}, + {"left_trigger_value", hand_left + "/trigger/value"}, + {"left_thumbstick", hand_left + "/thumbstick"}, + {"left_thumbstick_click", hand_left + "/trackpad/click"}, + {"left_thumbstick_touch", hand_left + "/trackpad/touch"}, + {"left_pose", hand_left + "/grip/pose"}, + {"left_haptic", "/user/hand/left/output/haptic"}, + + {"right_secondary_click", hand_right + "/menu/click"}, + {"right_squeeze_value", hand_right + "/squeeze/click"}, + {"right_trigger_value", hand_right + "/trigger/value"}, + {"right_thumbstick", hand_right + "/thumbstick"}, + {"right_thumbstick_click", hand_right + "/trackpad/click"}, + {"right_thumbstick_touch", hand_right + "/trackpad/touch"}, + {"right_pose", hand_right + "/grip/pose"}, + {"right_haptic", "/user/hand/right/output/haptic"}, + }}, {"/interaction_profiles/valve/index_controller", { {"left_primary_click", hand_left + "/a/click"}, {"left_secondary_click", hand_left + "/b/click"},