From c5e40e11e98cea3a2cd3370cf77c7f8aac33595f Mon Sep 17 00:00:00 2001 From: devloglogan Date: Fri, 10 Jan 2025 18:04:00 -0600 Subject: [PATCH] Expose OpenXRAPI methods to get XrAction handles --- modules/openxr/doc_classes/OpenXRAPIExtension.xml | 15 +++++++++++++++ modules/openxr/openxr_api_extension.cpp | 14 ++++++++++++++ modules/openxr/openxr_api_extension.h | 3 +++ 3 files changed, 32 insertions(+) diff --git a/modules/openxr/doc_classes/OpenXRAPIExtension.xml b/modules/openxr/doc_classes/OpenXRAPIExtension.xml index d244b4219d10..bd9eb7d3b56b 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 506e1fc64d35..677988d9d77e 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); @@ -197,6 +200,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 58a88d122d97..746099714ee3 100644 --- a/modules/openxr/openxr_api_extension.h +++ b/modules/openxr/openxr_api_extension.h @@ -76,6 +76,9 @@ class OpenXRAPIExtension : public RefCounted { 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);