summaryrefslogtreecommitdiffstats
path: root/modules/openxr/openxr_interface.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-10-03 17:25:52 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-10-03 17:25:52 +0200
commit3a5d52428722ca3193a9ac77ac712a382b35e489 (patch)
treef10062dd60f953feb1034fc626c3adb12b6e3f89 /modules/openxr/openxr_interface.cpp
parente41582f42f471fffc7302e1b6b7cbec29231c666 (diff)
parent9e56e7a3ceabc5c65e9ae749be5981eb61b49370 (diff)
downloadredot-engine-3a5d52428722ca3193a9ac77ac712a382b35e489.tar.gz
Merge pull request #82614 from m4gr3d/openxr_eye_gaze_interaction
Add support for the OpenXR Eye gaze interaction extension
Diffstat (limited to 'modules/openxr/openxr_interface.cpp')
-rw-r--r--modules/openxr/openxr_interface.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/modules/openxr/openxr_interface.cpp b/modules/openxr/openxr_interface.cpp
index 7b1530677f..67a459adb8 100644
--- a/modules/openxr/openxr_interface.cpp
+++ b/modules/openxr/openxr_interface.cpp
@@ -36,6 +36,8 @@
#include "extensions/openxr_hand_tracking_extension.h"
+#include "extensions/openxr_eye_gaze_interaction.h"
+
void OpenXRInterface::_bind_methods() {
// lifecycle signals
ADD_SIGNAL(MethodInfo("session_begun"));
@@ -119,6 +121,8 @@ void OpenXRInterface::_bind_methods() {
BIND_ENUM_CONSTANT(HAND_JOINT_LITTLE_DISTAL);
BIND_ENUM_CONSTANT(HAND_JOINT_LITTLE_TIP);
BIND_ENUM_CONSTANT(HAND_JOINT_MAX);
+
+ ClassDB::bind_method(D_METHOD("is_eye_gaze_interaction_supported"), &OpenXRInterface::is_eye_gaze_interaction_supported);
}
StringName OpenXRInterface::get_name() const {
@@ -152,7 +156,9 @@ PackedStringArray OpenXRInterface::get_suggested_tracker_names() const {
"/user/vive_tracker_htcx/role/waist",
"/user/vive_tracker_htcx/role/chest",
"/user/vive_tracker_htcx/role/camera",
- "/user/vive_tracker_htcx/role/keyboard"
+ "/user/vive_tracker_htcx/role/keyboard",
+
+ "/user/eyes_ext",
};
return arr;
@@ -705,6 +711,21 @@ Array OpenXRInterface::get_available_display_refresh_rates() const {
}
}
+bool OpenXRInterface::is_eye_gaze_interaction_supported() {
+ if (openxr_api == nullptr) {
+ return false;
+ } else if (!openxr_api->is_initialized()) {
+ return false;
+ } else {
+ OpenXREyeGazeInteractionExtension *eye_gaze_ext = OpenXREyeGazeInteractionExtension::get_singleton();
+ if (eye_gaze_ext == nullptr) {
+ return false;
+ } else {
+ return eye_gaze_ext->supports_eye_gaze_interaction();
+ }
+ }
+}
+
bool OpenXRInterface::is_action_set_active(const String &p_action_set) const {
for (ActionSet *action_set : action_sets) {
if (action_set->action_set_name == p_action_set) {