jittering fixed yes

This commit is contained in:
awtterpip
2024-03-16 22:12:11 -05:00
parent cc6e25cd17
commit 61087029db
3 changed files with 53 additions and 1 deletions

View File

@@ -7,6 +7,7 @@ use bevy::render::renderer::{
};
use bevy::render::settings::RenderCreation;
use bevy::render::{MainWorld, RenderApp, RenderPlugin};
use bevy::transform::TransformSystem;
use bevy::winit::{UpdateMode, WinitSettings};
use bevy_xr::session::{
handle_session, session_available, session_running, status_equals, BeginXrSession,
@@ -27,6 +28,9 @@ pub enum XrPreUpdateSet {
HandleEvents,
}
#[derive(Component)]
pub struct XrTrackingRoot;
#[derive(Resource, Clone, Copy, PartialEq)]
pub struct AppExiting(bool);
@@ -71,6 +75,7 @@ impl Plugin for XrInitPlugin {
synchronous_pipeline_compilation: self.synchronous_pipeline_compilation,
},
ExtractResourcePlugin::<XrTime>::default(),
ExtractResourcePlugin::<XrRootTransform>::default(),
))
.add_systems(
PreUpdate,
@@ -93,6 +98,10 @@ impl Plugin for XrInitPlugin {
.in_set(XrPreUpdateSet::HandleEvents),
),
)
.add_systems(
PostUpdate,
update_root_transform.after(TransformSystem::TransformPropagate),
)
.add_systems(
Last,
app_exit_xr
@@ -106,13 +115,18 @@ impl Plugin for XrInitPlugin {
focused_mode: UpdateMode::Continuous,
unfocused_mode: UpdateMode::Continuous,
})
.init_resource::<XrRootTransform>()
.insert_non_send_resource(session_create_info);
app.world
.spawn((TransformBundle::default(), XrTrackingRoot));
let render_app = app.sub_app_mut(RenderApp);
render_app
.insert_resource(instance)
.insert_resource(system_id)
.insert_resource(status)
.init_resource::<XrRootTransform>()
.add_systems(
ExtractSchedule,
transfer_xr_resources.run_if(not(session_running)),
@@ -150,6 +164,15 @@ impl Plugin for XrInitPlugin {
}
}
pub fn update_root_transform(
mut root_transform: ResMut<XrRootTransform>,
root: Query<&GlobalTransform, With<XrTrackingRoot>>,
) {
let transform = root.single();
root_transform.0 = *transform;
}
fn xr_entry() -> Result<XrEntry> {
#[cfg(windows)]
let entry = openxr::Entry::linked();