diff --git a/src/lib.rs b/src/lib.rs index 44fc206..80382aa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -25,6 +25,7 @@ use bevy::render::extract_resource::ExtractResourcePlugin; use bevy::render::pipelined_rendering::PipelinedRenderingPlugin; use bevy::render::renderer::{render_system, RenderInstance}; use bevy::render::settings::RenderCreation; +use bevy::render::view::ExtractedView; use bevy::render::{Render, RenderApp, RenderPlugin, RenderSet}; use bevy::tasks::available_parallelism; use bevy::transform::systems::{propagate_transforms, sync_simple_transforms}; @@ -160,6 +161,7 @@ impl Plugin for OpenXrPlugin { xr_input::xr_camera::xr_camera_head_sync, sync_simple_transforms, propagate_transforms, + update_cam_views, ) .chain() .run_if(xr_only()) @@ -185,6 +187,12 @@ impl Plugin for OpenXrPlugin { } } +fn update_cam_views(mut query: Query<(&mut ExtractedView, &GlobalTransform)>) { + for (mut view, transform) in &mut query { + view.transform = *transform; + } +} + fn xr_skip_frame( xr_swapchain: Res, xr_frame_state: Res, diff --git a/src/xr_input/xr_camera.rs b/src/xr_input/xr_camera.rs index 95b70b1..912b3ec 100644 --- a/src/xr_input/xr_camera.rs +++ b/src/xr_input/xr_camera.rs @@ -65,6 +65,20 @@ impl ExtractComponent for TransformExtract { } } +#[derive(Component)] +pub(super) struct GlobalTransformExtract; + +impl ExtractComponent for GlobalTransformExtract { + type Query = Read; + + type Filter = (); + + type Out = GlobalTransform; + + fn extract_component(item: bevy::ecs::query::QueryItem<'_, Self::Query>) -> Option { + Some(*item) + } +} #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)] pub enum Eye { Left = 0,