Commit 0e949152 authored by Lachlan Ford's avatar Lachlan Ford Committed by Chromium LUCI CQ

Implemented gamepad for generic-hand-select-grasp per the input profile

definition.

https://github.com/immersive-web/webxr-input-profiles/blob/master/packages/registry/profiles/generic/generic-hand-select-grasp.json

The grasp type exposes it as the correct button and does not trigger
the squeeze events.

Change-Id: I5041633e39f7f6b9bbc86bd379be64eeadc1055c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2628888Reviewed-by: default avatarAlexander Cooper <alcooper@chromium.org>
Commit-Queue: Lachlan Ford <laford@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#843686}
parent 6a340039
...@@ -110,6 +110,7 @@ XrResult OpenXrController::InitializeControllerActions() { ...@@ -110,6 +110,7 @@ XrResult OpenXrController::InitializeControllerActions() {
RETURN_IF_XR_FAILED(CreateActionsForButton(OpenXrButtonType::kThumbrest)); RETURN_IF_XR_FAILED(CreateActionsForButton(OpenXrButtonType::kThumbrest));
RETURN_IF_XR_FAILED(CreateActionsForButton(OpenXrButtonType::kButton1)); RETURN_IF_XR_FAILED(CreateActionsForButton(OpenXrButtonType::kButton1));
RETURN_IF_XR_FAILED(CreateActionsForButton(OpenXrButtonType::kButton2)); RETURN_IF_XR_FAILED(CreateActionsForButton(OpenXrButtonType::kButton2));
RETURN_IF_XR_FAILED(CreateActionsForButton(OpenXrButtonType::kGrasp));
const std::string type_string = GetStringFromType(type_); const std::string type_string = GetStringFromType(type_);
const std::string name_prefix = type_string + "_controller_"; const std::string name_prefix = type_string + "_controller_";
...@@ -415,6 +416,9 @@ XrResult OpenXrController::CreateActionsForButton( ...@@ -415,6 +416,9 @@ XrResult OpenXrController::CreateActionsForButton(
case OpenXrButtonType::kButton2: case OpenXrButtonType::kButton2:
name_prefix += "lower_button_"; name_prefix += "lower_button_";
break; break;
case OpenXrButtonType::kGrasp:
name_prefix += "grasp_";
break;
} }
std::unordered_map<OpenXrButtonActionType, XrAction>& cur_button = std::unordered_map<OpenXrButtonActionType, XrAction>& cur_button =
......
...@@ -89,6 +89,11 @@ base::Optional<Gamepad> GetXrStandardGamepad( ...@@ -89,6 +89,11 @@ base::Optional<Gamepad> GetXrStandardGamepad(
if (thumbrest_button) if (thumbrest_button)
builder.AddOptionalButtonData(thumbrest_button.value()); builder.AddOptionalButtonData(thumbrest_button.value());
base::Optional<GamepadButton> grasp_button =
controller.GetButton(OpenXrButtonType::kGrasp);
if (grasp_button)
builder.AddOptionalButtonData(grasp_button.value());
return builder.GetGamepad(); return builder.GetGamepad();
} }
......
...@@ -40,7 +40,8 @@ enum class OpenXrButtonType { ...@@ -40,7 +40,8 @@ enum class OpenXrButtonType {
kThumbrest = 4, kThumbrest = 4,
kButton1 = 5, kButton1 = 5,
kButton2 = 6, kButton2 = 6,
kMaxValue = 6, kGrasp = 7,
kMaxValue = 7,
}; };
enum class OpenXrAxisType { enum class OpenXrAxisType {
...@@ -284,7 +285,7 @@ constexpr OpenXrButtonPathMap kGenericHandSelectGraspButtonPathMaps[] = { ...@@ -284,7 +285,7 @@ constexpr OpenXrButtonPathMap kGenericHandSelectGraspButtonPathMaps[] = {
{{OpenXrButtonActionType::kPress, "/input/select/value"}, {{OpenXrButtonActionType::kPress, "/input/select/value"},
{OpenXrButtonActionType::kValue, "/input/select/value"}}, {OpenXrButtonActionType::kValue, "/input/select/value"}},
2}, 2},
{OpenXrButtonType::kTrigger, {OpenXrButtonType::kGrasp,
{{OpenXrButtonActionType::kPress, "/input/squeeze/value"}, {{OpenXrButtonActionType::kPress, "/input/squeeze/value"},
{OpenXrButtonActionType::kValue, "/input/squeeze/value"}}, {OpenXrButtonActionType::kValue, "/input/squeeze/value"}},
2}, 2},
...@@ -416,7 +417,7 @@ constexpr OpenXrControllerInteractionProfile ...@@ -416,7 +417,7 @@ constexpr OpenXrControllerInteractionProfile
OpenXrInteractionProfileType::kHandSelectGrasp, OpenXrInteractionProfileType::kHandSelectGrasp,
"/interaction_profiles/microsoft/hand_interaction", "/interaction_profiles/microsoft/hand_interaction",
kMSFTHandInteractionExtensionName, kMSFTHandInteractionExtensionName,
GamepadMapping::kNone, GamepadMapping::kXrStandard,
kGenericHandSelectGraspInputProfile, kGenericHandSelectGraspInputProfile,
base::size(kGenericHandSelectGraspInputProfile), base::size(kGenericHandSelectGraspInputProfile),
kGenericHandSelectGraspButtonPathMaps, kGenericHandSelectGraspButtonPathMaps,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment