maybe fixed frame timing??

This commit is contained in:
awtterpip
2023-09-11 15:29:59 -05:00
parent 086c964e82
commit 154a389bc8
3 changed files with 32 additions and 24 deletions

View File

@@ -1,5 +1,6 @@
use bevy::core_pipeline::core_3d; use bevy::core_pipeline::core_3d;
use bevy::core_pipeline::tonemapping::{DebandDither, Tonemapping}; use bevy::core_pipeline::tonemapping::{DebandDither, Tonemapping};
use bevy::diagnostic::{LogDiagnosticsPlugin, FrameTimeDiagnosticsPlugin};
use bevy::ecs::prelude::{Bundle, Component, ReflectComponent}; use bevy::ecs::prelude::{Bundle, Component, ReflectComponent};
use bevy::math::Mat4; use bevy::math::Mat4;
@@ -34,6 +35,8 @@ fn main() {
App::new() App::new()
.add_plugins(DefaultXrPlugins) .add_plugins(DefaultXrPlugins)
.add_plugins(OpenXrInput::new(XrControllerType::OculusTouch)) .add_plugins(OpenXrInput::new(XrControllerType::OculusTouch))
.add_plugins(LogDiagnosticsPlugin::default())
.add_plugins(FrameTimeDiagnosticsPlugin::default())
.add_systems(Startup, setup) .add_systems(Startup, setup)
.add_systems(Update, hands) .add_systems(Update, hands)
.run(); .run();

View File

@@ -157,25 +157,11 @@ impl Plugin for OpenXrPlugin {
size: *resolution, size: *resolution,
format: *format, format: *format,
}; };
app.add_systems(PreUpdate, xr_begin_frame);
let mut manual_texture_views = app.world.resource_mut::<ManualTextureViews>(); let mut manual_texture_views = app.world.resource_mut::<ManualTextureViews>();
manual_texture_views.insert(LEFT_XR_TEXTURE_HANDLE, left); manual_texture_views.insert(LEFT_XR_TEXTURE_HANDLE, left);
manual_texture_views.insert(RIGHT_XR_TEXTURE_HANDLE, right); manual_texture_views.insert(RIGHT_XR_TEXTURE_HANDLE, right);
drop(manual_texture_views); 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); let render_app = app.sub_app_mut(RenderApp);
render_app render_app
@@ -195,8 +181,9 @@ impl Plugin for OpenXrPlugin {
render_app.add_systems( render_app.add_systems(
Render, Render,
( (
begin_frame.before(render_system).after(RenderSet::ExtractCommands), post_frame
locate_views.before(render_system), .before(render_system)
.after(RenderSet::ExtractCommands),
end_frame.after(render_system), end_frame.after(render_system),
), ),
); );
@@ -214,16 +201,15 @@ impl PluginGroup for DefaultXrPlugins {
} }
} }
pub fn begin_frame( pub fn xr_begin_frame(
instance: Res<XrInstance>, instance: Res<XrInstance>,
session: Res<XrSession>, session: Res<XrSession>,
session_running: Res<XrSessionRunning>, session_running: Res<XrSessionRunning>,
resolution: Res<XrResolution>,
format: Res<XrFormat>,
swapchain: Res<XrSwapchain>,
frame_waiter: Res<XrFrameWaiter>,
frame_state: Res<XrFrameState>, frame_state: Res<XrFrameState>,
mut manual_texture_views: ResMut<ManualTextureViews>, frame_waiter: Res<XrFrameWaiter>,
swapchain: Res<XrSwapchain>,
views: Res<XrViews>,
input: Res<XrInput>,
) { ) {
{ {
let _span = info_span!("xr_poll_events"); let _span = info_span!("xr_poll_events");
@@ -263,6 +249,25 @@ pub fn begin_frame(
let _span = info_span!("xr_begin_frame").entered(); let _span = info_span!("xr_begin_frame").entered();
swapchain.begin().unwrap() 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<XrResolution>,
format: Res<XrFormat>,
swapchain: Res<XrSwapchain>,
mut manual_texture_views: ResMut<ManualTextureViews>,
) {
{ {
let _span = info_span!("xr_acquire_image").entered(); let _span = info_span!("xr_acquire_image").entered();
swapchain.acquire_image().unwrap() swapchain.acquire_image().unwrap()

View File

@@ -59,7 +59,7 @@ fn action_set_system(action_sets: Res<ActionSets>, session: Res<XrSession>) {
for i in &action_sets.0 { for i in &action_sets.0 {
active_action_sets.push(openxr::ActiveActionSet::new(i)); 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) { match session.sync_actions(&active_action_sets) {
Err(err) => { Err(err) => {
warn!("{}", err); warn!("{}", err);