diff --git a/src/backend/openvr/lines.rs b/src/backend/openvr/lines.rs index 3de2145..9bec2c2 100644 --- a/src/backend/openvr/lines.rs +++ b/src/backend/openvr/lines.rs @@ -5,6 +5,7 @@ use std::sync::Arc; use glam::{Affine3A, Vec3, Vec3A, Vec4}; use idmap::IdMap; use ovr_overlay::overlay::OverlayManager; +use ovr_overlay::sys::ETrackingUniverseOrigin; use vulkano::command_buffer::CommandBufferUsage; use vulkano::format::Format; use vulkano::image::view::ImageView; @@ -141,6 +142,7 @@ impl LinePool { pub fn update( &mut self, + universe: ETrackingUniverseOrigin, overlay: &mut OverlayManager, app: &mut AppState, ) -> anyhow::Result<()> { @@ -152,7 +154,7 @@ impl LinePool { data.state.dirty = false; } - data.upload_transform(overlay); + data.upload_transform(universe.clone(), overlay); data.upload_color(overlay); } } diff --git a/src/backend/openvr/mod.rs b/src/backend/openvr/mod.rs index edcb449..db187e9 100644 --- a/src/backend/openvr/mod.rs +++ b/src/backend/openvr/mod.rs @@ -219,9 +219,11 @@ pub fn openvr_run(running: Arc) -> Result<(), BackendError> { } } + let universe = playspace.get_universe(); + state.input_state.pre_update(); input_source.update( - playspace.get_universe(), + universe.clone(), &mut input_mgr, &mut system_mgr, &mut state, @@ -258,7 +260,7 @@ pub fn openvr_run(running: Arc) -> Result<(), BackendError> { } } - lines.update(&mut overlay_mgr, &mut state)?; + lines.update(universe.clone(), &mut overlay_mgr, &mut state)?; for o in overlays.iter_mut() { o.after_input(&mut overlay_mgr, &mut state)?; @@ -281,7 +283,7 @@ pub fn openvr_run(running: Arc) -> Result<(), BackendError> { overlays .iter_mut() - .for_each(|o| o.after_render(&mut overlay_mgr, &state.graphics)); + .for_each(|o| o.after_render(universe.clone(), &mut overlay_mgr, &state.graphics)); // chaperone diff --git a/src/backend/openvr/overlay.rs b/src/backend/openvr/overlay.rs index 8fe6459..3ccfcf1 100644 --- a/src/backend/openvr/overlay.rs +++ b/src/backend/openvr/overlay.rs @@ -79,10 +79,15 @@ impl OverlayData { Ok(()) } - pub(super) fn after_render(&mut self, overlay: &mut OverlayManager, graphics: &WlxGraphics) { + pub(super) fn after_render( + &mut self, + universe: ETrackingUniverseOrigin, + overlay: &mut OverlayManager, + graphics: &WlxGraphics, + ) { if self.data.visible { if self.state.dirty { - self.upload_transform(overlay); + self.upload_transform(universe, overlay); self.upload_alpha(overlay); self.state.dirty = false; } @@ -185,7 +190,11 @@ impl OverlayData { } } - pub(super) fn upload_transform(&self, overlay: &mut OverlayManager) { + pub(super) fn upload_transform( + &self, + universe: ETrackingUniverseOrigin, + overlay: &mut OverlayManager, + ) { let Some(handle) = self.data.handle else { log::debug!("{}: No overlay handle", self.state.name); return; @@ -193,11 +202,7 @@ impl OverlayData { let transform = Matrix3x4::from_affine(&self.state.transform); - if let Err(e) = overlay.set_transform_absolute( - handle, - ETrackingUniverseOrigin::TrackingUniverseStanding, - &transform, - ) { + if let Err(e) = overlay.set_transform_absolute(handle, universe, &transform) { log::error!( "{}: Failed to set overlay transform: {}", self.state.name,