diff --git a/modules/openxr/doc_classes/OpenXRAPIExtension.xml b/modules/openxr/doc_classes/OpenXRAPIExtension.xml index b0ee44267b7..6492bb46f54 100644 --- a/modules/openxr/doc_classes/OpenXRAPIExtension.xml +++ b/modules/openxr/doc_classes/OpenXRAPIExtension.xml @@ -17,6 +17,13 @@ https://registry.khronos.org/OpenXR/specs/1.0/man/html/XrPosef.html + + + + + Returns the corresponding [code]XrAction[/code] OpenXR handle for the given action RID. + + @@ -36,6 +43,14 @@ Marks the end of a debug label region. Removes the latest debug label region added by calling [method begin_debug_label_region]. + + + + + + Returns the [RID] corresponding to an [code]Action[/code] of a matching name, optionally limited to a specified action set. + + diff --git a/modules/openxr/openxr_api_extension.cpp b/modules/openxr/openxr_api_extension.cpp index 378b9308e00..8a4b8fd94a0 100644 --- a/modules/openxr/openxr_api_extension.cpp +++ b/modules/openxr/openxr_api_extension.cpp @@ -56,6 +56,9 @@ void OpenXRAPIExtension::_bind_methods() { ClassDB::bind_method(D_METHOD("get_next_frame_time"), &OpenXRAPIExtension::get_next_frame_time); ClassDB::bind_method(D_METHOD("can_render"), &OpenXRAPIExtension::can_render); + ClassDB::bind_method(D_METHOD("find_action", "name", "action_set"), &OpenXRAPIExtension::find_action); + ClassDB::bind_method(D_METHOD("action_get_handle", "action"), &OpenXRAPIExtension::action_get_handle); + ClassDB::bind_method(D_METHOD("get_hand_tracker", "hand_index"), &OpenXRAPIExtension::get_hand_tracker); ClassDB::bind_method(D_METHOD("register_composition_layer_provider", "extension"), &OpenXRAPIExtension::register_composition_layer_provider); @@ -201,6 +204,17 @@ bool OpenXRAPIExtension::can_render() { return OpenXRAPI::get_singleton()->can_render(); } +RID OpenXRAPIExtension::find_action(const String &p_name, const RID &p_action_set) { + ERR_FAIL_NULL_V(OpenXRAPI::get_singleton(), RID()); + return OpenXRAPI::get_singleton()->find_action(p_name, p_action_set); +} + +uint64_t OpenXRAPIExtension::action_get_handle(RID p_action) { + ERR_FAIL_NULL_V(OpenXRAPI::get_singleton(), 0); + XrAction action_hanlde = OpenXRAPI::get_singleton()->action_get_handle(p_action); + return reinterpret_cast(action_hanlde); +} + uint64_t OpenXRAPIExtension::get_hand_tracker(int p_hand_index) { ERR_FAIL_NULL_V(OpenXRAPI::get_singleton(), 0); return (uint64_t)OpenXRAPI::get_singleton()->get_hand_tracker(p_hand_index); diff --git a/modules/openxr/openxr_api_extension.h b/modules/openxr/openxr_api_extension.h index ba0be96ae36..487baf38df2 100644 --- a/modules/openxr/openxr_api_extension.h +++ b/modules/openxr/openxr_api_extension.h @@ -76,6 +76,9 @@ public: int64_t get_next_frame_time(); bool can_render(); + RID find_action(const String &p_name, const RID &p_action_set = RID()); + uint64_t action_get_handle(RID p_action); + uint64_t get_hand_tracker(int p_hand_index); void register_composition_layer_provider(OpenXRExtensionWrapperExtension *p_extension);