From b1ab37c8dcc57fea6b133090941ab0992bc6650f Mon Sep 17 00:00:00 2001 From: Schmarni Date: Wed, 22 Oct 2025 17:25:09 +0200 Subject: [PATCH] Revert "fix: don't wait for frame" This reverts commit 2b0734528682e7cca9ef5531dcbff6ca3a5fa2af. --- src/main.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index c2620f7..4c19cb3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -44,10 +44,10 @@ use bevy_mod_openxr::add_xr_plugins; use bevy_mod_openxr::exts::OxrExtensions; use bevy_mod_openxr::features::overlay::OxrOverlaySettings; use bevy_mod_openxr::graphics::{GraphicsBackend, OxrManualGraphicsConfig}; -use bevy_mod_openxr::init::OxrInitPlugin; +use bevy_mod_openxr::init::{OxrInitPlugin, should_run_frame_loop}; use bevy_mod_openxr::reference_space::OxrReferenceSpacePlugin; use bevy_mod_openxr::render::{OxrRenderPlugin, OxrWaitFrameSystem}; -use bevy_mod_openxr::resources::{OxrFrameState, OxrSessionConfig}; +use bevy_mod_openxr::resources::{OxrFrameState, OxrFrameWaiter, OxrSessionConfig}; use bevy_mod_openxr::types::AppInfo; use bevy_mod_xr::camera::XrProjection; use bevy_mod_xr::session::{XrFirst, XrHandleEvents, XrSessionPlugin}; @@ -492,6 +492,23 @@ fn xr_step(world: &mut World) { let time = world.resource::().delta_secs_f64(); nodes::root::Root::send_frame_events(time); + let should_wait = world + .run_system_cached(should_run_frame_loop) + .unwrap_or(false); + // we might want to do an adaptive sleep when not OpenXR waiting + if should_wait { + world.resource_scope::(|world, mut waiter| { + let state = waiter + .wait() + .inspect_err(|err| error!("failed to wait OpenXR frame: {err}")) + .ok(); + + if let Some(state) = state { + world.insert_resource(OxrFrameState(state)); + } + }); + } + tick_internal_client(); }