working
This commit is contained in:
@@ -1,14 +1,19 @@
|
||||
pub mod extensions;
|
||||
mod vulkan;
|
||||
|
||||
use bevy::render::renderer::{RenderAdapter, RenderAdapterInfo, RenderDevice, RenderQueue};
|
||||
use bevy::window::RawHandleWrapper;
|
||||
use bevy::ecs::query::With;
|
||||
use bevy::ecs::system::{Query, SystemState};
|
||||
use bevy::ecs::world::World;
|
||||
use bevy::render::renderer::{
|
||||
RenderAdapter, RenderAdapterInfo, RenderDevice, RenderInstance, RenderQueue,
|
||||
};
|
||||
use bevy::window::{PrimaryWindow, RawHandleWrapper};
|
||||
use wgpu::Instance;
|
||||
|
||||
use crate::input::XrInput;
|
||||
use crate::resources::{
|
||||
XrEnvironmentBlendMode, XrFormat, XrFrameState, XrInstance, XrResolution, XrSession,
|
||||
XrSessionRunning, XrSwapchain, XrViews, XrFrameWaiter,
|
||||
OXrSessionSetupInfo, XrEnvironmentBlendMode, XrFormat, XrFrameState, XrFrameWaiter, XrInstance,
|
||||
XrResolution, XrSession, XrSessionRunning, XrSwapchain, XrViews,
|
||||
};
|
||||
|
||||
use openxr as xr;
|
||||
@@ -39,20 +44,15 @@ impl Default for XrAppInfo {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn initialize_xr_graphics(
|
||||
pub fn start_xr_session(
|
||||
window: Option<RawHandleWrapper>,
|
||||
reqeusted_extensions: XrExtensions,
|
||||
prefered_blend_mode: XrPreferdBlendMode,
|
||||
app_info: XrAppInfo,
|
||||
session_setup_data: &OXrSessionSetupInfo,
|
||||
xr_instance: &XrInstance,
|
||||
render_device: &RenderDevice,
|
||||
render_adapter: &RenderAdapter,
|
||||
wgpu_instance: &Instance,
|
||||
) -> eyre::Result<(
|
||||
RenderDevice,
|
||||
RenderQueue,
|
||||
RenderAdapterInfo,
|
||||
RenderAdapter,
|
||||
Instance,
|
||||
XrInstance,
|
||||
XrSession,
|
||||
XrEnvironmentBlendMode,
|
||||
XrResolution,
|
||||
XrFormat,
|
||||
XrSessionRunning,
|
||||
@@ -62,8 +62,107 @@ pub fn initialize_xr_graphics(
|
||||
XrViews,
|
||||
XrFrameState,
|
||||
)> {
|
||||
// vulkan::initialize_xr_graphics(window, reqeusted_extensions, prefered_blend_mode, app_info)
|
||||
todo!()
|
||||
vulkan::start_xr_session(
|
||||
window,
|
||||
session_setup_data,
|
||||
xr_instance,
|
||||
render_device,
|
||||
render_adapter,
|
||||
wgpu_instance,
|
||||
)
|
||||
}
|
||||
pub fn initialize_xr_instance(
|
||||
window: Option<RawHandleWrapper>,
|
||||
reqeusted_extensions: XrExtensions,
|
||||
prefered_blend_mode: XrPreferdBlendMode,
|
||||
app_info: XrAppInfo,
|
||||
) -> eyre::Result<(
|
||||
XrInstance,
|
||||
OXrSessionSetupInfo,
|
||||
XrEnvironmentBlendMode,
|
||||
RenderDevice,
|
||||
RenderQueue,
|
||||
RenderAdapterInfo,
|
||||
RenderAdapter,
|
||||
Instance,
|
||||
)> {
|
||||
vulkan::initialize_xr_instance(window, reqeusted_extensions, prefered_blend_mode, app_info)
|
||||
}
|
||||
|
||||
pub fn try_full_init(
|
||||
world: &mut World,
|
||||
reqeusted_extensions: XrExtensions,
|
||||
prefered_blend_mode: XrPreferdBlendMode,
|
||||
app_info: XrAppInfo,
|
||||
) -> eyre::Result<(
|
||||
RenderDevice,
|
||||
RenderQueue,
|
||||
RenderAdapterInfo,
|
||||
RenderAdapter,
|
||||
RenderInstance,
|
||||
)> {
|
||||
let mut system_state: SystemState<Query<&RawHandleWrapper, With<PrimaryWindow>>> =
|
||||
SystemState::new(world);
|
||||
let primary_window = system_state.get(&world).get_single().ok().cloned();
|
||||
let (
|
||||
xr_instance,
|
||||
setup_info,
|
||||
blend_mode,
|
||||
render_device,
|
||||
render_queue,
|
||||
render_adapter_info,
|
||||
render_adapter,
|
||||
wgpu_instance,
|
||||
) = initialize_xr_instance(
|
||||
primary_window.clone(),
|
||||
reqeusted_extensions,
|
||||
prefered_blend_mode,
|
||||
app_info,
|
||||
)?;
|
||||
world.insert_resource(xr_instance);
|
||||
world.insert_non_send_resource(setup_info);
|
||||
// TODO: move BlendMode the session init?
|
||||
world.insert_resource(blend_mode);
|
||||
let setup_info = world
|
||||
.get_non_send_resource::<OXrSessionSetupInfo>()
|
||||
.unwrap();
|
||||
let xr_instance = world.get_resource::<XrInstance>().unwrap();
|
||||
|
||||
let (
|
||||
xr_session,
|
||||
xr_resolution,
|
||||
xr_format,
|
||||
xr_session_running,
|
||||
xr_frame_waiter,
|
||||
xr_swapchain,
|
||||
xr_input,
|
||||
xr_views,
|
||||
xr_frame_state,
|
||||
) = start_xr_session(
|
||||
primary_window,
|
||||
setup_info,
|
||||
xr_instance,
|
||||
&render_device,
|
||||
&render_adapter,
|
||||
&wgpu_instance,
|
||||
)?;
|
||||
world.insert_resource(xr_session);
|
||||
world.insert_resource(xr_resolution);
|
||||
world.insert_resource(xr_format);
|
||||
world.insert_resource(xr_session_running);
|
||||
world.insert_resource(xr_frame_waiter);
|
||||
world.insert_resource(xr_swapchain);
|
||||
world.insert_resource(xr_input);
|
||||
world.insert_resource(xr_views);
|
||||
world.insert_resource(xr_frame_state);
|
||||
|
||||
Ok((
|
||||
render_device,
|
||||
render_queue,
|
||||
render_adapter_info,
|
||||
render_adapter,
|
||||
RenderInstance(wgpu_instance.into()),
|
||||
))
|
||||
}
|
||||
|
||||
pub fn xr_entry() -> eyre::Result<xr::Entry> {
|
||||
|
||||
@@ -306,7 +306,7 @@ pub fn initialize_xr_instance(
|
||||
))
|
||||
}
|
||||
|
||||
pub fn initialize_xr_graphics(
|
||||
pub fn start_xr_session(
|
||||
window: Option<RawHandleWrapper>,
|
||||
ptrs: &OXrSessionSetupInfo,
|
||||
xr_instance: &XrInstance,
|
||||
@@ -314,7 +314,6 @@ pub fn initialize_xr_graphics(
|
||||
render_adapter: &RenderAdapter,
|
||||
wgpu_instance: &Instance,
|
||||
) -> eyre::Result<(
|
||||
XrInstance,
|
||||
XrSession,
|
||||
XrResolution,
|
||||
XrFormat,
|
||||
@@ -436,7 +435,6 @@ pub fn initialize_xr_graphics(
|
||||
.collect();
|
||||
|
||||
Ok((
|
||||
xr_instance.clone().into(),
|
||||
session.clone().into_any_graphics().into(),
|
||||
resolution.into(),
|
||||
swapchain_format.into(),
|
||||
|
||||
Reference in New Issue
Block a user