use the other monado workaround

This commit is contained in:
art0007i 2026-06-01 17:25:41 +02:00
parent bdaf063fcc
commit 1b4cabac4d
3 changed files with 34 additions and 39 deletions

View File

@ -1,10 +0,0 @@
<!-- FIXME: Temporary workaround for Monado bug, this entire file should be deleted once that's resolved -->
<layout>
<elements>
<rectangle
width="1"
height="1"
color="~color_accent">
</rectangle>
</elements>
</layout>

View File

@ -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::<OpenXrOverlayData>(&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()) {

View File

@ -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<T> {
@ -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);