Skip to content

Commit

Permalink
Add foundations for suggested profile bindings
Browse files Browse the repository at this point in the history
  • Loading branch information
fholger committed Apr 28, 2023
1 parent 940700a commit a007b95
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
46 changes: 46 additions & 0 deletions Code/VR/OpenXRInput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,32 @@

extern bool XR_CheckResult(XrResult result, const char* description, XrInstance instance = nullptr);

class SuggestedProfileBinding
{
public:
SuggestedProfileBinding(XrInstance instance) : m_instance(instance) {}

void AddBinding(XrAction action, const char* binding)
{
XrPath bindingPath;
XR_CheckResult(xrStringToPath(m_instance, binding, &bindingPath), "string to path");
m_bindings.push_back({ action, bindingPath });
}

void SuggestBindings(const char* profile)
{
XrInteractionProfileSuggestedBinding suggestedBindings{ XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING };
XR_CheckResult(xrStringToPath(m_instance, profile, &suggestedBindings.interactionProfile), "profile string to path");
suggestedBindings.suggestedBindings = m_bindings.data();
suggestedBindings.countSuggestedBindings = m_bindings.size();
XR_CheckResult(xrSuggestInteractionProfileBindings(m_instance, &suggestedBindings), "suggesting bindings");
}

private:
XrInstance m_instance;
std::vector<XrActionSuggestedBinding> m_bindings;
};

void OpenXRInput::Init(XrInstance instance, XrSession session)
{
m_instance = instance;
Expand All @@ -14,6 +40,7 @@ void OpenXRInput::Init(XrInstance instance, XrSession session)
XR_CheckResult(xrCreateActionSet(m_instance, &setCreateInfo, &m_ingameSet), "creating ingame action set", m_instance);

CreateInputActions();
SuggestBindings();
}

void OpenXRInput::Shutdown()
Expand Down Expand Up @@ -63,6 +90,25 @@ void OpenXRInput::CreateInputActions()
XR_CheckResult(xrCreateAction(m_ingameSet, &createInfo, &m_stick[1]), "creating thumbstick action");
}

void OpenXRInput::SuggestBindings()
{
SuggestedProfileBinding knuckles(m_instance);
knuckles.AddBinding(m_primaryFire, "/user/hand/right/input/trigger");
knuckles.AddBinding(m_controller[0], "/user/hand/left/input/aim");
knuckles.AddBinding(m_controller[1], "/user/hand/right/input/aim");
knuckles.AddBinding(m_stick[0], "/user/hand/left/input/thumbstick");
knuckles.AddBinding(m_stick[1], "/user/hand/right/input/thumbstick");
knuckles.SuggestBindings("/interaction_profiles/valve/index_controller");

SuggestedProfileBinding touch(m_instance);
touch.AddBinding(m_primaryFire, "/user/hand/right/input/trigger");
touch.AddBinding(m_controller[0], "/user/hand/left/input/aim");
touch.AddBinding(m_controller[1], "/user/hand/right/input/aim");
touch.AddBinding(m_stick[0], "/user/hand/left/input/thumbstick");
touch.AddBinding(m_stick[1], "/user/hand/right/input/thumbstick");
touch.SuggestBindings("/interaction_profiles/oculus/touch_controller");
}

void OpenXRInput::CreateBooleanAction(XrActionSet actionSet, XrAction* action, const char* name, const char* description)
{
XrActionCreateInfo createInfo{ XR_TYPE_ACTION_CREATE_INFO };
Expand Down
1 change: 1 addition & 0 deletions Code/VR/OpenXRInput.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,6 @@ class OpenXRInput
XrAction m_primaryFire = nullptr;

void CreateInputActions();
void SuggestBindings();
void CreateBooleanAction(XrActionSet actionSet, XrAction* action, const char* name, const char* description);
};

0 comments on commit a007b95

Please sign in to comment.