diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-03 17:25:52 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-03 17:25:52 +0200 |
commit | 3a5d52428722ca3193a9ac77ac712a382b35e489 (patch) | |
tree | f10062dd60f953feb1034fc626c3adb12b6e3f89 /modules/openxr/openxr_interface.cpp | |
parent | e41582f42f471fffc7302e1b6b7cbec29231c666 (diff) | |
parent | 9e56e7a3ceabc5c65e9ae749be5981eb61b49370 (diff) | |
download | redot-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.cpp | 23 |
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) { |