Merge pull request #4 from awtterpip/new_resource_init
maybe fixed frame timing??
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
use bevy::core_pipeline::core_3d;
|
use bevy::core_pipeline::core_3d;
|
||||||
use bevy::core_pipeline::tonemapping::{DebandDither, Tonemapping};
|
use bevy::core_pipeline::tonemapping::{DebandDither, Tonemapping};
|
||||||
|
use bevy::diagnostic::{LogDiagnosticsPlugin, FrameTimeDiagnosticsPlugin};
|
||||||
use bevy::ecs::prelude::{Bundle, Component, ReflectComponent};
|
use bevy::ecs::prelude::{Bundle, Component, ReflectComponent};
|
||||||
|
|
||||||
use bevy::math::Mat4;
|
use bevy::math::Mat4;
|
||||||
@@ -34,6 +35,8 @@ fn main() {
|
|||||||
App::new()
|
App::new()
|
||||||
.add_plugins(DefaultXrPlugins)
|
.add_plugins(DefaultXrPlugins)
|
||||||
.add_plugins(OpenXrInput::new(XrControllerType::OculusTouch))
|
.add_plugins(OpenXrInput::new(XrControllerType::OculusTouch))
|
||||||
|
.add_plugins(LogDiagnosticsPlugin::default())
|
||||||
|
.add_plugins(FrameTimeDiagnosticsPlugin::default())
|
||||||
.add_systems(Startup, setup)
|
.add_systems(Startup, setup)
|
||||||
.add_systems(Update, hands)
|
.add_systems(Update, hands)
|
||||||
.run();
|
.run();
|
||||||
|
|||||||
51
src/lib.rs
51
src/lib.rs
@@ -157,25 +157,11 @@ impl Plugin for OpenXrPlugin {
|
|||||||
size: *resolution,
|
size: *resolution,
|
||||||
format: *format,
|
format: *format,
|
||||||
};
|
};
|
||||||
|
app.add_systems(PreUpdate, xr_begin_frame);
|
||||||
let mut manual_texture_views = app.world.resource_mut::<ManualTextureViews>();
|
let mut manual_texture_views = app.world.resource_mut::<ManualTextureViews>();
|
||||||
manual_texture_views.insert(LEFT_XR_TEXTURE_HANDLE, left);
|
manual_texture_views.insert(LEFT_XR_TEXTURE_HANDLE, left);
|
||||||
manual_texture_views.insert(RIGHT_XR_TEXTURE_HANDLE, right);
|
manual_texture_views.insert(RIGHT_XR_TEXTURE_HANDLE, right);
|
||||||
drop(manual_texture_views);
|
drop(manual_texture_views);
|
||||||
let pipeline_app = app.sub_app_mut(RenderExtractApp);
|
|
||||||
pipeline_app
|
|
||||||
.insert_resource(xr_instance.clone())
|
|
||||||
.insert_resource(session.clone())
|
|
||||||
.insert_resource(blend_mode.clone())
|
|
||||||
.insert_resource(resolution.clone())
|
|
||||||
.insert_resource(format.clone())
|
|
||||||
.insert_resource(session_running.clone())
|
|
||||||
.insert_resource(frame_waiter.clone())
|
|
||||||
.insert_resource(swapchain.clone())
|
|
||||||
.insert_resource(input.clone())
|
|
||||||
.insert_resource(views.clone())
|
|
||||||
.insert_resource(frame_state.clone())
|
|
||||||
.insert_resource(action_sets.clone());
|
|
||||||
drop(pipeline_app);
|
|
||||||
let render_app = app.sub_app_mut(RenderApp);
|
let render_app = app.sub_app_mut(RenderApp);
|
||||||
|
|
||||||
render_app
|
render_app
|
||||||
@@ -195,8 +181,9 @@ impl Plugin for OpenXrPlugin {
|
|||||||
render_app.add_systems(
|
render_app.add_systems(
|
||||||
Render,
|
Render,
|
||||||
(
|
(
|
||||||
begin_frame.before(render_system).after(RenderSet::ExtractCommands),
|
post_frame
|
||||||
locate_views.before(render_system),
|
.before(render_system)
|
||||||
|
.after(RenderSet::ExtractCommands),
|
||||||
end_frame.after(render_system),
|
end_frame.after(render_system),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -214,16 +201,15 @@ impl PluginGroup for DefaultXrPlugins {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn begin_frame(
|
pub fn xr_begin_frame(
|
||||||
instance: Res<XrInstance>,
|
instance: Res<XrInstance>,
|
||||||
session: Res<XrSession>,
|
session: Res<XrSession>,
|
||||||
session_running: Res<XrSessionRunning>,
|
session_running: Res<XrSessionRunning>,
|
||||||
resolution: Res<XrResolution>,
|
|
||||||
format: Res<XrFormat>,
|
|
||||||
swapchain: Res<XrSwapchain>,
|
|
||||||
frame_waiter: Res<XrFrameWaiter>,
|
|
||||||
frame_state: Res<XrFrameState>,
|
frame_state: Res<XrFrameState>,
|
||||||
mut manual_texture_views: ResMut<ManualTextureViews>,
|
frame_waiter: Res<XrFrameWaiter>,
|
||||||
|
swapchain: Res<XrSwapchain>,
|
||||||
|
views: Res<XrViews>,
|
||||||
|
input: Res<XrInput>,
|
||||||
) {
|
) {
|
||||||
{
|
{
|
||||||
let _span = info_span!("xr_poll_events");
|
let _span = info_span!("xr_poll_events");
|
||||||
@@ -263,6 +249,25 @@ pub fn begin_frame(
|
|||||||
let _span = info_span!("xr_begin_frame").entered();
|
let _span = info_span!("xr_begin_frame").entered();
|
||||||
swapchain.begin().unwrap()
|
swapchain.begin().unwrap()
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
let _span = info_span!("xr_locate_views").entered();
|
||||||
|
*views.lock().unwrap() = session
|
||||||
|
.locate_views(
|
||||||
|
VIEW_TYPE,
|
||||||
|
frame_state.lock().unwrap().predicted_display_time,
|
||||||
|
&input.stage,
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn post_frame(
|
||||||
|
resolution: Res<XrResolution>,
|
||||||
|
format: Res<XrFormat>,
|
||||||
|
swapchain: Res<XrSwapchain>,
|
||||||
|
mut manual_texture_views: ResMut<ManualTextureViews>,
|
||||||
|
) {
|
||||||
{
|
{
|
||||||
let _span = info_span!("xr_acquire_image").entered();
|
let _span = info_span!("xr_acquire_image").entered();
|
||||||
swapchain.acquire_image().unwrap()
|
swapchain.acquire_image().unwrap()
|
||||||
|
|||||||
Reference in New Issue
Block a user