works on quest broken on wivrn

This commit is contained in:
Schmarni
2024-01-24 00:28:53 +01:00
parent db5539cfd9
commit bc1985eedd

View File

@@ -8,7 +8,6 @@ pub mod xr_input;
use std::fs::File; use std::fs::File;
use std::io::{BufWriter, Write}; use std::io::{BufWriter, Write};
use std::net::TcpStream;
use std::sync::atomic::AtomicBool; use std::sync::atomic::AtomicBool;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
@@ -21,9 +20,10 @@ use bevy::prelude::*;
use bevy::render::camera::{ManualTextureView, ManualTextureViewHandle, ManualTextureViews}; use bevy::render::camera::{ManualTextureView, ManualTextureViewHandle, ManualTextureViews};
use bevy::render::extract_resource::ExtractResourcePlugin; use bevy::render::extract_resource::ExtractResourcePlugin;
use bevy::render::pipelined_rendering::PipelinedRenderingPlugin; use bevy::render::pipelined_rendering::PipelinedRenderingPlugin;
use bevy::render::renderer::RenderInstance; use bevy::render::renderer::{render_system, RenderInstance};
use bevy::render::settings::RenderCreation; use bevy::render::settings::RenderCreation;
use bevy::render::{Render, RenderApp, RenderPlugin, RenderSet}; use bevy::render::{Render, RenderApp, RenderPlugin, RenderSet};
use bevy::transform::systems::{propagate_transforms, sync_simple_transforms};
use bevy::window::{PresentMode, PrimaryWindow, RawHandleWrapper}; use bevy::window::{PresentMode, PrimaryWindow, RawHandleWrapper};
use graphics::extensions::XrExtensions; use graphics::extensions::XrExtensions;
use graphics::{XrAppInfo, XrPreferdBlendMode}; use graphics::{XrAppInfo, XrPreferdBlendMode};
@@ -142,16 +142,25 @@ impl Plugin for OpenXrPlugin {
xr_pre_frame xr_pre_frame
.run_if(xr_only()) .run_if(xr_only())
.run_if(xr_render_only()) .run_if(xr_render_only())
.in_set(RenderSet::Prepare), // Do NOT touch this ordering! idk why but you can NOT just put in a RenderSet
); // right before rendering
render_app.add_systems( .before(render_system)
Render, .after(RenderSet::ExtractCommands),
(locate_views, xr_input::xr_camera::xr_camera_head_sync) // .in_set(RenderSet::Prepare),
.chain()
.run_if(xr_only())
.run_if(xr_render_only())
.in_set(RenderSet::Prepare),
); );
// render_app.add_systems(
// Render,
// (
// locate_views,
// xr_input::xr_camera::xr_camera_head_sync,
// sync_simple_transforms,
// propagate_transforms,
// )
// .chain()
// .run_if(xr_only())
// .run_if(xr_render_only())
// .in_set(RenderSet::Prepare),
// );
render_app.add_systems( render_app.add_systems(
Render, Render,
xr_end_frame xr_end_frame
@@ -159,15 +168,9 @@ impl Plugin for OpenXrPlugin {
.run_if(xr_render_only()) .run_if(xr_render_only())
.after(RenderSet::Render), .after(RenderSet::Render),
); );
render_app.insert_resource(TcpConnection(
TcpStream::connect("192.168.2.100:6969").unwrap(),
));
} }
} }
#[derive(Resource)]
struct TcpConnection(TcpStream);
#[derive(Default)] #[derive(Default)]
pub struct DefaultXrPlugins { pub struct DefaultXrPlugins {
pub reqeusted_extensions: XrExtensions, pub reqeusted_extensions: XrExtensions,
@@ -180,7 +183,7 @@ impl PluginGroup for DefaultXrPlugins {
DefaultPlugins DefaultPlugins
.build() .build()
.disable::<RenderPlugin>() .disable::<RenderPlugin>()
.disable::<PipelinedRenderingPlugin>() // .disable::<PipelinedRenderingPlugin>()
.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,
@@ -273,6 +276,7 @@ pub fn xr_wait_frame(
) { ) {
{ {
let _span = info_span!("xr_wait_frame").entered(); let _span = info_span!("xr_wait_frame").entered();
info!("Pre Frame Wait");
*frame_state = match frame_waiter.wait() { *frame_state = match frame_waiter.wait() {
Ok(a) => a.into(), Ok(a) => a.into(),
Err(e) => { Err(e) => {
@@ -280,6 +284,7 @@ pub fn xr_wait_frame(
return; return;
} }
}; };
info!("Post Frame Wait");
**should_render = frame_state.should_render; **should_render = frame_state.should_render;
} }
} }
@@ -296,9 +301,7 @@ pub fn xr_pre_frame(
} }
{ {
let _span = info_span!("xr_wait_image").entered(); let _span = info_span!("xr_wait_image").entered();
info!("wait image");
swapchain.wait_image().unwrap(); swapchain.wait_image().unwrap();
info!("waited image");
} }
{ {
let _span = info_span!("xr_update_manual_texture_views").entered(); let _span = info_span!("xr_update_manual_texture_views").entered();
@@ -325,8 +328,6 @@ pub fn xr_end_frame(
swapchain: Res<XrSwapchain>, swapchain: Res<XrSwapchain>,
resolution: Res<XrResolution>, resolution: Res<XrResolution>,
environment_blend_mode: Res<XrEnvironmentBlendMode>, environment_blend_mode: Res<XrEnvironmentBlendMode>,
mut connection: ResMut<TcpConnection>,
cams: Query<(&Transform, &XrCameraType)>,
) { ) {
#[cfg(target_os = "android")] #[cfg(target_os = "android")]
{ {
@@ -338,31 +339,6 @@ pub fn xr_end_frame(
let _span = info_span!("xr_release_image").entered(); let _span = info_span!("xr_release_image").entered();
swapchain.release_image().unwrap(); swapchain.release_image().unwrap();
} }
let mut cam = None;
for (t, c) in &cams {
if *c == XrCameraType::Xr(xr_input::xr_camera::Eye::Left) {
cam = Some(*t);
break;
}
}
let _ = std::writeln!(
&mut connection.0,
"{},{},{},{},{},{},{},{},{},{},{},{},{},{}",
views[0].pose.position.x,
views[0].pose.position.y,
views[0].pose.position.z,
views[0].pose.orientation.x,
views[0].pose.orientation.y,
views[0].pose.orientation.z,
views[0].pose.orientation.w,
cam.unwrap().translation.x,
cam.unwrap().translation.y,
cam.unwrap().translation.z,
cam.unwrap().rotation.x,
cam.unwrap().rotation.y,
cam.unwrap().rotation.z,
cam.unwrap().rotation.w,
);
{ {
let _span = info_span!("xr_end_frame").entered(); let _span = info_span!("xr_end_frame").entered();
let result = swapchain.end( let result = swapchain.end(