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:
@@ -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");
|
||||||
|
|||||||
@@ -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,16 +58,19 @@ 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),
|
||||||
if self.spawn_cameras {
|
|
||||||
init_views::<true>
|
|
||||||
} else {
|
|
||||||
init_views::<false>
|
|
||||||
}
|
|
||||||
.run_if(resource_added::<OxrSession>),
|
|
||||||
)
|
)
|
||||||
.chain()
|
.chain()
|
||||||
.in_set(XrHandleEvents::FrameLoop),
|
.in_set(XrHandleEvents::FrameLoop),
|
||||||
)
|
)
|
||||||
|
.add_systems(
|
||||||
|
XrSessionCreated,
|
||||||
|
if self.spawn_cameras {
|
||||||
|
init_views::<true>
|
||||||
|
} else {
|
||||||
|
init_views::<false>
|
||||||
|
}
|
||||||
|
.in_set(XrViewInit),
|
||||||
|
)
|
||||||
.add_systems(
|
.add_systems(
|
||||||
PostUpdate,
|
PostUpdate,
|
||||||
(locate_views, update_views)
|
(locate_views, update_views)
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user