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);