From 154a389bc87343ed33a77c8da424338a1901e9c6 Mon Sep 17 00:00:00 2001 From: awtterpip Date: Mon, 11 Sep 2023 15:29:59 -0500 Subject: [PATCH] maybe fixed frame timing?? --- examples/xr.rs | 3 +++ src/lib.rs | 51 +++++++++++++++++++++++++-------------------- src/xr_input/mod.rs | 2 +- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/examples/xr.rs b/examples/xr.rs index 230103b..d32466e 100644 --- a/examples/xr.rs +++ b/examples/xr.rs @@ -1,5 +1,6 @@ use bevy::core_pipeline::core_3d; use bevy::core_pipeline::tonemapping::{DebandDither, Tonemapping}; +use bevy::diagnostic::{LogDiagnosticsPlugin, FrameTimeDiagnosticsPlugin}; use bevy::ecs::prelude::{Bundle, Component, ReflectComponent}; use bevy::math::Mat4; @@ -34,6 +35,8 @@ fn main() { App::new() .add_plugins(DefaultXrPlugins) .add_plugins(OpenXrInput::new(XrControllerType::OculusTouch)) + .add_plugins(LogDiagnosticsPlugin::default()) + .add_plugins(FrameTimeDiagnosticsPlugin::default()) .add_systems(Startup, setup) .add_systems(Update, hands) .run(); diff --git a/src/lib.rs b/src/lib.rs index 38b0495..f903f44 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -157,25 +157,11 @@ impl Plugin for OpenXrPlugin { size: *resolution, format: *format, }; + app.add_systems(PreUpdate, xr_begin_frame); let mut manual_texture_views = app.world.resource_mut::(); manual_texture_views.insert(LEFT_XR_TEXTURE_HANDLE, left); manual_texture_views.insert(RIGHT_XR_TEXTURE_HANDLE, right); drop(manual_texture_views); - let pipeline_app = app.sub_app_mut(RenderExtractApp); - pipeline_app - .insert_resource(xr_instance.clone()) - .insert_resource(session.clone()) - .insert_resource(blend_mode.clone()) - .insert_resource(resolution.clone()) - .insert_resource(format.clone()) - .insert_resource(session_running.clone()) - .insert_resource(frame_waiter.clone()) - .insert_resource(swapchain.clone()) - .insert_resource(input.clone()) - .insert_resource(views.clone()) - .insert_resource(frame_state.clone()) - .insert_resource(action_sets.clone()); - drop(pipeline_app); let render_app = app.sub_app_mut(RenderApp); render_app @@ -195,8 +181,9 @@ impl Plugin for OpenXrPlugin { render_app.add_systems( Render, ( - begin_frame.before(render_system).after(RenderSet::ExtractCommands), - locate_views.before(render_system), + post_frame + .before(render_system) + .after(RenderSet::ExtractCommands), end_frame.after(render_system), ), ); @@ -214,16 +201,15 @@ impl PluginGroup for DefaultXrPlugins { } } -pub fn begin_frame( +pub fn xr_begin_frame( instance: Res, session: Res, session_running: Res, - resolution: Res, - format: Res, - swapchain: Res, - frame_waiter: Res, frame_state: Res, - mut manual_texture_views: ResMut, + frame_waiter: Res, + swapchain: Res, + views: Res, + input: Res, ) { { let _span = info_span!("xr_poll_events"); @@ -263,6 +249,25 @@ pub fn begin_frame( let _span = info_span!("xr_begin_frame").entered(); swapchain.begin().unwrap() } + { + let _span = info_span!("xr_locate_views").entered(); + *views.lock().unwrap() = session + .locate_views( + VIEW_TYPE, + frame_state.lock().unwrap().predicted_display_time, + &input.stage, + ) + .unwrap() + .1; + } +} + +pub fn post_frame( + resolution: Res, + format: Res, + swapchain: Res, + mut manual_texture_views: ResMut, +) { { let _span = info_span!("xr_acquire_image").entered(); swapchain.acquire_image().unwrap() diff --git a/src/xr_input/mod.rs b/src/xr_input/mod.rs index 244cffe..8dd16e7 100644 --- a/src/xr_input/mod.rs +++ b/src/xr_input/mod.rs @@ -59,7 +59,7 @@ fn action_set_system(action_sets: Res, session: Res) { for i in &action_sets.0 { active_action_sets.push(openxr::ActiveActionSet::new(i)); } - info!("action sets: {:#?}", action_sets.0.len()); + //info!("action sets: {:#?}", action_sets.0.len()); match session.sync_actions(&active_action_sets) { Err(err) => { warn!("{}", err);