From eaa244d2474a9e3d20ca22028b485bc3ad178d27 Mon Sep 17 00:00:00 2001 From: awtterpip Date: Wed, 23 Aug 2023 18:58:49 -0500 Subject: [PATCH] idk wut im doin --- src/graphics/mod.rs | 4 ++-- src/graphics/vulkan.rs | 4 +++- src/lib.rs | 17 ++++++++++------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/graphics/mod.rs b/src/graphics/mod.rs index f2a527b..5d1deed 100644 --- a/src/graphics/mod.rs +++ b/src/graphics/mod.rs @@ -5,8 +5,8 @@ use bevy::window::RawHandleWrapper; use wgpu::Instance; use crate::input::XrInput; -use crate::resources::{XrInstance, XrSession, XrEnvironmentBlendMode, XrSessionRunning, XrFrameWaiter, XrSwapchain, XrViews}; +use crate::resources::{XrInstance, XrSession, XrEnvironmentBlendMode, XrSessionRunning, XrFrameWaiter, XrSwapchain, XrViews, XrFrameState}; -pub fn initialize_xr_graphics(window: Option) -> anyhow::Result<(RenderDevice, RenderQueue, RenderAdapterInfo, RenderAdapter, Instance, XrInstance, XrSession, XrEnvironmentBlendMode, XrSessionRunning, XrFrameWaiter, XrSwapchain, XrInput, XrViews)>{ +pub fn initialize_xr_graphics(window: Option) -> anyhow::Result<(RenderDevice, RenderQueue, RenderAdapterInfo, RenderAdapter, Instance, XrInstance, XrSession, XrEnvironmentBlendMode, XrSessionRunning, XrFrameWaiter, XrSwapchain, XrInput, XrViews, XrFrameState)>{ vulkan::initialize_xr_graphics(window) } \ No newline at end of file diff --git a/src/graphics/vulkan.rs b/src/graphics/vulkan.rs index 2f9c3e7..8c7d48d 100644 --- a/src/graphics/vulkan.rs +++ b/src/graphics/vulkan.rs @@ -13,7 +13,7 @@ use wgpu::Instance; use crate::input::XrInput; use crate::resources::{ - XrEnvironmentBlendMode, XrFrameWaiter, XrInstance, XrSession, XrSessionRunning, XrSwapchain, Swapchain, SwapchainInner, XrViews, + XrEnvironmentBlendMode, XrFrameWaiter, XrInstance, XrSession, XrSessionRunning, XrSwapchain, Swapchain, SwapchainInner, XrViews, XrFrameState, }; use crate::VIEW_TYPE; @@ -31,6 +31,7 @@ pub fn initialize_xr_graphics(window: Option) -> anyhow::Resul XrSwapchain, XrInput, XrViews, + XrFrameState, )> { use wgpu_hal::{api::Vulkan as V, Api}; @@ -371,6 +372,7 @@ pub fn initialize_xr_graphics(window: Option) -> anyhow::Resul })).into(), XrInput::new(xr_instance, session.into_any_graphics())?, Mutex::default().into(), + Mutex::default().into(), )) } diff --git a/src/lib.rs b/src/lib.rs index e7bd1fb..458848c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -36,6 +36,7 @@ pub struct FutureXrResources( XrSwapchain, XrInput, XrViews, + XrFrameState, )>, >, >, @@ -59,7 +60,7 @@ impl Plugin for OpenXrPlugin { bevy::tasks::IoTaskPool::get() .spawn_local(async move { - let (device, queue, adapter_info, render_adapter, instance, xr_instance, session, blend_mode, session_running, frame_waiter, swapchain, input, views) = graphics::initialize_xr_graphics(primary_window).unwrap(); + let (device, queue, adapter_info, render_adapter, instance, xr_instance, session, blend_mode, session_running, frame_waiter, swapchain, input, views, frame_state) = graphics::initialize_xr_graphics(primary_window).unwrap(); debug!("Configured wgpu adapter Limits: {:#?}", device.limits()); debug!("Configured wgpu adapter Features: {:#?}", device.features()); let mut future_renderer_resources_inner = @@ -68,11 +69,11 @@ impl Plugin for OpenXrPlugin { Some((device, queue, adapter_info, render_adapter, instance)); let mut future_xr_resources_inner = future_xr_resources_wrapper.lock().unwrap(); *future_xr_resources_inner = - Some((xr_instance, session, blend_mode, session_running, frame_waiter, swapchain, input, views)); + Some((xr_instance, session, blend_mode, session_running, frame_waiter, swapchain, input, views, frame_state)); }) .detach(); - app.add_systems(Last, pre_frame); + } fn ready(&self, app: &App) -> bool { @@ -86,7 +87,7 @@ impl Plugin for OpenXrPlugin { if let Some(future_renderer_resources) = app.world.remove_resource::() { - let (instance, session, blend_mode, session_running, frame_waiter, swapchain, input, views) = + let (instance, session, blend_mode, session_running, frame_waiter, swapchain, input, views, frame_state) = future_renderer_resources.0.lock().unwrap().take().unwrap(); app.insert_resource(instance.clone()) @@ -96,7 +97,8 @@ impl Plugin for OpenXrPlugin { .insert_resource(frame_waiter.clone()) .insert_resource(swapchain.clone()) .insert_resource(input.clone()) - .insert_resource(views.clone()); + .insert_resource(views.clone()) + .insert_resource(frame_state.clone()); let render_app = app.sub_app_mut(RenderApp); @@ -107,8 +109,9 @@ impl Plugin for OpenXrPlugin { .insert_resource(frame_waiter) .insert_resource(swapchain) .insert_resource(input) - .insert_resource(views); - render_app.add_systems(Render, (post_frame.in_set(RenderSet::Prepare), post_queue_submit.in_set(RenderSet::Cleanup))); + .insert_resource(views) + .insert_resource(frame_state); + render_app.add_systems(Render, (pre_frame.in_set(RenderSet::Prepare).before(post_frame), post_frame.in_set(RenderSet::Prepare), post_queue_submit.in_set(RenderSet::Cleanup))); } }