summaryrefslogtreecommitdiffstats
path: root/modules/openxr
diff options
context:
space:
mode:
Diffstat (limited to 'modules/openxr')
-rw-r--r--modules/openxr/openxr_api.cpp5
-rw-r--r--modules/openxr/openxr_interface.cpp10
-rw-r--r--modules/openxr/openxr_interface.h3
3 files changed, 13 insertions, 5 deletions
diff --git a/modules/openxr/openxr_api.cpp b/modules/openxr/openxr_api.cpp
index 6ce62e20d1..125460cb3b 100644
--- a/modules/openxr/openxr_api.cpp
+++ b/modules/openxr/openxr_api.cpp
@@ -2038,8 +2038,9 @@ bool OpenXRAPI::poll_events() {
if (local_floor_emulation.enabled) {
local_floor_emulation.should_reset_floor_height = true;
}
- if (event->poseValid && xr_interface) {
- xr_interface->on_pose_recentered();
+
+ if (xr_interface) {
+ xr_interface->on_reference_space_change_pending();
}
} break;
case XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED: {
diff --git a/modules/openxr/openxr_interface.cpp b/modules/openxr/openxr_interface.cpp
index f600891ec8..f4b15b4960 100644
--- a/modules/openxr/openxr_interface.cpp
+++ b/modules/openxr/openxr_interface.cpp
@@ -1136,6 +1136,12 @@ void OpenXRInterface::process() {
if (head.is_valid()) {
head->set_pose("default", head_transform, head_linear_velocity, head_angular_velocity, head_confidence);
}
+
+ if (reference_stage_changing) {
+ // Now that we have updated tracking information in our updated reference space, trigger our pose recentered signal.
+ emit_signal(SNAME("pose_recentered"));
+ reference_stage_changing = false;
+ }
}
void OpenXRInterface::pre_render() {
@@ -1317,8 +1323,8 @@ void OpenXRInterface::on_state_exiting() {
emit_signal(SNAME("instance_exiting"));
}
-void OpenXRInterface::on_pose_recentered() {
- emit_signal(SNAME("pose_recentered"));
+void OpenXRInterface::on_reference_space_change_pending() {
+ reference_stage_changing = true;
}
void OpenXRInterface::on_refresh_rate_changes(float p_new_rate) {
diff --git a/modules/openxr/openxr_interface.h b/modules/openxr/openxr_interface.h
index 71af2f8176..c7e516ee55 100644
--- a/modules/openxr/openxr_interface.h
+++ b/modules/openxr/openxr_interface.h
@@ -72,6 +72,7 @@ class OpenXRInterface : public XRInterface {
private:
OpenXRAPI *openxr_api = nullptr;
bool initialized = false;
+ bool reference_stage_changing = false;
XRInterface::TrackingStatus tracking_state;
// At a minimum we need a tracker for our head
@@ -209,7 +210,7 @@ public:
void on_state_stopping();
void on_state_loss_pending();
void on_state_exiting();
- void on_pose_recentered();
+ void on_reference_space_change_pending();
void on_refresh_rate_changes(float p_new_rate);
void tracker_profile_changed(RID p_tracker, RID p_interaction_profile);