summaryrefslogtreecommitdiffstats
path: root/modules/openxr/extensions
diff options
context:
space:
mode:
authorLogan Lang <devloglogan@gmail.com>2024-02-13 16:13:56 -0600
committerLogan Lang <devloglogan@gmail.com>2024-02-13 18:33:41 -0600
commit3ee258effe979d832ead11ff31780ac94e0f90fb (patch)
tree0fbcd66fbd3eed115d13b433da38f3d4d00f85d4 /modules/openxr/extensions
parentdfe226b93346c208787728eceecc2c64d81a9553 (diff)
downloadredot-engine-3ee258effe979d832ead11ff31780ac94e0f90fb.tar.gz
enable getting suggested tracker names from OpenXR extensions
Diffstat (limited to 'modules/openxr/extensions')
-rw-r--r--modules/openxr/extensions/openxr_extension_wrapper.h3
-rw-r--r--modules/openxr/extensions/openxr_extension_wrapper_extension.cpp11
-rw-r--r--modules/openxr/extensions/openxr_extension_wrapper_extension.h4
-rw-r--r--modules/openxr/extensions/openxr_eye_gaze_interaction.cpp5
-rw-r--r--modules/openxr/extensions/openxr_eye_gaze_interaction.h2
-rw-r--r--modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp19
-rw-r--r--modules/openxr/extensions/openxr_htc_vive_tracker_extension.h2
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;