fix openvr panic in case of unknown event

This commit is contained in:
galister
2025-12-19 13:00:18 +09:00
parent 70f2190400
commit 957fe75719
3 changed files with 25 additions and 12 deletions

4
Cargo.lock generated
View File

@@ -3965,7 +3965,7 @@ dependencies = [
[[package]] [[package]]
name = "ovr_overlay" name = "ovr_overlay"
version = "0.0.0" 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 = [ dependencies = [
"byteorder", "byteorder",
"derive_more", "derive_more",
@@ -3980,7 +3980,7 @@ dependencies = [
[[package]] [[package]]
name = "ovr_overlay_sys" name = "ovr_overlay_sys"
version = "0.0.0" 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 = [ dependencies = [
"autocxx", "autocxx",
"autocxx-build", "autocxx-build",

View File

@@ -43,7 +43,7 @@ openxr = { git = "https://github.com/Ralith/openxrs", rev = "d0afdd3365bc1e14de2
ovr_overlay = { features = [ ovr_overlay = { features = [
"ovr_input", "ovr_input",
"ovr_system", "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 } regex = { workspace = true }
rodio = { version = "0.21.1", default-features = false, features = [ rodio = { version = "0.21.1", default-features = false, features = [
"playback", "playback",

View File

@@ -157,24 +157,37 @@ pub fn openvr_run(show_by_default: bool, headless: bool) -> Result<(), BackendEr
} }
FRAME_COUNTER.fetch_add(1, Ordering::Relaxed); 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() { while let Some(event) = system_mgr.poll_next_event() {
match event.event_type { match event.event_type {
EVREventType::VREvent_Quit => { VREVENT_QUIT => {
log::warn!("Received quit event, shutting down."); log::warn!("Received quit event, shutting down.");
break 'main_loop; break 'main_loop;
} }
EVREventType::VREvent_TrackedDeviceActivated VREVENT_TRACKED_ACTIVATED
| EVREventType::VREvent_TrackedDeviceDeactivated | VREVENT_TRACKED_DEACTIVATED
| EVREventType::VREvent_TrackedDeviceUpdated => { | VREVENT_TRACKED_UPDATED => {
next_device_update = Instant::now(); next_device_update = Instant::now();
} }
EVREventType::VREvent_SeatedZeroPoseReset VREVENT_SEATED_ZERO
| EVREventType::VREvent_StandingZeroPoseReset | VREVENT_STANDING_ZERO
| EVREventType::VREvent_ChaperoneUniverseHasChanged | VREVENT_CHAPERONE_CHANGED
| EVREventType::VREvent_SceneApplicationChanged => { | VREVENT_SCENE_APP_CHANGED => {
playspace.playspace_changed(&mut compositor_mgr, &mut chaperone_mgr); 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::<f32>( if let Ok(ipd) = system_mgr.get_tracked_device_property::<f32>(
TrackedDeviceIndex::HMD, TrackedDeviceIndex::HMD,
ETrackedDeviceProperty::Prop_UserIpdMeters_Float, ETrackedDeviceProperty::Prop_UserIpdMeters_Float,