diff --git a/wayvr/src/assets/gui/dummy.xml b/wayvr/src/assets/gui/dummy.xml
deleted file mode 100644
index a16ff579..00000000
--- a/wayvr/src/assets/gui/dummy.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/wayvr/src/backend/openxr/mod.rs b/wayvr/src/backend/openxr/mod.rs
index ba462b35..9ebab6a4 100644
--- a/wayvr/src/backend/openxr/mod.rs
+++ b/wayvr/src/backend/openxr/mod.rs
@@ -5,6 +5,7 @@ use std::{
time::{Duration, Instant},
};
+use glam::{Affine3A, Vec3};
use input::OpenXrInputSource;
use openxr as xr;
use skybox::{Skybox, create_skybox};
@@ -21,7 +22,7 @@ use crate::{
},
config::{save_settings, save_state},
graphics::{GpuFutures, init_openxr_graphics},
- overlays::toast::Toast,
+ overlays::{toast::Toast, watch::WATCH_NAME},
state::AppState,
subsystem::notifications::NotificationManager,
windowing::{
@@ -140,6 +141,8 @@ pub fn openxr_run(
lines.allocate(&xr_state, &app)?,
];
+ let watch_id = overlays.lookup(WATCH_NAME).unwrap(); // want panic
+
let mut input_source = input::OpenXrInputSource::new(&xr_state)?;
let mut session_running = false;
@@ -342,6 +345,22 @@ pub fn openxr_run(
app.hid_provider.inner.commit();
+ let watch = overlays.mut_by_id(watch_id).unwrap(); // want panic
+ if watch.config.active_state.is_none() {
+ watch.config.activate(&mut app);
+ }
+ let watch_state = watch.config.active_state.as_mut().unwrap();
+ let watch_transform = watch_state.transform;
+ if watch_state.alpha < 0.05 || !app.session.config.enable_watch {
+ //FIXME: Temporary workaround for Monado bug
+ watch_state.transform = Affine3A::from_scale(Vec3 {
+ x: 0.001,
+ y: 0.001,
+ z: 0.001,
+ });
+ watch_state.alpha = 0.02; // visible but not really. Monado freaks out if no layers are submitted.
+ }
+
if let Err(e) =
crate::ipc::events::tick_events::(&mut app, &mut overlays)
{
@@ -491,6 +510,16 @@ pub fn openxr_run(
}
delete_queue.retain(|(_, frame)| *frame > cur_frame);
+
+ //FIXME: Temporary workaround for Monado bug
+ let watch = overlays.mut_by_id(watch_id).unwrap(); // want panic
+
+ if let Some(state) = watch.config.active_state.as_mut() {
+ state.transform = watch_transform
+ }
+ if !app.session.config.enable_watch {
+ watch.config.deactivate();
+ }
} // main_loop
if let (Some(blocker), Some(monado)) = (blocker, app.monado_state.as_mut()) {
diff --git a/wayvr/src/windowing/manager.rs b/wayvr/src/windowing/manager.rs
index de8b5ecd..e558618d 100644
--- a/wayvr/src/windowing/manager.rs
+++ b/wayvr/src/windowing/manager.rs
@@ -5,17 +5,17 @@ use std::{
};
use anyhow::Context;
-use glam::{Affine3A, Quat, Vec3, Vec3A};
+use glam::{Affine3A, Vec3, Vec3A};
use slotmap::{Key, SecondaryMap, SlotMap};
use wgui::log::LogErr;
use wlx_common::{
astr_containers::{AStrMap, AStrMapExt},
config::SerializedWindowSet,
- overlays::{BackendAttrib, BackendAttribValue, ToastTopic}, windowing::{OverlayWindowState, Positioning},
+ overlays::{BackendAttrib, BackendAttribValue, ToastTopic},
};
use crate::{
- FRAME_COUNTER, backend::task::{OverlayTask, ToggleMode}, config::save_state, gui::panel::{GuiPanel, NewGuiPanelParams}, overlays::{
+ FRAME_COUNTER, backend::task::{OverlayTask, ToggleMode}, config::save_state, overlays::{
anchor::{create_anchor, create_grab_help},
custom::create_custom,
dashboard::{DASH_NAME, create_dash_frontend},
@@ -29,11 +29,10 @@ use crate::{
backend::{OverlayEventData, OverlayMeta},
set::OverlayWindowSet,
snap_upright,
- window::{OverlayCategory, OverlayWindowConfig, OverlayWindowData},
+ window::{OverlayCategory, OverlayWindowData},
}
};
-pub const DUMMY_NAME: &str = "FIXME: Temporary workaround for Monado bug";
pub const MAX_OVERLAY_SETS: usize = 6;
pub struct OverlayWindowManager {
@@ -123,29 +122,6 @@ where
let anchor = OverlayWindowData::from_config(create_anchor(app)?);
me.add(anchor, app);
- // FIXME: Temporary workaround for Monado bug
- // Monado freaks out if no layers are submitted.
- // This creates a panel which is behind your head and is very tiny so you should never be able to see it.
- let mut panel =
- GuiPanel::new_from_template(app, "gui/dummy.xml", (), NewGuiPanelParams::default()).unwrap();
- panel.update_layout(app)?;
- let dummy = OverlayWindowData::from_config(OverlayWindowConfig {
- name: DUMMY_NAME.into(),
- z_order: u32::MIN,
- category: OverlayCategory::Internal,
- default_state: OverlayWindowState {
- grabbable: false,
- interactable: false,
- positioning: Positioning::FollowHead { lerp: 1.0 },
- transform: Affine3A::from_scale_rotation_translation(Vec3::ONE * 0.001, Quat::IDENTITY, Vec3::Z),
- ..OverlayWindowState::default()
- },
- show_on_spawn: true,
- global: true,
- ..OverlayWindowConfig::from_backend(Box::new(panel))
- });
- me.add(dummy, app);
-
let watch = OverlayWindowData::from_config(create_watch(app)?);
me.watch_id = me.add(watch, app);