From 8a3719a019ca2adbfa59d1c08318e8bc5b37ffc1 Mon Sep 17 00:00:00 2001 From: Schmarni Date: Wed, 5 Feb 2025 19:00:00 +0100 Subject: [PATCH 1/2] use XrSessionCreated schedule to init the Views Signed-off-by: Schmarni --- crates/bevy_openxr/src/openxr/render.rs | 22 ++++++++++++++-------- crates/bevy_xr/src/camera.rs | 5 ++++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/crates/bevy_openxr/src/openxr/render.rs b/crates/bevy_openxr/src/openxr/render.rs index e2102c7..f1f4964 100644 --- a/crates/bevy_openxr/src/openxr/render.rs +++ b/crates/bevy_openxr/src/openxr/render.rs @@ -10,8 +10,11 @@ use bevy::{ transform::TransformSystem, }; use bevy_mod_xr::{ - camera::{XrCamera, XrProjection}, - session::{XrFirst, XrHandleEvents, XrPreDestroySession, XrRenderSet, XrRootTransform}, + camera::{XrCamera, XrProjection, XrViewInit}, + session::{ + XrFirst, XrHandleEvents, XrPreDestroySession, XrRenderSet, XrRootTransform, + XrSessionCreated, + }, spaces::XrPrimaryReferenceSpace, }; use openxr::ViewStateFlags; @@ -55,16 +58,19 @@ impl Plugin for OxrRenderPlugin { ( wait_frame.run_if(should_run_frame_loop), update_cameras.run_if(should_run_frame_loop), - if self.spawn_cameras { - init_views:: - } else { - init_views:: - } - .run_if(resource_added::), ) .chain() .in_set(XrHandleEvents::FrameLoop), ) + .add_systems( + XrSessionCreated, + if self.spawn_cameras { + init_views:: + } else { + init_views:: + } + .in_set(XrViewInit), + ) .add_systems( PostUpdate, (locate_views, update_views) diff --git a/crates/bevy_xr/src/camera.rs b/crates/bevy_xr/src/camera.rs index e3b0250..a7a8ca5 100644 --- a/crates/bevy_xr/src/camera.rs +++ b/crates/bevy_xr/src/camera.rs @@ -7,7 +7,7 @@ use bevy::ecs::reflect::ReflectComponent; use bevy::ecs::schedule::IntoSystemConfigs; use bevy::math::{Mat4, Vec3A}; use bevy::pbr::{PbrPlugin, PbrProjectionPlugin}; -use bevy::prelude::Projection; +use bevy::prelude::{Projection, SystemSet}; use bevy::reflect::std_traits::ReflectDefault; use bevy::reflect::Reflect; use bevy::render::camera::{CameraProjection, CameraProjectionPlugin}; @@ -38,6 +38,9 @@ impl Plugin for XrCameraPlugin { } } +#[derive(Clone, Copy, Default, PartialEq, Eq, Debug, Hash, SystemSet)] +pub struct XrViewInit; + #[derive(Debug, Clone, Reflect, ExtractComponent)] #[reflect(Component, Default)] pub struct XrProjection { From 63f4592c93c6a52515477f5a3044553a38729182 Mon Sep 17 00:00:00 2001 From: Schmarni Date: Wed, 5 Feb 2025 19:15:03 +0100 Subject: [PATCH 2/2] add CLEAR_TEXTURE wgpu feature Signed-off-by: Schmarni --- crates/bevy_openxr/src/openxr/graphics/vulkan.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/bevy_openxr/src/openxr/graphics/vulkan.rs b/crates/bevy_openxr/src/openxr/graphics/vulkan.rs index 9d88177..d3b6cd9 100644 --- a/crates/bevy_openxr/src/openxr/graphics/vulkan.rs +++ b/crates/bevy_openxr/src/openxr/graphics/vulkan.rs @@ -194,7 +194,8 @@ unsafe impl GraphicsExt for openxr::Vulkan { | wgpu::Features::MULTIVIEW | wgpu::Features::MULTI_DRAW_INDIRECT_COUNT | wgpu::Features::MULTI_DRAW_INDIRECT - | wgpu::Features::TEXTURE_FORMAT_16BIT_NORM; + | wgpu::Features::TEXTURE_FORMAT_16BIT_NORM + | wgpu::Features::CLEAR_TEXTURE; let Some(wgpu_exposed_adapter) = wgpu_vk_instance.expose_adapter(vk_physical_device) else { error!("WGPU failed to provide an adapter");