From 90fe934d3a3e11807d39ca4606c1d818b599febc Mon Sep 17 00:00:00 2001 From: Schmarni Date: Wed, 13 Dec 2023 01:35:38 +0100 Subject: [PATCH] added warning with error when openxr fails to load and added Vec2Conv helper --- src/lib.rs | 123 +++++++++++++++++++++++--------------------- src/xr_input/mod.rs | 10 ++++ 2 files changed, 73 insertions(+), 60 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 296c6d19..71427733 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -82,67 +82,70 @@ impl Plugin for OpenXrPlugin { let mut system_state: SystemState>> = SystemState::new(&mut app.world); let primary_window = system_state.get(&app.world).get_single().ok().cloned(); - if let Ok(( - device, - queue, - adapter_info, - render_adapter, - instance, - xr_instance, - session, - blend_mode, - resolution, - format, - session_running, - frame_waiter, - swapchain, - input, - views, - frame_state, - )) = graphics::initialize_xr_graphics(primary_window.clone()) - { - // std::thread::sleep(Duration::from_secs(5)); - debug!("Configured wgpu adapter Limits: {:#?}", device.limits()); - debug!("Configured wgpu adapter Features: {:#?}", device.features()); - app.insert_resource(xr_instance.clone()); - app.insert_resource(session.clone()); - app.insert_resource(blend_mode.clone()); - app.insert_resource(resolution.clone()); - app.insert_resource(format.clone()); - app.insert_resource(session_running.clone()); - app.insert_resource(frame_waiter.clone()); - app.insert_resource(swapchain.clone()); - app.insert_resource(input.clone()); - app.insert_resource(views.clone()); - app.insert_resource(frame_state.clone()); - let xr_data = XrRenderData { + match graphics::initialize_xr_graphics(primary_window.clone()) { + Ok(( + device, + queue, + adapter_info, + render_adapter, + instance, xr_instance, - xr_session: session, - xr_blend_mode: blend_mode, - xr_resolution: resolution, - xr_format: format, - xr_session_running: session_running, - xr_frame_waiter: frame_waiter, - xr_swapchain: swapchain, - xr_input: input, - xr_views: views, - xr_frame_state: frame_state, - }; - app.insert_resource(xr_data); - app.insert_resource(ActionSets(vec![])); - app.add_plugins(RenderPlugin { - render_creation: RenderCreation::Manual( - device, - queue, - adapter_info, - render_adapter, - RenderInstance(Arc::new(instance)), - ), - }); - app.insert_resource(XrEnableStatus::Enabled); - } else { - app.add_plugins(RenderPlugin::default()); - app.insert_resource(XrEnableStatus::Disabled); + session, + blend_mode, + resolution, + format, + session_running, + frame_waiter, + swapchain, + input, + views, + frame_state, + )) => { + // std::thread::sleep(Duration::from_secs(5)); + debug!("Configured wgpu adapter Limits: {:#?}", device.limits()); + debug!("Configured wgpu adapter Features: {:#?}", device.features()); + app.insert_resource(xr_instance.clone()); + app.insert_resource(session.clone()); + app.insert_resource(blend_mode.clone()); + app.insert_resource(resolution.clone()); + app.insert_resource(format.clone()); + app.insert_resource(session_running.clone()); + app.insert_resource(frame_waiter.clone()); + app.insert_resource(swapchain.clone()); + app.insert_resource(input.clone()); + app.insert_resource(views.clone()); + app.insert_resource(frame_state.clone()); + let xr_data = XrRenderData { + xr_instance, + xr_session: session, + xr_blend_mode: blend_mode, + xr_resolution: resolution, + xr_format: format, + xr_session_running: session_running, + xr_frame_waiter: frame_waiter, + xr_swapchain: swapchain, + xr_input: input, + xr_views: views, + xr_frame_state: frame_state, + }; + app.insert_resource(xr_data); + app.insert_resource(ActionSets(vec![])); + app.add_plugins(RenderPlugin { + render_creation: RenderCreation::Manual( + device, + queue, + adapter_info, + render_adapter, + RenderInstance(Arc::new(instance)), + ), + }); + app.insert_resource(XrEnableStatus::Enabled); + } + Err(err) => { + warn!("OpenXR Failed to initialize: {}", err); + app.add_plugins(RenderPlugin::default()); + app.insert_resource(XrEnableStatus::Disabled); + } } } diff --git a/src/xr_input/mod.rs b/src/xr_input/mod.rs index 5c5a1b9b..e32f764d 100644 --- a/src/xr_input/mod.rs +++ b/src/xr_input/mod.rs @@ -17,6 +17,7 @@ use crate::xr_input::oculus_touch::setup_oculus_controller; use crate::xr_input::xr_camera::{xr_camera_head_sync, Eye, XRProjection, XrCameraBundle}; use bevy::app::{App, PostUpdate, Startup}; use bevy::log::{info, warn}; +use bevy::math::Vec2; use bevy::prelude::{BuildChildren, Component, Deref, DerefMut, IntoSystemConfigs, Resource}; use bevy::prelude::{Commands, Plugin, PreUpdate, Quat, Res, SpatialBundle, Update, Vec3}; use bevy::render::camera::CameraProjectionPlugin; @@ -117,6 +118,15 @@ pub fn action_set_system(action_sets: Res, session: Res) } } +pub trait Vec2Conv { + fn to_vec2(&self) -> Vec2; +} + +impl Vec2Conv for openxr::Vector2f { + fn to_vec2(&self) -> Vec2 { + Vec2::new(self.x, self.y) + } +} pub trait Vec3Conv { fn to_vec3(&self) -> Vec3; }