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

@@ -5,7 +5,6 @@ use bevy_oxr::graphics::extensions::XrExtensions;
use bevy_oxr::graphics::XrAppInfo;
use bevy_oxr::passthrough::{PausePassthrough, ResumePassthrough, XrPassthroughState};
use bevy_oxr::xr_init::xr_only;
use bevy_oxr::xr_input::debug_gizmos::OpenXrDebugRenderer;
use bevy_oxr::xr_input::hands::common::HandInputDebugRenderer;
use bevy_oxr::xr_input::hands::HandBone;
use bevy_oxr::xr_input::prototype_locomotion::{proto_locomotion, PrototypeLocomotionConfig};
@@ -17,7 +16,7 @@ use bevy_oxr::DefaultXrPlugins;
#[bevy_main]
fn main() {
let mut xr_extensions = XrExtensions::default();
// xr_extensions.enable_fb_passthrough();
xr_extensions.enable_fb_passthrough();
xr_extensions.enable_hand_tracking();
App::new()
.add_plugins(DefaultXrPlugins {
@@ -25,13 +24,14 @@ fn main() {
app_info: XrAppInfo {
name: "Bevy OXR Android Example".into(),
},
prefered_blend_mode: bevy_oxr::graphics::XrPreferdBlendMode::Opaque,
enable_pipelined_rendering: false,
..Default::default()
})
// .add_plugins(OpenXrDebugRenderer)
.add_plugins(LogDiagnosticsPlugin::default())
.add_plugins(FrameTimeDiagnosticsPlugin)
.add_plugins(HandInputDebugRenderer)
// .add_plugins(bevy_oxr::passthrough::EnablePassthroughStartup)
.add_plugins(bevy_oxr::passthrough::EnablePassthroughStartup)
.add_systems(Startup, setup)
.add_systems(
Update,

View File

@@ -76,10 +76,10 @@ pub fn main() {
//lets get the xr defaults added
.add_plugins(DefaultXrPlugins {
reqeusted_extensions: xr_extensions,
prefered_blend_mode: XrPreferdBlendMode::Opaque,
app_info: XrAppInfo {
name: "Bevy OXR Demo".into(),
},
..Default::default()
})
//lets add the debug renderer for the controllers
.add_plugins(OpenXrDebugRenderer)

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()