fix android warning
This commit is contained in:
@@ -41,6 +41,10 @@ openxr = { git = "https://github.com/Ralith/openxrs", rev = "0177d2d", features
|
|||||||
"static",
|
"static",
|
||||||
] }
|
] }
|
||||||
|
|
||||||
|
[target.'cfg(target_os = "android")'.dependencies]
|
||||||
|
ndk-context = "0.1"
|
||||||
|
jni = "0.20"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
bevy = "0.12"
|
bevy = "0.12"
|
||||||
bevy_rapier3d = { git = "https://github.com/devil-ira/bevy_rapier", branch = "bevy-0.12" }
|
bevy_rapier3d = { git = "https://github.com/devil-ira/bevy_rapier", branch = "bevy-0.12" }
|
||||||
|
|||||||
55
src/lib.rs
55
src/lib.rs
@@ -6,6 +6,7 @@ pub mod resources;
|
|||||||
pub mod xr_init;
|
pub mod xr_init;
|
||||||
pub mod xr_input;
|
pub mod xr_input;
|
||||||
|
|
||||||
|
use std::sync::atomic::AtomicBool;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
use crate::xr_init::RenderRestartPlugin;
|
use crate::xr_init::RenderRestartPlugin;
|
||||||
@@ -70,6 +71,13 @@ pub struct FutureXrResources(
|
|||||||
|
|
||||||
impl Plugin for OpenXrPlugin {
|
impl Plugin for OpenXrPlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
|
app.insert_resource(XrSessionRunning::new(AtomicBool::new(false)));
|
||||||
|
// #[cfg(target_os = "android")]
|
||||||
|
// {
|
||||||
|
// let ctx = ndk_context::android_context();
|
||||||
|
// let vm = unsafe { jni::JavaVM::from_raw(ctx.vm().cast()) }.unwrap();
|
||||||
|
// let env = vm.attach_current_thread_permanently();
|
||||||
|
// }
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
match graphics::try_full_init(
|
match graphics::try_full_init(
|
||||||
&mut app.world,
|
&mut app.world,
|
||||||
@@ -91,8 +99,7 @@ impl Plugin for OpenXrPlugin {
|
|||||||
instance,
|
instance,
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
app.add_plugins(ExtractResourcePlugin::<XrEnableStatus>::default());
|
app.insert_resource(XrEnableStatus::Disabled);
|
||||||
app.insert_resource(XrEnableStatus::Enabled);
|
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
warn!("OpenXR Failed to initialize: {}", err);
|
warn!("OpenXR Failed to initialize: {}", err);
|
||||||
@@ -107,11 +114,17 @@ impl Plugin for OpenXrPlugin {
|
|||||||
app.add_plugins(RenderPlugin::default());
|
app.add_plugins(RenderPlugin::default());
|
||||||
app.insert_resource(XrEnableStatus::Disabled);
|
app.insert_resource(XrEnableStatus::Disabled);
|
||||||
}
|
}
|
||||||
|
app.add_plugins(ExtractResourcePlugin::<XrEnableStatus>::default());
|
||||||
|
app.add_systems(
|
||||||
|
PreUpdate,
|
||||||
|
(xr_poll_events, xr_begin_frame.run_if(xr_only())).chain(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn finish(&self, app: &mut App) {
|
fn finish(&self, app: &mut App) {
|
||||||
// TODO: Split this up into the indevidual resources
|
// TODO: Split this up into the indevidual resources
|
||||||
if app.world.get_resource::<XrEnableStatus>() == Some(&XrEnableStatus::Enabled) {
|
// app.world.get_resource::<XrEnableStatus>() == Some(&XrEnableStatus::Enabled)
|
||||||
|
if true {
|
||||||
warn!("finished xr init");
|
warn!("finished xr init");
|
||||||
let xr_instance = app
|
let xr_instance = app
|
||||||
.world
|
.world
|
||||||
@@ -152,7 +165,6 @@ impl Plugin for OpenXrPlugin {
|
|||||||
size: **xr_resolution,
|
size: **xr_resolution,
|
||||||
format: **xr_format,
|
format: **xr_format,
|
||||||
};
|
};
|
||||||
app.add_systems(PreUpdate, xr_begin_frame.run_if(xr_only()));
|
|
||||||
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);
|
||||||
@@ -215,18 +227,13 @@ impl PluginGroup for DefaultXrPlugins {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn xr_begin_frame(
|
pub fn xr_poll_events(
|
||||||
instance: Res<XrInstance>,
|
instance: Option<Res<XrInstance>>,
|
||||||
session: Res<XrSession>,
|
session: Option<Res<XrSession>>,
|
||||||
session_running: Res<XrSessionRunning>,
|
session_running: Res<XrSessionRunning>,
|
||||||
mut frame_state: ResMut<XrFrameState>,
|
|
||||||
mut frame_waiter: ResMut<XrFrameWaiter>,
|
|
||||||
swapchain: Res<XrSwapchain>,
|
|
||||||
mut views: ResMut<XrViews>,
|
|
||||||
input: Res<XrInput>,
|
|
||||||
mut app_exit: EventWriter<AppExit>,
|
mut app_exit: EventWriter<AppExit>,
|
||||||
) {
|
) {
|
||||||
{
|
if let (Some(instance), Some(session)) = (instance, session) {
|
||||||
let _span = info_span!("xr_poll_events");
|
let _span = info_span!("xr_poll_events");
|
||||||
while let Some(event) = instance.poll_event(&mut Default::default()).unwrap() {
|
while let Some(event) = instance.poll_event(&mut Default::default()).unwrap() {
|
||||||
use xr::Event::*;
|
use xr::Event::*;
|
||||||
@@ -237,6 +244,7 @@ pub fn xr_begin_frame(
|
|||||||
info!("entered XR state {:?}", e.state());
|
info!("entered XR state {:?}", e.state());
|
||||||
match e.state() {
|
match e.state() {
|
||||||
xr::SessionState::READY => {
|
xr::SessionState::READY => {
|
||||||
|
info!("Calling Session begin :3");
|
||||||
session.begin(VIEW_TYPE).unwrap();
|
session.begin(VIEW_TYPE).unwrap();
|
||||||
session_running.store(true, std::sync::atomic::Ordering::Relaxed);
|
session_running.store(true, std::sync::atomic::Ordering::Relaxed);
|
||||||
}
|
}
|
||||||
@@ -260,6 +268,16 @@ pub fn xr_begin_frame(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn xr_begin_frame(
|
||||||
|
session: Res<XrSession>,
|
||||||
|
mut frame_state: ResMut<XrFrameState>,
|
||||||
|
mut frame_waiter: ResMut<XrFrameWaiter>,
|
||||||
|
swapchain: Res<XrSwapchain>,
|
||||||
|
mut views: ResMut<XrViews>,
|
||||||
|
input: Res<XrInput>,
|
||||||
|
) {
|
||||||
{
|
{
|
||||||
let _span = info_span!("xr_wait_frame").entered();
|
let _span = info_span!("xr_wait_frame").entered();
|
||||||
*frame_state = match frame_waiter.wait() {
|
*frame_state = match frame_waiter.wait() {
|
||||||
@@ -322,6 +340,8 @@ pub fn end_frame(
|
|||||||
swapchain: Option<Res<XrSwapchain>>,
|
swapchain: Option<Res<XrSwapchain>>,
|
||||||
resolution: Option<Res<XrResolution>>,
|
resolution: Option<Res<XrResolution>>,
|
||||||
environment_blend_mode: Option<Res<XrEnvironmentBlendMode>>,
|
environment_blend_mode: Option<Res<XrEnvironmentBlendMode>>,
|
||||||
|
// _main_thread: NonSend<()>,
|
||||||
|
#[cfg(target_os = "android")] mut attached: Local<bool>,
|
||||||
// passthrough_layer: Option<Res<XrPassthroughLayer>>,
|
// passthrough_layer: Option<Res<XrPassthroughLayer>>,
|
||||||
) {
|
) {
|
||||||
let xr_frame_state = xr_frame_state.unwrap();
|
let xr_frame_state = xr_frame_state.unwrap();
|
||||||
@@ -330,6 +350,15 @@ pub fn end_frame(
|
|||||||
let swapchain = swapchain.unwrap();
|
let swapchain = swapchain.unwrap();
|
||||||
let resolution = resolution.unwrap();
|
let resolution = resolution.unwrap();
|
||||||
let environment_blend_mode = environment_blend_mode.unwrap();
|
let environment_blend_mode = environment_blend_mode.unwrap();
|
||||||
|
|
||||||
|
#[cfg(target_os = "android")]
|
||||||
|
// if !*attached {
|
||||||
|
{
|
||||||
|
let ctx = ndk_context::android_context();
|
||||||
|
let vm = unsafe { jni::JavaVM::from_raw(ctx.vm().cast()) }.unwrap();
|
||||||
|
let env = vm.attach_current_thread_as_daemon();
|
||||||
|
*attached = true;
|
||||||
|
}
|
||||||
{
|
{
|
||||||
let _span = info_span!("xr_release_image").entered();
|
let _span = info_span!("xr_release_image").entered();
|
||||||
swapchain.release_image().unwrap();
|
swapchain.release_image().unwrap();
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ impl Plugin for XrResourcePlugin {
|
|||||||
app.add_plugins(ExtractResourcePlugin::<XrViews>::default());
|
app.add_plugins(ExtractResourcePlugin::<XrViews>::default());
|
||||||
app.add_plugins(ExtractResourcePlugin::<XrInput>::default());
|
app.add_plugins(ExtractResourcePlugin::<XrInput>::default());
|
||||||
app.add_plugins(ExtractResourcePlugin::<XrEnvironmentBlendMode>::default());
|
app.add_plugins(ExtractResourcePlugin::<XrEnvironmentBlendMode>::default());
|
||||||
|
app.add_plugins(ExtractResourcePlugin::<XrSessionRunning>::default());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,7 +219,8 @@ impl<G: xr::Graphics> SwapchainInner<G> {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
// None =>
|
// None =>
|
||||||
self.stream.lock().unwrap().end(
|
info!("swapchain stream lock");
|
||||||
|
let r = self.stream.lock().unwrap().end(
|
||||||
predicted_display_time,
|
predicted_display_time,
|
||||||
environment_blend_mode,
|
environment_blend_mode,
|
||||||
&[&xr::CompositionLayerProjection::new().space(stage).views(&[
|
&[&xr::CompositionLayerProjection::new().space(stage).views(&[
|
||||||
@@ -241,7 +243,9 @@ impl<G: xr::Graphics> SwapchainInner<G> {
|
|||||||
.image_rect(rect),
|
.image_rect(rect),
|
||||||
),
|
),
|
||||||
])],
|
])],
|
||||||
)
|
);
|
||||||
|
info!("swapchain stream done");
|
||||||
|
r
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,7 +114,14 @@ impl Plugin for RenderRestartPlugin {
|
|||||||
.add_event::<XrEnableStatus>()
|
.add_event::<XrEnableStatus>()
|
||||||
.add_event::<StartXrSession>()
|
.add_event::<StartXrSession>()
|
||||||
.add_event::<EndXrSession>()
|
.add_event::<EndXrSession>()
|
||||||
.add_systems(PostStartup, setup_xr.run_if(xr_only()))
|
.add_systems(
|
||||||
|
PreUpdate,
|
||||||
|
setup_xr
|
||||||
|
.run_if(|running: Res<XrSessionRunning>| {
|
||||||
|
running.load(std::sync::atomic::Ordering::Relaxed)
|
||||||
|
})
|
||||||
|
.run_if(run_once()),
|
||||||
|
)
|
||||||
.add_systems(
|
.add_systems(
|
||||||
PostUpdate,
|
PostUpdate,
|
||||||
update_xr_stuff.run_if(on_event::<XrEnableRequest>()),
|
update_xr_stuff.run_if(on_event::<XrEnableRequest>()),
|
||||||
@@ -132,8 +139,14 @@ impl Plugin for RenderRestartPlugin {
|
|||||||
.chain(),
|
.chain(),
|
||||||
)
|
)
|
||||||
.add_systems(XrCleanup, cleanup_oxr_session);
|
.add_systems(XrCleanup, cleanup_oxr_session);
|
||||||
app.add_systems(PostUpdate, start_xr_session.run_if(on_event::<StartXrSession>()));
|
app.add_systems(
|
||||||
app.add_systems(PostUpdate, stop_xr_session.run_if(on_event::<EndXrSession>()));
|
PostUpdate,
|
||||||
|
start_xr_session.run_if(on_event::<StartXrSession>()),
|
||||||
|
);
|
||||||
|
app.add_systems(
|
||||||
|
PostUpdate,
|
||||||
|
stop_xr_session.run_if(on_event::<EndXrSession>()),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,6 +175,8 @@ fn add_schedules(app: &mut App) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn setup_xr(world: &mut World) {
|
pub fn setup_xr(world: &mut World) {
|
||||||
|
info!("running setup schedule :3");
|
||||||
|
world.insert_resource(XrEnableStatus::Enabled);
|
||||||
world.run_schedule(XrPreSetup);
|
world.run_schedule(XrPreSetup);
|
||||||
world.run_schedule(XrSetup);
|
world.run_schedule(XrSetup);
|
||||||
world.run_schedule(XrPrePostSetup);
|
world.run_schedule(XrPrePostSetup);
|
||||||
|
|||||||
Reference in New Issue
Block a user