wip
This commit is contained in:
24
src/lib.rs
24
src/lib.rs
@@ -154,20 +154,6 @@ impl Plugin for OpenXrPlugin {
|
||||
.after(RenderSet::ExtractCommands),
|
||||
// .in_set(RenderSet::Prepare),
|
||||
);
|
||||
// render_app.add_systems(
|
||||
// Render,
|
||||
// (
|
||||
// locate_views,
|
||||
// xr_input::xr_camera::xr_camera_head_sync_render,
|
||||
// // sync_simple_transforms,
|
||||
// // propagate_transforms,
|
||||
// // update_cam_views,
|
||||
// )
|
||||
// .chain()
|
||||
// .run_if(xr_only())
|
||||
// // .run_if(xr_render_only())
|
||||
// .in_set(RenderSet::Prepare),
|
||||
// );
|
||||
render_app.add_systems(
|
||||
Render,
|
||||
xr_end_frame
|
||||
@@ -187,14 +173,6 @@ impl Plugin for OpenXrPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
// Confirmed Working
|
||||
// Not Working Actually, the cam doesn't render with the new pose for some reason
|
||||
fn update_cam_views(mut query: Query<(&mut ExtractedView, &GlobalTransform)>) {
|
||||
for (mut view, transform) in &mut query {
|
||||
view.transform = *transform;
|
||||
}
|
||||
}
|
||||
|
||||
fn xr_skip_frame(
|
||||
xr_swapchain: Res<XrSwapchain>,
|
||||
xr_frame_state: Res<XrFrameState>,
|
||||
@@ -238,7 +216,7 @@ impl PluginGroup for DefaultXrPlugins {
|
||||
..default()
|
||||
},
|
||||
})
|
||||
// .disable::<PipelinedRenderingPlugin>()
|
||||
.disable::<PipelinedRenderingPlugin>()
|
||||
.disable::<RenderPlugin>()
|
||||
.add_before::<RenderPlugin, _>(OpenXrPlugin {
|
||||
prefered_blend_mode: self.prefered_blend_mode,
|
||||
|
||||
@@ -33,10 +33,15 @@ macro_rules! xr_resource_wrapper {
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! xr_resource_wrapper_no_extract {
|
||||
macro_rules! xr_resource_wrapper_copy {
|
||||
($wrapper_type:ident, $xr_type:ty) => {
|
||||
#[derive(
|
||||
Clone, Copy, bevy::prelude::Resource, bevy::prelude::Deref, bevy::prelude::DerefMut,
|
||||
Clone,
|
||||
Copy,
|
||||
bevy::prelude::Resource,
|
||||
bevy::prelude::Deref,
|
||||
bevy::prelude::DerefMut,
|
||||
bevy::render::extract_resource::ExtractResource,
|
||||
)]
|
||||
pub struct $wrapper_type($xr_type);
|
||||
|
||||
|
||||
@@ -4,36 +4,24 @@ use std::sync::Mutex;
|
||||
|
||||
use crate::input::XrInput;
|
||||
// use crate::passthrough::XrPassthroughLayer;
|
||||
use crate::xr_init::XrStatus;
|
||||
use crate::{resource_macros::*, xr_resource_wrapper_no_extract};
|
||||
use crate::{resource_macros::*, xr_resource_wrapper_copy};
|
||||
use bevy::prelude::*;
|
||||
use bevy::render::extract_resource::{ExtractResource, ExtractResourcePlugin};
|
||||
use bevy::render::extract_resource::ExtractResourcePlugin;
|
||||
use openxr as xr;
|
||||
|
||||
xr_resource_wrapper!(XrInstance, xr::Instance);
|
||||
xr_resource_wrapper!(XrSession, xr::Session<xr::AnyGraphics>);
|
||||
xr_resource_wrapper!(XrEnvironmentBlendMode, xr::EnvironmentBlendMode);
|
||||
xr_resource_wrapper!(XrResolution, UVec2);
|
||||
xr_resource_wrapper!(XrFormat, wgpu::TextureFormat);
|
||||
xr_resource_wrapper_no_extract!(XrFrameState, xr::FrameState);
|
||||
xr_resource_wrapper_copy!(XrEnvironmentBlendMode, xr::EnvironmentBlendMode);
|
||||
xr_resource_wrapper_copy!(XrResolution, UVec2);
|
||||
xr_resource_wrapper_copy!(XrFormat, wgpu::TextureFormat);
|
||||
xr_resource_wrapper_copy!(XrFrameState, xr::FrameState);
|
||||
xr_resource_wrapper!(XrViews, Vec<xr::View>);
|
||||
xr_arc_resource_wrapper!(XrSessionRunning, AtomicBool);
|
||||
xr_arc_resource_wrapper!(XrSwapchain, Swapchain);
|
||||
xr_no_clone_resource_wrapper!(XrFrameWaiter, xr::FrameWaiter);
|
||||
|
||||
impl ExtractResource for XrFrameState {
|
||||
type Source = Self;
|
||||
|
||||
fn extract_resource(source: &Self::Source) -> Self {
|
||||
let mut state = *source;
|
||||
state.predicted_display_time = xr::Time::from_nanos(
|
||||
state.predicted_display_time.as_nanos() + state.predicted_display_period.as_nanos(),
|
||||
);
|
||||
state
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) struct VulkanOXrSessionSetupInfo {
|
||||
pub struct VulkanOXrSessionSetupInfo {
|
||||
pub(crate) device_ptr: *const c_void,
|
||||
pub(crate) physical_device_ptr: *const c_void,
|
||||
pub(crate) vk_instance_ptr: *const c_void,
|
||||
@@ -41,7 +29,7 @@ pub(crate) struct VulkanOXrSessionSetupInfo {
|
||||
pub(crate) xr_system_id: xr::SystemId,
|
||||
}
|
||||
|
||||
pub(crate) enum OXrSessionSetupInfo {
|
||||
pub enum OXrSessionSetupInfo {
|
||||
Vulkan(VulkanOXrSessionSetupInfo),
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user