openvr: universe-aware overlays

This commit is contained in:
galister
2024-03-08 23:08:30 +01:00
parent 19bc4a5df2
commit 38395c9183
3 changed files with 21 additions and 12 deletions

View File

@@ -5,6 +5,7 @@ use std::sync::Arc;
use glam::{Affine3A, Vec3, Vec3A, Vec4}; use glam::{Affine3A, Vec3, Vec3A, Vec4};
use idmap::IdMap; use idmap::IdMap;
use ovr_overlay::overlay::OverlayManager; use ovr_overlay::overlay::OverlayManager;
use ovr_overlay::sys::ETrackingUniverseOrigin;
use vulkano::command_buffer::CommandBufferUsage; use vulkano::command_buffer::CommandBufferUsage;
use vulkano::format::Format; use vulkano::format::Format;
use vulkano::image::view::ImageView; use vulkano::image::view::ImageView;
@@ -141,6 +142,7 @@ impl LinePool {
pub fn update( pub fn update(
&mut self, &mut self,
universe: ETrackingUniverseOrigin,
overlay: &mut OverlayManager, overlay: &mut OverlayManager,
app: &mut AppState, app: &mut AppState,
) -> anyhow::Result<()> { ) -> anyhow::Result<()> {
@@ -152,7 +154,7 @@ impl LinePool {
data.state.dirty = false; data.state.dirty = false;
} }
data.upload_transform(overlay); data.upload_transform(universe.clone(), overlay);
data.upload_color(overlay); data.upload_color(overlay);
} }
} }

View File

@@ -219,9 +219,11 @@ pub fn openvr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
} }
} }
let universe = playspace.get_universe();
state.input_state.pre_update(); state.input_state.pre_update();
input_source.update( input_source.update(
playspace.get_universe(), universe.clone(),
&mut input_mgr, &mut input_mgr,
&mut system_mgr, &mut system_mgr,
&mut state, &mut state,
@@ -258,7 +260,7 @@ pub fn openvr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
} }
} }
lines.update(&mut overlay_mgr, &mut state)?; lines.update(universe.clone(), &mut overlay_mgr, &mut state)?;
for o in overlays.iter_mut() { for o in overlays.iter_mut() {
o.after_input(&mut overlay_mgr, &mut state)?; o.after_input(&mut overlay_mgr, &mut state)?;
@@ -281,7 +283,7 @@ pub fn openvr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
overlays overlays
.iter_mut() .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 // chaperone

View File

@@ -79,10 +79,15 @@ impl OverlayData<OpenVrOverlayData> {
Ok(()) 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.data.visible {
if self.state.dirty { if self.state.dirty {
self.upload_transform(overlay); self.upload_transform(universe, overlay);
self.upload_alpha(overlay); self.upload_alpha(overlay);
self.state.dirty = false; self.state.dirty = false;
} }
@@ -185,7 +190,11 @@ impl OverlayData<OpenVrOverlayData> {
} }
} }
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 { let Some(handle) = self.data.handle else {
log::debug!("{}: No overlay handle", self.state.name); log::debug!("{}: No overlay handle", self.state.name);
return; return;
@@ -193,11 +202,7 @@ impl OverlayData<OpenVrOverlayData> {
let transform = Matrix3x4::from_affine(&self.state.transform); let transform = Matrix3x4::from_affine(&self.state.transform);
if let Err(e) = overlay.set_transform_absolute( if let Err(e) = overlay.set_transform_absolute(handle, universe, &transform) {
handle,
ETrackingUniverseOrigin::TrackingUniverseStanding,
&transform,
) {
log::error!( log::error!(
"{}: Failed to set overlay transform: {}", "{}: Failed to set overlay transform: {}",
self.state.name, self.state.name,