Merge pull request #173 from Schmarni-Dev/create_views_in_created

init views in XrSessionCreated schedule and add wgpu feature
This commit is contained in:
Schmarni
2025-02-05 19:45:45 +01:00
committed by GitHub
3 changed files with 20 additions and 10 deletions

View File

@@ -194,7 +194,8 @@ unsafe impl GraphicsExt for openxr::Vulkan {
| wgpu::Features::MULTIVIEW | wgpu::Features::MULTIVIEW
| wgpu::Features::MULTI_DRAW_INDIRECT_COUNT | wgpu::Features::MULTI_DRAW_INDIRECT_COUNT
| wgpu::Features::MULTI_DRAW_INDIRECT | 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 { let Some(wgpu_exposed_adapter) = wgpu_vk_instance.expose_adapter(vk_physical_device) else {
error!("WGPU failed to provide an adapter"); error!("WGPU failed to provide an adapter");

View File

@@ -10,8 +10,11 @@ use bevy::{
transform::TransformSystem, transform::TransformSystem,
}; };
use bevy_mod_xr::{ use bevy_mod_xr::{
camera::{XrCamera, XrProjection}, camera::{XrCamera, XrProjection, XrViewInit},
session::{XrFirst, XrHandleEvents, XrPreDestroySession, XrRenderSet, XrRootTransform}, session::{
XrFirst, XrHandleEvents, XrPreDestroySession, XrRenderSet, XrRootTransform,
XrSessionCreated,
},
spaces::XrPrimaryReferenceSpace, spaces::XrPrimaryReferenceSpace,
}; };
use openxr::ViewStateFlags; use openxr::ViewStateFlags;
@@ -55,15 +58,18 @@ impl Plugin for OxrRenderPlugin {
( (
wait_frame.run_if(should_run_frame_loop), wait_frame.run_if(should_run_frame_loop),
update_cameras.run_if(should_run_frame_loop), update_cameras.run_if(should_run_frame_loop),
)
.chain()
.in_set(XrHandleEvents::FrameLoop),
)
.add_systems(
XrSessionCreated,
if self.spawn_cameras { if self.spawn_cameras {
init_views::<true> init_views::<true>
} else { } else {
init_views::<false> init_views::<false>
} }
.run_if(resource_added::<OxrSession>), .in_set(XrViewInit),
)
.chain()
.in_set(XrHandleEvents::FrameLoop),
) )
.add_systems( .add_systems(
PostUpdate, PostUpdate,

View File

@@ -7,7 +7,7 @@ use bevy::ecs::reflect::ReflectComponent;
use bevy::ecs::schedule::IntoSystemConfigs; use bevy::ecs::schedule::IntoSystemConfigs;
use bevy::math::{Mat4, Vec3A}; use bevy::math::{Mat4, Vec3A};
use bevy::pbr::{PbrPlugin, PbrProjectionPlugin}; use bevy::pbr::{PbrPlugin, PbrProjectionPlugin};
use bevy::prelude::Projection; use bevy::prelude::{Projection, SystemSet};
use bevy::reflect::std_traits::ReflectDefault; use bevy::reflect::std_traits::ReflectDefault;
use bevy::reflect::Reflect; use bevy::reflect::Reflect;
use bevy::render::camera::{CameraProjection, CameraProjectionPlugin}; 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)] #[derive(Debug, Clone, Reflect, ExtractComponent)]
#[reflect(Component, Default)] #[reflect(Component, Default)]
pub struct XrProjection { pub struct XrProjection {