diff --git a/crates/bevy_openxr/examples/actions.rs b/crates/bevy_openxr/examples/actions.rs index 3a77df4..c06fbcd 100644 --- a/crates/bevy_openxr/examples/actions.rs +++ b/crates/bevy_openxr/examples/actions.rs @@ -21,8 +21,8 @@ fn main() { .add_systems(Update, handle_flight_input) // Realtime lighting is expensive, use ambient light instead .insert_resource(AmbientLight { - color: Default::default(), brightness: 500.0, + ..AmbientLight::default() }) .run(); } @@ -48,7 +48,7 @@ fn setup_scene( commands.spawn(( Camera3d::default(), - Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), + Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), )); } @@ -132,14 +132,15 @@ fn handle_flight_input( //hard code speed for now let speed = 5.0; - let root = oxr_root.get_single_mut(); + let root = oxr_root.single_mut(); match root { Ok(mut root_position) => { //lets assume HMD based direction for now let view = views.first(); match view { Some(v) => { - let reference_quat = root_position.rotation * v.pose.orientation.to_quat(); + let reference_quat = + root_position.rotation * v.pose.orientation.to_quat(); let locomotion_vector = reference_quat.mul_vec3(input_vector); root_position.translation += diff --git a/crates/bevy_openxr/examples/overlay.rs b/crates/bevy_openxr/examples/overlay.rs index 800a7b6..183b482 100644 --- a/crates/bevy_openxr/examples/overlay.rs +++ b/crates/bevy_openxr/examples/overlay.rs @@ -49,23 +49,23 @@ fn handle_input( ) { if keys.just_pressed(KeyCode::KeyE) { info!("sending end"); - end.send_default(); + end.write_default(); } if keys.just_pressed(KeyCode::KeyC) { info!("sending create"); - create.send_default(); + create.write_default(); } if keys.just_pressed(KeyCode::KeyD) { info!("sending destroy"); - destroy.send_default(); + destroy.write_default(); } if keys.just_pressed(KeyCode::KeyB) { info!("sending begin"); - begin.send_default(); + begin.write_default(); } if keys.just_pressed(KeyCode::KeyR) { info!("sending request exit"); - request_exit.send_default(); + request_exit.write_default(); } } diff --git a/crates/bevy_openxr/examples/raw_actions.rs b/crates/bevy_openxr/examples/raw_actions.rs index 9d3a032..4b7cc7a 100644 --- a/crates/bevy_openxr/examples/raw_actions.rs +++ b/crates/bevy_openxr/examples/raw_actions.rs @@ -35,7 +35,7 @@ fn main() { } fn attach_set(actions: Res, mut attach: EventWriter) { - attach.send(OxrAttachActionSet(actions.set.clone())); + attach.write(OxrAttachActionSet(actions.set.clone())); } #[derive(Resource)] @@ -45,7 +45,7 @@ struct ControllerActions { right: openxr::Action, } fn sync_actions(actions: Res, mut sync: EventWriter) { - sync.send(OxrSyncActionSet(actions.set.clone())); + sync.write(OxrSyncActionSet(actions.set.clone())); } /// set up a simple 3D scene fn setup( @@ -82,12 +82,12 @@ fn suggest_action_bindings( actions: Res, mut bindings: EventWriter, ) { - bindings.send(OxrSuggestActionBinding { + bindings.write(OxrSuggestActionBinding { action: actions.left.as_raw(), interaction_profile: "/interaction_profiles/oculus/touch_controller".into(), bindings: vec!["/user/hand/left/input/grip/pose".into()], }); - bindings.send(OxrSuggestActionBinding { + bindings.write(OxrSuggestActionBinding { action: actions.right.as_raw(), interaction_profile: "/interaction_profiles/oculus/touch_controller".into(), bindings: vec!["/user/hand/right/input/grip/pose".into()], diff --git a/crates/bevy_openxr/examples/sessions.rs b/crates/bevy_openxr/examples/sessions.rs index 20d7b3b..2b14816 100644 --- a/crates/bevy_openxr/examples/sessions.rs +++ b/crates/bevy_openxr/examples/sessions.rs @@ -32,23 +32,23 @@ fn handle_input( ) { if keys.just_pressed(KeyCode::KeyE) { info!("sending end"); - end.send_default(); + end.write_default(); } if keys.just_pressed(KeyCode::KeyC) { info!("sending create"); - create.send_default(); + create.write_default(); } if keys.just_pressed(KeyCode::KeyD) { info!("sending destroy"); - destroy.send_default(); + destroy.write_default(); } if keys.just_pressed(KeyCode::KeyB) { info!("sending begin"); - begin.send_default(); + begin.write_default(); } if keys.just_pressed(KeyCode::KeyR) { info!("sending request exit"); - request_exit.send_default(); + request_exit.write_default(); } if keys.just_pressed(KeyCode::KeyI) { info!("current state: {:?}", *state); diff --git a/crates/bevy_openxr/examples/transform_utils.rs b/crates/bevy_openxr/examples/transform_utils.rs index 08b6161..9bda156 100644 --- a/crates/bevy_openxr/examples/transform_utils.rs +++ b/crates/bevy_openxr/examples/transform_utils.rs @@ -28,8 +28,8 @@ fn main() { send_recenter.after(XRUtilsActionSystemSet::SyncActionStates), ) .insert_resource(AmbientLight { - color: Default::default(), brightness: 500.0, + ..AmbientLight::default() }) .run(); } @@ -161,7 +161,7 @@ fn send_look_at_red_cube_event( info!("send facing"); let quat = Transform::default() .looking_at(Transform::from_xyz(4.0, 0.0, 0.0).translation, Vec3::Y); //this is a transform facing the red cube from the center of the scene, you should use the HMD posision but I was lazy. - event_writer.send(SnapToRotation(quat.rotation)); + event_writer.write(SnapToRotation(quat.rotation)); } } XRUtilsActionState::Float(_) => (), @@ -185,7 +185,7 @@ fn send_recenter( if send { let center = Transform::default().translation; - event_writer.send(SnapToPosition(center)); + event_writer.write(SnapToPosition(center)); } } XRUtilsActionState::Float(_) => (), diff --git a/crates/bevy_openxr/src/openxr/features/overlay.rs b/crates/bevy_openxr/src/openxr/features/overlay.rs index d4d26dc..e84fa63 100644 --- a/crates/bevy_openxr/src/openxr/features/overlay.rs +++ b/crates/bevy_openxr/src/openxr/features/overlay.rs @@ -27,7 +27,7 @@ impl Plugin for OxrOverlayPlugin { fn handle_overlay_event(event: OxrEventIn, mut writer: EventWriter) { if let Event::MainSessionVisibilityChangedEXTX(event) = *event { - writer.send(OxrOverlaySessionEvent::MainSessionVisibilityChanged { + writer.write(OxrOverlaySessionEvent::MainSessionVisibilityChanged { visible: event.visible(), flags: event.flags(), }); diff --git a/crates/bevy_openxr/src/openxr/layer_builder.rs b/crates/bevy_openxr/src/openxr/layer_builder.rs index 23fe790..d7ac8ec 100644 --- a/crates/bevy_openxr/src/openxr/layer_builder.rs +++ b/crates/bevy_openxr/src/openxr/layer_builder.rs @@ -9,7 +9,7 @@ use crate::resources::*; use crate::spaces::OxrSpaceExt as _; pub trait LayerProvider { - fn get<'a>(&'a self, world: &'a World) -> Option>; + fn get<'a>(&'a self, world: &'a World) -> Option + 'a>>; } pub struct ProjectionLayer; @@ -117,7 +117,7 @@ impl<'a> SwapchainSubImage<'a> { } } -impl<'a> Default for SwapchainSubImage<'a> { +impl Default for SwapchainSubImage<'_> { fn default() -> Self { Self::new() } @@ -165,11 +165,15 @@ impl<'a> CompositionLayerProjectionView<'a> { self } } -impl<'a> Default for CompositionLayerProjectionView<'a> { +impl Default for CompositionLayerProjectionView<'_> { fn default() -> Self { Self::new() } } +/// # Safety +/// the header function must return a ref to a valid Composition Layer struct. +/// it has to use `repr(C)` and it has to follow the shape of a Composition Layer struct from the +/// OpenXR specification pub unsafe trait CompositionLayer<'a> { fn swapchain(&self) -> Option<&'a OxrSwapchain>; fn header(&self) -> &sys::CompositionLayerBaseHeader; @@ -227,7 +231,7 @@ unsafe impl<'a> CompositionLayer<'a> for CompositionLayerProjection<'a> { unsafe { mem::transmute(&self.inner) } } } -impl<'a> Default for CompositionLayerProjection<'a> { +impl Default for CompositionLayerProjection<'_> { fn default() -> Self { Self::new() } diff --git a/crates/bevy_openxr/src/openxr/reference_space.rs b/crates/bevy_openxr/src/openxr/reference_space.rs index b797f70..bdc77f7 100644 --- a/crates/bevy_openxr/src/openxr/reference_space.rs +++ b/crates/bevy_openxr/src/openxr/reference_space.rs @@ -20,18 +20,10 @@ impl Default for OxrReferenceSpacePlugin { } } -/// Resource specifying what the type should be for [`OxrPrimaryReferenceSpace`]. Set through [`OxrReferenceSpacePlugin`]. +/// Resource specifying what the type should used be for the [`XrPrimaryReferenceSpace`]. Set through [`OxrReferenceSpacePlugin`]. #[derive(Resource)] struct OxrDefaultPrimaryReferenceSpaceType(openxr::ReferenceSpaceType); -/// The Default Reference space used for locating things -// #[derive(Resource, Deref, ExtrctResource, Clone)] -// pub struct OxrPrimaryReferenceSpace(pub Arc); - -/// The Reference space used for locating spaces on this entity -#[derive(Component)] -pub struct OxrReferenceSpace(pub openxr::Space); - impl Plugin for OxrReferenceSpacePlugin { fn build(&self, app: &mut App) { app.add_plugins(ExtractResourcePlugin::::default()) diff --git a/crates/bevy_openxr/src/openxr/render.rs b/crates/bevy_openxr/src/openxr/render.rs index e359bdc..3ffa06c 100644 --- a/crates/bevy_openxr/src/openxr/render.rs +++ b/crates/bevy_openxr/src/openxr/render.rs @@ -1,4 +1,3 @@ - use bevy::{ prelude::*, render::{ @@ -251,7 +250,6 @@ pub fn update_views( views: ResMut, ) { for (mut transform, mut projection, camera) in query.iter_mut() { - println!("we have this query"); let Some(view) = views.get(camera.0 as usize) else { continue; }; @@ -271,11 +269,6 @@ pub fn update_views( ); projection.projection_matrix = projection_matrix; - println!( - "Updateing projectinon matrix to: {:#?}", - projection.projection_matrix - ); - let openxr::Quaternionf { x, y, z, w } = view.pose.orientation; let rotation = Quat::from_xyzw(x, y, z, w); transform.rotation = rotation; diff --git a/crates/bevy_openxr/src/openxr/resources.rs b/crates/bevy_openxr/src/openxr/resources.rs index d69de13..080cc96 100644 --- a/crates/bevy_openxr/src/openxr/resources.rs +++ b/crates/bevy_openxr/src/openxr/resources.rs @@ -288,10 +288,6 @@ impl OxrSwapchain { #[derive(Debug, Deref, Resource, Clone, Copy, ExtractResource)] pub struct OxrSwapchainImages(pub &'static [wgpu::Texture]); -/// Thread safe wrapper around [openxr::Space] representing the stage. -// #[derive(Deref, Clone, Resource)] -// pub struct OxrStage(pub Arc); - /// Stores the latest generated [OxrViews] #[derive(Clone, Resource, ExtractResource, Deref, DerefMut, Default)] pub struct OxrViews(pub Vec); diff --git a/crates/bevy_xr/src/camera.rs b/crates/bevy_xr/src/camera.rs index 68f4d91..805a09a 100644 --- a/crates/bevy_xr/src/camera.rs +++ b/crates/bevy_xr/src/camera.rs @@ -1,19 +1,14 @@ use core::panic; -use bevy::app::{App, Plugin, PostUpdate}; +use bevy::app::{App, Plugin}; use bevy::core_pipeline::core_3d::Camera3d; -use bevy::ecs::component::{Component, HookContext, Mutable, StorageType}; -use bevy::ecs::reflect::ReflectComponent; -use bevy::ecs::world::DeferredWorld; +use bevy::ecs::component::Component; use bevy::math::{Mat4, Vec3A, Vec4}; -use bevy::pbr::{PbrPlugin, PbrProjectionPlugin}; -use bevy::prelude::{Projection, SystemSet}; +use bevy::prelude::SystemSet; use bevy::reflect::std_traits::ReflectDefault; use bevy::reflect::Reflect; -use bevy::render::camera::{CameraProjection, CameraProjectionPlugin, CustomProjection}; +use bevy::render::camera::CameraProjection; use bevy::render::extract_component::{ExtractComponent, ExtractComponentPlugin}; -use bevy::render::view::{update_frusta, VisibilitySystems}; -use bevy::transform::TransformSystem; use crate::session::XrTracker; @@ -21,17 +16,7 @@ pub struct XrCameraPlugin; impl Plugin for XrCameraPlugin { fn build(&self, app: &mut App) { - /*app.add_plugins(CameraProjectionPlugin::::default()); - app.add_systems( - PostUpdate, - update_frusta:: - .after(TransformSystem::TransformPropagate) - .before(VisibilitySystems::UpdateFrusta), - ); - if app.is_plugin_added::() { - app.add_plugins(PbrProjectionPlugin::::default()); - }*/ - app.add_plugins((ExtractComponentPlugin::::default(),)); + app.add_plugins(ExtractComponentPlugin::::default()); } } @@ -45,10 +30,6 @@ pub struct XrProjection { pub near: f32, } -fn on_projection_add(mut world: DeferredWorld, HookContext { entity, .. }: HookContext) { - world.commands().entity(entity).remove::(); -} - impl Default for XrProjection { fn default() -> Self { Self { @@ -124,7 +105,6 @@ pub fn calculate_projection(near_z: f32, fov: Fov) -> Mat4 { // let y_fov = (self.fov.angle_up.abs() + self.fov.angle_down.abs()); // return Mat4::perspective_infinite_reverse_rh(y_fov, x_fov / y_fov, self.near); - let is_vulkan_api = false; // FIXME wgpu probably abstracts this let far_z = -1.; // use infinite proj // let far_z = self.far; @@ -141,11 +121,7 @@ pub fn calculate_projection(near_z: f32, fov: Fov) -> Mat4 { // positive Y up (OpenGL / D3D / Metal). // const float tanAngleHeight = // graphicsApi == GRAPHICS_VULKAN ? (tanAngleDown - tanAngleUp) : (tanAngleUp - tanAngleDown); - let tan_angle_height = if is_vulkan_api { - tan_angle_down - tan_angle_up - } else { - tan_angle_up - tan_angle_down - }; + let tan_angle_height = tan_angle_up - tan_angle_down; // Set to nearZ for a [-1,1] Z clip space (OpenGL / OpenGL ES). // Set to zero for a [0,1] Z clip space (Vulkan / D3D / Metal). diff --git a/crates/bevy_xr/src/session.rs b/crates/bevy_xr/src/session.rs index bb79d5f..5506a3b 100644 --- a/crates/bevy_xr/src/session.rs +++ b/crates/bevy_xr/src/session.rs @@ -3,7 +3,7 @@ use std::sync::atomic::AtomicBool; use std::sync::Arc; use bevy::app::{AppExit, MainScheduleOrder}; -use bevy::ecs::component::{HookContext, Mutable, StorageType}; +use bevy::ecs::component::HookContext; use bevy::ecs::schedule::ScheduleLabel; use bevy::ecs::world::DeferredWorld; use bevy::prelude::*; @@ -216,7 +216,7 @@ impl Plugin for XrSessionPlugin { } fn exits_session_on_app_exit(mut request_exit: EventWriter) { - request_exit.send_default(); + request_exit.write_default(); } /// Event sent by backends whenever [`XrState`] is changed. @@ -258,18 +258,18 @@ pub fn auto_handle_session( match state { XrState::Available => { if !*no_auto_restart { - create_session.send_default(); + create_session.write_default(); } } XrState::Ready => { - begin_session.send_default(); + begin_session.write_default(); } XrState::Stopping => { - end_session.send_default(); + end_session.write_default(); } XrState::Exiting { should_restart } => { *no_auto_restart = !should_restart; - destroy_session.send_default(); + destroy_session.write_default(); } _ => (), } @@ -280,7 +280,7 @@ pub fn update_root_transform( mut root_transform: ResMut, root: Query<&GlobalTransform, With>, ) { - let Ok(transform) = root.get_single() else { + let Ok(transform) = root.single() else { return; }; diff --git a/crates/bevy_xr_utils/src/transform_utils.rs b/crates/bevy_xr_utils/src/transform_utils.rs index 0dff9aa..2c126d8 100644 --- a/crates/bevy_xr_utils/src/transform_utils.rs +++ b/crates/bevy_xr_utils/src/transform_utils.rs @@ -45,7 +45,7 @@ pub fn handle_transform_events( } //rotation - let root_local = root_transform.translation.clone(); + let root_local = root_transform.translation; let hmd_global = root_transform.rotation.mul_vec3(view_translation) + root_local; let view_rot = view.pose.orientation.to_quat();