maybe fixed frame timing??
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
use bevy::core_pipeline::core_3d;
|
||||
use bevy::core_pipeline::tonemapping::{DebandDither, Tonemapping};
|
||||
use bevy::diagnostic::{LogDiagnosticsPlugin, FrameTimeDiagnosticsPlugin};
|
||||
use bevy::ecs::prelude::{Bundle, Component, ReflectComponent};
|
||||
|
||||
use bevy::math::Mat4;
|
||||
@@ -34,6 +35,8 @@ fn main() {
|
||||
App::new()
|
||||
.add_plugins(DefaultXrPlugins)
|
||||
.add_plugins(OpenXrInput::new(XrControllerType::OculusTouch))
|
||||
.add_plugins(LogDiagnosticsPlugin::default())
|
||||
.add_plugins(FrameTimeDiagnosticsPlugin::default())
|
||||
.add_systems(Startup, setup)
|
||||
.add_systems(Update, hands)
|
||||
.run();
|
||||
|
||||
51
src/lib.rs
51
src/lib.rs
@@ -157,25 +157,11 @@ impl Plugin for OpenXrPlugin {
|
||||
size: *resolution,
|
||||
format: *format,
|
||||
};
|
||||
app.add_systems(PreUpdate, xr_begin_frame);
|
||||
let mut manual_texture_views = app.world.resource_mut::<ManualTextureViews>();
|
||||
manual_texture_views.insert(LEFT_XR_TEXTURE_HANDLE, left);
|
||||
manual_texture_views.insert(RIGHT_XR_TEXTURE_HANDLE, right);
|
||||
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);
|
||||
|
||||
render_app
|
||||
@@ -195,8 +181,9 @@ impl Plugin for OpenXrPlugin {
|
||||
render_app.add_systems(
|
||||
Render,
|
||||
(
|
||||
begin_frame.before(render_system).after(RenderSet::ExtractCommands),
|
||||
locate_views.before(render_system),
|
||||
post_frame
|
||||
.before(render_system)
|
||||
.after(RenderSet::ExtractCommands),
|
||||
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>,
|
||||
session: Res<XrSession>,
|
||||
session_running: Res<XrSessionRunning>,
|
||||
resolution: Res<XrResolution>,
|
||||
format: Res<XrFormat>,
|
||||
swapchain: Res<XrSwapchain>,
|
||||
frame_waiter: Res<XrFrameWaiter>,
|
||||
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");
|
||||
@@ -263,6 +249,25 @@ pub fn begin_frame(
|
||||
let _span = info_span!("xr_begin_frame").entered();
|
||||
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();
|
||||
swapchain.acquire_image().unwrap()
|
||||
|
||||
@@ -59,7 +59,7 @@ fn action_set_system(action_sets: Res<ActionSets>, session: Res<XrSession>) {
|
||||
for i in &action_sets.0 {
|
||||
active_action_sets.push(openxr::ActiveActionSet::new(i));
|
||||
}
|
||||
info!("action sets: {:#?}", action_sets.0.len());
|
||||
//info!("action sets: {:#?}", action_sets.0.len());
|
||||
match session.sync_actions(&active_action_sets) {
|
||||
Err(err) => {
|
||||
warn!("{}", err);
|
||||
|
||||
Reference in New Issue
Block a user