allow disabling of pipelined rendering and disable one log in handtracking

This commit is contained in:
Schmarni
2024-02-22 14:43:48 +01:00
parent 1b5598ab0b
commit b183bf72ac
4 changed files with 44 additions and 21 deletions

View File

@@ -46,11 +46,11 @@ pub const LEFT_XR_TEXTURE_HANDLE: ManualTextureViewHandle = ManualTextureViewHan
pub const RIGHT_XR_TEXTURE_HANDLE: ManualTextureViewHandle = ManualTextureViewHandle(3383858418);
/// Adds OpenXR support to an App
#[derive(Default)]
pub struct OpenXrPlugin {
reqeusted_extensions: XrExtensions,
prefered_blend_mode: XrPreferdBlendMode,
app_info: XrAppInfo,
pub reqeusted_extensions: XrExtensions,
pub prefered_blend_mode: XrPreferdBlendMode,
pub app_info: XrAppInfo,
pub enable_pipelined_rendering: bool,
}
impl Plugin for OpenXrPlugin {
@@ -114,6 +114,9 @@ impl Plugin for OpenXrPlugin {
app.add_plugins(RenderPlugin::default());
app.insert_resource(XrStatus::Disabled);
}
if self.enable_pipelined_rendering {
app.insert_resource(DoPipelinedRendering);
}
app.add_systems(XrPostCleanup, clean_resources);
app.add_systems(XrPostCleanup, || info!("Main World Post Cleanup!"));
app.add_systems(
@@ -166,6 +169,9 @@ impl Plugin for OpenXrPlugin {
}
}
#[derive(Resource)]
struct DoPipelinedRendering;
fn clean_resources_render(mut cmds: &mut World) {
// let session = cmds.remove_resource::<XrSession>().unwrap();
cmds.remove_resource::<XrSession>();
@@ -221,16 +227,26 @@ fn xr_skip_frame(
}
}
#[derive(Default)]
pub struct DefaultXrPlugins {
pub reqeusted_extensions: XrExtensions,
pub prefered_blend_mode: XrPreferdBlendMode,
pub app_info: XrAppInfo,
pub enable_pipelined_rendering: bool,
}
impl Default for DefaultXrPlugins {
fn default() -> Self {
Self {
reqeusted_extensions: default(),
prefered_blend_mode: default(),
app_info: default(),
enable_pipelined_rendering: true,
}
}
}
impl PluginGroup for DefaultXrPlugins {
fn build(self) -> PluginGroupBuilder {
DefaultPlugins
let plugins = DefaultPlugins
.build()
.set(TaskPoolPlugin {
task_pool_options: TaskPoolOptions {
@@ -243,12 +259,12 @@ impl PluginGroup for DefaultXrPlugins {
..default()
},
})
// .disable::<PipelinedRenderingPlugin>()
.disable::<RenderPlugin>()
.add_before::<RenderPlugin, _>(OpenXrPlugin {
prefered_blend_mode: self.prefered_blend_mode,
reqeusted_extensions: self.reqeusted_extensions,
app_info: self.app_info.clone(),
enable_pipelined_rendering: self.enable_pipelined_rendering,
})
.add_after::<OpenXrPlugin, _>(XrInitPlugin)
.add(XrInputPlugin)
@@ -276,7 +292,12 @@ impl PluginGroup for DefaultXrPlugins {
#[cfg(target_os = "android")]
close_when_requested: true,
..default()
})
});
if !self.enable_pipelined_rendering {
plugins.disable::<PipelinedRenderingPlugin>()
} else {
plugins
}
}
}
@@ -369,11 +390,13 @@ pub fn xr_wait_frame(
}
};
let should_render = world.get_resource::<XrFrameState>().unwrap().should_render;
let mut frame_state = world.resource_mut::<XrFrameState>();
frame_state.predicted_display_time = xr::Time::from_nanos(
frame_state.predicted_display_time.as_nanos()
+ frame_state.predicted_display_period.as_nanos(),
);
if world.contains_resource::<DoPipelinedRendering>() {
let mut frame_state = world.resource_mut::<XrFrameState>();
frame_state.predicted_display_time = xr::Time::from_nanos(
frame_state.predicted_display_time.as_nanos()
+ frame_state.predicted_display_period.as_nanos(),
);
}
**world.get_resource_mut::<XrShouldRender>().unwrap() = should_render;
**world.get_resource_mut::<XrHasWaited>().unwrap() = true;
}

View File

@@ -176,9 +176,9 @@ pub fn update_hand_bones(
};
let left_hand_data = hand_ref.get_poses(Hand::Left);
let right_hand_data = hand_ref.get_poses(Hand::Right);
if left_hand_data.is_none() || right_hand_data.is_none() {
error!("something is very wrong for hand_tracking!! doesn't have data for both hands!");
}
// if left_hand_data.is_none() || right_hand_data.is_none() {
// error!("something is very wrong for hand_tracking!! doesn't have data for both hands!");
// }
bones
.par_iter_mut()