You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Properly load multiple action sets in XR
This commit is contained in:
@@ -2274,33 +2274,42 @@ String OpenXRAPI::action_set_get_name(RID p_action_set) {
|
||||
return action_set->name;
|
||||
}
|
||||
|
||||
bool OpenXRAPI::action_set_attach(RID p_action_set) {
|
||||
ActionSet *action_set = action_set_owner.get_or_null(p_action_set);
|
||||
ERR_FAIL_NULL_V(action_set, false);
|
||||
|
||||
if (action_set->is_attached) {
|
||||
// already attached
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OpenXRAPI::attach_action_sets(const Vector<RID> &p_action_sets) {
|
||||
ERR_FAIL_COND_V(session == XR_NULL_HANDLE, false);
|
||||
|
||||
Vector<XrActionSet> action_handles;
|
||||
action_handles.resize(p_action_sets.size());
|
||||
for (int i = 0; i < p_action_sets.size(); i++) {
|
||||
ActionSet *action_set = action_set_owner.get_or_null(p_action_sets[i]);
|
||||
ERR_FAIL_NULL_V(action_set, false);
|
||||
|
||||
if (action_set->is_attached) {
|
||||
return false;
|
||||
}
|
||||
|
||||
action_handles.set(i, action_set->handle);
|
||||
}
|
||||
|
||||
// So according to the docs, once we attach our action set to our session it becomes read only..
|
||||
// https://www.khronos.org/registry/OpenXR/specs/1.0/man/html/xrAttachSessionActionSets.html
|
||||
XrSessionActionSetsAttachInfo attach_info = {
|
||||
XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO, // type
|
||||
nullptr, // next
|
||||
1, // countActionSets,
|
||||
&action_set->handle // actionSets
|
||||
(uint32_t)p_action_sets.size(), // countActionSets,
|
||||
action_handles.ptr() // actionSets
|
||||
};
|
||||
|
||||
XrResult result = xrAttachSessionActionSets(session, &attach_info);
|
||||
if (XR_FAILED(result)) {
|
||||
print_line("OpenXR: failed to attach action set! [", get_error_string(result), "]");
|
||||
print_line("OpenXR: failed to attach action sets! [", get_error_string(result), "]");
|
||||
return false;
|
||||
}
|
||||
|
||||
action_set->is_attached = true;
|
||||
for (int i = 0; i < p_action_sets.size(); i++) {
|
||||
ActionSet *action_set = action_set_owner.get_or_null(p_action_sets[i]);
|
||||
ERR_FAIL_NULL_V(action_set, false);
|
||||
action_set->is_attached = true;
|
||||
}
|
||||
|
||||
/* For debugging:
|
||||
print_verbose("Attached set " + action_set->name);
|
||||
|
||||
Reference in New Issue
Block a user