diff options
author | Logan Lang <devloglogan@gmail.com> | 2024-02-13 16:13:56 -0600 |
---|---|---|
committer | Logan Lang <devloglogan@gmail.com> | 2024-02-13 18:33:41 -0600 |
commit | 3ee258effe979d832ead11ff31780ac94e0f90fb (patch) | |
tree | 0fbcd66fbd3eed115d13b433da38f3d4d00f85d4 /modules/openxr/extensions | |
parent | dfe226b93346c208787728eceecc2c64d81a9553 (diff) | |
download | redot-engine-3ee258effe979d832ead11ff31780ac94e0f90fb.tar.gz |
enable getting suggested tracker names from OpenXR extensions
Diffstat (limited to 'modules/openxr/extensions')
7 files changed, 46 insertions, 0 deletions
diff --git a/modules/openxr/extensions/openxr_extension_wrapper.h b/modules/openxr/extensions/openxr_extension_wrapper.h index b9c9247bee..ad326472ab 100644 --- a/modules/openxr/extensions/openxr_extension_wrapper.h +++ b/modules/openxr/extensions/openxr_extension_wrapper.h @@ -35,6 +35,7 @@ #include "core/math/projection.h" #include "core/templates/hash_map.h" #include "core/templates/rid.h" +#include "core/variant/variant.h" #include <openxr/openxr.h> @@ -62,6 +63,8 @@ public: virtual void *set_swapchain_create_info_and_get_next_pointer(void *p_next_pointer) { return p_next_pointer; } // Add additional data structures when creating OpenXR swap chains. virtual void *set_hand_joint_locations_and_get_next_pointer(int p_hand_index, void *p_next_pointer) { return p_next_pointer; } + virtual PackedStringArray get_suggested_tracker_names() { return PackedStringArray(); } + // `on_register_metadata` allows extensions to register additional controller metadata. // This function is called even when OpenXRApi is not constructured as the metadata // needs to be available to the editor. diff --git a/modules/openxr/extensions/openxr_extension_wrapper_extension.cpp b/modules/openxr/extensions/openxr_extension_wrapper_extension.cpp index 5ad7a97eca..05f120b0d8 100644 --- a/modules/openxr/extensions/openxr_extension_wrapper_extension.cpp +++ b/modules/openxr/extensions/openxr_extension_wrapper_extension.cpp @@ -40,6 +40,7 @@ void OpenXRExtensionWrapperExtension::_bind_methods() { GDVIRTUAL_BIND(_set_swapchain_create_info_and_get_next_pointer, "next_pointer"); GDVIRTUAL_BIND(_set_hand_joint_locations_and_get_next_pointer, "hand_index", "next_pointer"); GDVIRTUAL_BIND(_get_composition_layer); + GDVIRTUAL_BIND(_get_suggested_tracker_names); GDVIRTUAL_BIND(_on_register_metadata); GDVIRTUAL_BIND(_on_before_instance_created); GDVIRTUAL_BIND(_on_instance_created, "instance"); @@ -129,6 +130,16 @@ void *OpenXRExtensionWrapperExtension::set_hand_joint_locations_and_get_next_poi return nullptr; } +PackedStringArray OpenXRExtensionWrapperExtension::get_suggested_tracker_names() { + PackedStringArray ret; + + if (GDVIRTUAL_CALL(_get_suggested_tracker_names, ret)) { + return ret; + } + + return PackedStringArray(); +} + XrCompositionLayerBaseHeader *OpenXRExtensionWrapperExtension::get_composition_layer() { uint64_t pointer; diff --git a/modules/openxr/extensions/openxr_extension_wrapper_extension.h b/modules/openxr/extensions/openxr_extension_wrapper_extension.h index 4d8b19f4fd..d673a3bd8f 100644 --- a/modules/openxr/extensions/openxr_extension_wrapper_extension.h +++ b/modules/openxr/extensions/openxr_extension_wrapper_extension.h @@ -69,6 +69,10 @@ public: GDVIRTUAL2R(uint64_t, _set_hand_joint_locations_and_get_next_pointer, int, GDExtensionPtr<void>); GDVIRTUAL0R(uint64_t, _get_composition_layer); + virtual PackedStringArray get_suggested_tracker_names() override; + + GDVIRTUAL0R(PackedStringArray, _get_suggested_tracker_names); + virtual void on_register_metadata() override; virtual void on_before_instance_created() override; virtual void on_instance_created(const XrInstance p_instance) override; diff --git a/modules/openxr/extensions/openxr_eye_gaze_interaction.cpp b/modules/openxr/extensions/openxr_eye_gaze_interaction.cpp index 59bdec5c8e..e57491e7c6 100644 --- a/modules/openxr/extensions/openxr_eye_gaze_interaction.cpp +++ b/modules/openxr/extensions/openxr_eye_gaze_interaction.cpp @@ -69,6 +69,11 @@ void *OpenXREyeGazeInteractionExtension::set_system_properties_and_get_next_poin return &properties; } +PackedStringArray OpenXREyeGazeInteractionExtension::get_suggested_tracker_names() { + PackedStringArray arr = { "/user/eyes_ext" }; + return arr; +} + bool OpenXREyeGazeInteractionExtension::is_available() { return available; } diff --git a/modules/openxr/extensions/openxr_eye_gaze_interaction.h b/modules/openxr/extensions/openxr_eye_gaze_interaction.h index 704940ad26..2b99f8edff 100644 --- a/modules/openxr/extensions/openxr_eye_gaze_interaction.h +++ b/modules/openxr/extensions/openxr_eye_gaze_interaction.h @@ -43,6 +43,8 @@ public: virtual HashMap<String, bool *> get_requested_extensions() override; virtual void *set_system_properties_and_get_next_pointer(void *p_next_pointer) override; + PackedStringArray get_suggested_tracker_names() override; + bool is_available(); bool supports_eye_gaze_interaction(); diff --git a/modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp index 8b8c6c5353..bb60f7adef 100644 --- a/modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp +++ b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp @@ -42,6 +42,25 @@ HashMap<String, bool *> OpenXRHTCViveTrackerExtension::get_requested_extensions( return request_extensions; } +PackedStringArray OpenXRHTCViveTrackerExtension::get_suggested_tracker_names() { + PackedStringArray arr = { + "/user/vive_tracker_htcx/role/handheld_object", + "/user/vive_tracker_htcx/role/left_foot", + "/user/vive_tracker_htcx/role/right_foot", + "/user/vive_tracker_htcx/role/left_shoulder", + "/user/vive_tracker_htcx/role/right_shoulder", + "/user/vive_tracker_htcx/role/left_elbow", + "/user/vive_tracker_htcx/role/right_elbow", + "/user/vive_tracker_htcx/role/left_knee", + "/user/vive_tracker_htcx/role/right_knee", + "/user/vive_tracker_htcx/role/waist", + "/user/vive_tracker_htcx/role/chest", + "/user/vive_tracker_htcx/role/camera", + "/user/vive_tracker_htcx/role/keyboard", + }; + return arr; +} + bool OpenXRHTCViveTrackerExtension::is_available() { return available; } diff --git a/modules/openxr/extensions/openxr_htc_vive_tracker_extension.h b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.h index b51398fd4e..e9c3d338ab 100644 --- a/modules/openxr/extensions/openxr_htc_vive_tracker_extension.h +++ b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.h @@ -37,6 +37,8 @@ class OpenXRHTCViveTrackerExtension : public OpenXRExtensionWrapper { public: virtual HashMap<String, bool *> get_requested_extensions() override; + PackedStringArray get_suggested_tracker_names() override; + bool is_available(); virtual void on_register_metadata() override; |