allow disabling of pipelined rendering and disable one log in handtracking
This commit is contained in:
@@ -5,7 +5,6 @@ use bevy_oxr::graphics::extensions::XrExtensions;
|
|||||||
use bevy_oxr::graphics::XrAppInfo;
|
use bevy_oxr::graphics::XrAppInfo;
|
||||||
use bevy_oxr::passthrough::{PausePassthrough, ResumePassthrough, XrPassthroughState};
|
use bevy_oxr::passthrough::{PausePassthrough, ResumePassthrough, XrPassthroughState};
|
||||||
use bevy_oxr::xr_init::xr_only;
|
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::common::HandInputDebugRenderer;
|
||||||
use bevy_oxr::xr_input::hands::HandBone;
|
use bevy_oxr::xr_input::hands::HandBone;
|
||||||
use bevy_oxr::xr_input::prototype_locomotion::{proto_locomotion, PrototypeLocomotionConfig};
|
use bevy_oxr::xr_input::prototype_locomotion::{proto_locomotion, PrototypeLocomotionConfig};
|
||||||
@@ -17,7 +16,7 @@ use bevy_oxr::DefaultXrPlugins;
|
|||||||
#[bevy_main]
|
#[bevy_main]
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut xr_extensions = XrExtensions::default();
|
let mut xr_extensions = XrExtensions::default();
|
||||||
// xr_extensions.enable_fb_passthrough();
|
xr_extensions.enable_fb_passthrough();
|
||||||
xr_extensions.enable_hand_tracking();
|
xr_extensions.enable_hand_tracking();
|
||||||
App::new()
|
App::new()
|
||||||
.add_plugins(DefaultXrPlugins {
|
.add_plugins(DefaultXrPlugins {
|
||||||
@@ -25,13 +24,14 @@ fn main() {
|
|||||||
app_info: XrAppInfo {
|
app_info: XrAppInfo {
|
||||||
name: "Bevy OXR Android Example".into(),
|
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(OpenXrDebugRenderer)
|
||||||
.add_plugins(LogDiagnosticsPlugin::default())
|
.add_plugins(LogDiagnosticsPlugin::default())
|
||||||
.add_plugins(FrameTimeDiagnosticsPlugin)
|
.add_plugins(FrameTimeDiagnosticsPlugin)
|
||||||
.add_plugins(HandInputDebugRenderer)
|
.add_plugins(HandInputDebugRenderer)
|
||||||
// .add_plugins(bevy_oxr::passthrough::EnablePassthroughStartup)
|
.add_plugins(bevy_oxr::passthrough::EnablePassthroughStartup)
|
||||||
.add_systems(Startup, setup)
|
.add_systems(Startup, setup)
|
||||||
.add_systems(
|
.add_systems(
|
||||||
Update,
|
Update,
|
||||||
|
|||||||
@@ -76,10 +76,10 @@ pub fn main() {
|
|||||||
//lets get the xr defaults added
|
//lets get the xr defaults added
|
||||||
.add_plugins(DefaultXrPlugins {
|
.add_plugins(DefaultXrPlugins {
|
||||||
reqeusted_extensions: xr_extensions,
|
reqeusted_extensions: xr_extensions,
|
||||||
prefered_blend_mode: XrPreferdBlendMode::Opaque,
|
|
||||||
app_info: XrAppInfo {
|
app_info: XrAppInfo {
|
||||||
name: "Bevy OXR Demo".into(),
|
name: "Bevy OXR Demo".into(),
|
||||||
},
|
},
|
||||||
|
..Default::default()
|
||||||
})
|
})
|
||||||
//lets add the debug renderer for the controllers
|
//lets add the debug renderer for the controllers
|
||||||
.add_plugins(OpenXrDebugRenderer)
|
.add_plugins(OpenXrDebugRenderer)
|
||||||
|
|||||||
49
src/lib.rs
49
src/lib.rs
@@ -46,11 +46,11 @@ pub const LEFT_XR_TEXTURE_HANDLE: ManualTextureViewHandle = ManualTextureViewHan
|
|||||||
pub const RIGHT_XR_TEXTURE_HANDLE: ManualTextureViewHandle = ManualTextureViewHandle(3383858418);
|
pub const RIGHT_XR_TEXTURE_HANDLE: ManualTextureViewHandle = ManualTextureViewHandle(3383858418);
|
||||||
|
|
||||||
/// Adds OpenXR support to an App
|
/// Adds OpenXR support to an App
|
||||||
#[derive(Default)]
|
|
||||||
pub struct OpenXrPlugin {
|
pub struct OpenXrPlugin {
|
||||||
reqeusted_extensions: XrExtensions,
|
pub reqeusted_extensions: XrExtensions,
|
||||||
prefered_blend_mode: XrPreferdBlendMode,
|
pub prefered_blend_mode: XrPreferdBlendMode,
|
||||||
app_info: XrAppInfo,
|
pub app_info: XrAppInfo,
|
||||||
|
pub enable_pipelined_rendering: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Plugin for OpenXrPlugin {
|
impl Plugin for OpenXrPlugin {
|
||||||
@@ -114,6 +114,9 @@ impl Plugin for OpenXrPlugin {
|
|||||||
app.add_plugins(RenderPlugin::default());
|
app.add_plugins(RenderPlugin::default());
|
||||||
app.insert_resource(XrStatus::Disabled);
|
app.insert_resource(XrStatus::Disabled);
|
||||||
}
|
}
|
||||||
|
if self.enable_pipelined_rendering {
|
||||||
|
app.insert_resource(DoPipelinedRendering);
|
||||||
|
}
|
||||||
app.add_systems(XrPostCleanup, clean_resources);
|
app.add_systems(XrPostCleanup, clean_resources);
|
||||||
app.add_systems(XrPostCleanup, || info!("Main World Post Cleanup!"));
|
app.add_systems(XrPostCleanup, || info!("Main World Post Cleanup!"));
|
||||||
app.add_systems(
|
app.add_systems(
|
||||||
@@ -166,6 +169,9 @@ impl Plugin for OpenXrPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Resource)]
|
||||||
|
struct DoPipelinedRendering;
|
||||||
|
|
||||||
fn clean_resources_render(mut cmds: &mut World) {
|
fn clean_resources_render(mut cmds: &mut World) {
|
||||||
// let session = cmds.remove_resource::<XrSession>().unwrap();
|
// let session = cmds.remove_resource::<XrSession>().unwrap();
|
||||||
cmds.remove_resource::<XrSession>();
|
cmds.remove_resource::<XrSession>();
|
||||||
@@ -221,16 +227,26 @@ fn xr_skip_frame(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
|
||||||
pub struct DefaultXrPlugins {
|
pub struct DefaultXrPlugins {
|
||||||
pub reqeusted_extensions: XrExtensions,
|
pub reqeusted_extensions: XrExtensions,
|
||||||
pub prefered_blend_mode: XrPreferdBlendMode,
|
pub prefered_blend_mode: XrPreferdBlendMode,
|
||||||
pub app_info: XrAppInfo,
|
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 {
|
impl PluginGroup for DefaultXrPlugins {
|
||||||
fn build(self) -> PluginGroupBuilder {
|
fn build(self) -> PluginGroupBuilder {
|
||||||
DefaultPlugins
|
let plugins = DefaultPlugins
|
||||||
.build()
|
.build()
|
||||||
.set(TaskPoolPlugin {
|
.set(TaskPoolPlugin {
|
||||||
task_pool_options: TaskPoolOptions {
|
task_pool_options: TaskPoolOptions {
|
||||||
@@ -243,12 +259,12 @@ impl PluginGroup for DefaultXrPlugins {
|
|||||||
..default()
|
..default()
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
// .disable::<PipelinedRenderingPlugin>()
|
|
||||||
.disable::<RenderPlugin>()
|
.disable::<RenderPlugin>()
|
||||||
.add_before::<RenderPlugin, _>(OpenXrPlugin {
|
.add_before::<RenderPlugin, _>(OpenXrPlugin {
|
||||||
prefered_blend_mode: self.prefered_blend_mode,
|
prefered_blend_mode: self.prefered_blend_mode,
|
||||||
reqeusted_extensions: self.reqeusted_extensions,
|
reqeusted_extensions: self.reqeusted_extensions,
|
||||||
app_info: self.app_info.clone(),
|
app_info: self.app_info.clone(),
|
||||||
|
enable_pipelined_rendering: self.enable_pipelined_rendering,
|
||||||
})
|
})
|
||||||
.add_after::<OpenXrPlugin, _>(XrInitPlugin)
|
.add_after::<OpenXrPlugin, _>(XrInitPlugin)
|
||||||
.add(XrInputPlugin)
|
.add(XrInputPlugin)
|
||||||
@@ -276,7 +292,12 @@ impl PluginGroup for DefaultXrPlugins {
|
|||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
close_when_requested: true,
|
close_when_requested: true,
|
||||||
..default()
|
..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 should_render = world.get_resource::<XrFrameState>().unwrap().should_render;
|
||||||
let mut frame_state = world.resource_mut::<XrFrameState>();
|
if world.contains_resource::<DoPipelinedRendering>() {
|
||||||
frame_state.predicted_display_time = xr::Time::from_nanos(
|
let mut frame_state = world.resource_mut::<XrFrameState>();
|
||||||
frame_state.predicted_display_time.as_nanos()
|
frame_state.predicted_display_time = xr::Time::from_nanos(
|
||||||
+ frame_state.predicted_display_period.as_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::<XrShouldRender>().unwrap() = should_render;
|
||||||
**world.get_resource_mut::<XrHasWaited>().unwrap() = true;
|
**world.get_resource_mut::<XrHasWaited>().unwrap() = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -176,9 +176,9 @@ pub fn update_hand_bones(
|
|||||||
};
|
};
|
||||||
let left_hand_data = hand_ref.get_poses(Hand::Left);
|
let left_hand_data = hand_ref.get_poses(Hand::Left);
|
||||||
let right_hand_data = hand_ref.get_poses(Hand::Right);
|
let right_hand_data = hand_ref.get_poses(Hand::Right);
|
||||||
if left_hand_data.is_none() || right_hand_data.is_none() {
|
// 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!");
|
// error!("something is very wrong for hand_tracking!! doesn't have data for both hands!");
|
||||||
}
|
// }
|
||||||
|
|
||||||
bones
|
bones
|
||||||
.par_iter_mut()
|
.par_iter_mut()
|
||||||
|
|||||||
Reference in New Issue
Block a user