From 957fe757194dc9c4a93e727044165ed325dd2f3a Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Fri, 19 Dec 2025 13:00:18 +0900 Subject: [PATCH] fix openvr panic in case of unknown event --- Cargo.lock | 4 ++-- wlx-overlay-s/Cargo.toml | 2 +- wlx-overlay-s/src/backend/openvr/mod.rs | 31 ++++++++++++++++++------- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7eecfbc..a2e6a7d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3965,7 +3965,7 @@ dependencies = [ [[package]] name = "ovr_overlay" version = "0.0.0" -source = "git+https://github.com/galister/ovr_overlay_oyasumi?rev=3cfe4930accad9cf38cd9784bf78505584de4cd8#3cfe4930accad9cf38cd9784bf78505584de4cd8" +source = "git+https://github.com/galister/ovr_overlay_oyasumi?rev=8d62c73d5f17e4210d6d0cd52e7f3953eb9b481a#8d62c73d5f17e4210d6d0cd52e7f3953eb9b481a" dependencies = [ "byteorder", "derive_more", @@ -3980,7 +3980,7 @@ dependencies = [ [[package]] name = "ovr_overlay_sys" version = "0.0.0" -source = "git+https://github.com/galister/ovr_overlay_oyasumi?rev=3cfe4930accad9cf38cd9784bf78505584de4cd8#3cfe4930accad9cf38cd9784bf78505584de4cd8" +source = "git+https://github.com/galister/ovr_overlay_oyasumi?rev=8d62c73d5f17e4210d6d0cd52e7f3953eb9b481a#8d62c73d5f17e4210d6d0cd52e7f3953eb9b481a" dependencies = [ "autocxx", "autocxx-build", diff --git a/wlx-overlay-s/Cargo.toml b/wlx-overlay-s/Cargo.toml index 60e8481..0e41aaf 100644 --- a/wlx-overlay-s/Cargo.toml +++ b/wlx-overlay-s/Cargo.toml @@ -43,7 +43,7 @@ openxr = { git = "https://github.com/Ralith/openxrs", rev = "d0afdd3365bc1e14de2 ovr_overlay = { features = [ "ovr_input", "ovr_system", -], git = "https://github.com/galister/ovr_overlay_oyasumi", rev = "3cfe4930accad9cf38cd9784bf78505584de4cd8", optional = true } +], git = "https://github.com/galister/ovr_overlay_oyasumi", rev = "8d62c73d5f17e4210d6d0cd52e7f3953eb9b481a", optional = true } regex = { workspace = true } rodio = { version = "0.21.1", default-features = false, features = [ "playback", diff --git a/wlx-overlay-s/src/backend/openvr/mod.rs b/wlx-overlay-s/src/backend/openvr/mod.rs index 901489c..f6b2aea 100644 --- a/wlx-overlay-s/src/backend/openvr/mod.rs +++ b/wlx-overlay-s/src/backend/openvr/mod.rs @@ -157,24 +157,37 @@ pub fn openvr_run(show_by_default: bool, headless: bool) -> Result<(), BackendEr } FRAME_COUNTER.fetch_add(1, Ordering::Relaxed); + // extremely cursed + const VREVENT_QUIT: u32 = EVREventType::VREvent_Quit as u32; + const VREVENT_TRACKED_ACTIVATED: u32 = EVREventType::VREvent_TrackedDeviceActivated as u32; + const VREVENT_TRACKED_DEACTIVATED: u32 = + EVREventType::VREvent_TrackedDeviceDeactivated as u32; + const VREVENT_TRACKED_UPDATED: u32 = EVREventType::VREvent_TrackedDeviceUpdated as u32; + const VREVENT_SEATED_ZERO: u32 = EVREventType::VREvent_SeatedZeroPoseReset as u32; + const VREVENT_STANDING_ZERO: u32 = EVREventType::VREvent_StandingZeroPoseReset as u32; + const VREVENT_CHAPERONE_CHANGED: u32 = + EVREventType::VREvent_ChaperoneUniverseHasChanged as u32; + const VREVENT_SCENE_APP_CHANGED: u32 = EVREventType::VREvent_SceneApplicationChanged as u32; + const VREVENT_IPD_CHANGED: u32 = EVREventType::VREvent_IpdChanged as u32; + while let Some(event) = system_mgr.poll_next_event() { match event.event_type { - EVREventType::VREvent_Quit => { + VREVENT_QUIT => { log::warn!("Received quit event, shutting down."); break 'main_loop; } - EVREventType::VREvent_TrackedDeviceActivated - | EVREventType::VREvent_TrackedDeviceDeactivated - | EVREventType::VREvent_TrackedDeviceUpdated => { + VREVENT_TRACKED_ACTIVATED + | VREVENT_TRACKED_DEACTIVATED + | VREVENT_TRACKED_UPDATED => { next_device_update = Instant::now(); } - EVREventType::VREvent_SeatedZeroPoseReset - | EVREventType::VREvent_StandingZeroPoseReset - | EVREventType::VREvent_ChaperoneUniverseHasChanged - | EVREventType::VREvent_SceneApplicationChanged => { + VREVENT_SEATED_ZERO + | VREVENT_STANDING_ZERO + | VREVENT_CHAPERONE_CHANGED + | VREVENT_SCENE_APP_CHANGED => { playspace.playspace_changed(&mut compositor_mgr, &mut chaperone_mgr); } - EVREventType::VREvent_IpdChanged => { + VREVENT_IPD_CHANGED => { if let Ok(ipd) = system_mgr.get_tracked_device_property::( TrackedDeviceIndex::HMD, ETrackedDeviceProperty::Prop_UserIpdMeters_Float,