Skip to content

Commit 6b2bbb9

Browse files
authored
feat(client_openxr): ⬆️ Update openxrs (#3097)
* feat(client_openxr): ⬆️ Update openxrs * Add support for custom events
1 parent a915efc commit 6b2bbb9

File tree

11 files changed

+309
-209
lines changed

11 files changed

+309
-209
lines changed

Cargo.lock

Lines changed: 231 additions & 169 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

alvr/client_openxr/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ alvr_packets.workspace = true
1717
alvr_session.workspace = true
1818
alvr_system_info.workspace = true
1919

20-
openxr = { git = "https://github.com/Ralith/openxrs", rev = "9270509d23dc774b43a8b7289e8adf69fcac6828" }
20+
openxr = { git = "https://github.com/zmerp/openxrs", rev = "e7c1b155e79ff8b58c2f6558d28e1398ebe08d2d" }
2121

2222
[target.'cfg(target_os = "android")'.dependencies]
2323
android-activity = { version = "0.6", features = ["native-activity"] }

alvr/client_openxr/src/extra_extensions/body_tracking_fb.rs

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
#![allow(dead_code)]
22

33
use crate::extra_extensions::get_instance_proc;
4-
use openxr::{self as xr, raw, sys};
4+
use openxr::{
5+
self as xr, raw,
6+
sys::{self, Handle},
7+
};
58
use std::{ptr, sync::LazyLock};
69

710
pub const META_BODY_TRACKING_FULL_BODY_EXTENSION_NAME: &str = "XR_META_body_tracking_full_body";
@@ -10,20 +13,6 @@ pub static BODY_JOINT_SET_FULL_BODY_META: LazyLock<xr::BodyJointSetFB> =
1013
pub const META_BODY_TRACKING_FIDELITY_EXTENSION_NAME: &str = "XR_META_body_tracking_fidelity";
1114
pub static SYSTEM_PROPERTIES_BODY_TRACKING_FIDELITY_META: LazyLock<xr::StructureType> =
1215
LazyLock::new(|| xr::StructureType::from_raw(1000284001));
13-
pub const FULL_BODY_JOINT_LEFT_UPPER_LEG_META: usize = 70;
14-
pub const FULL_BODY_JOINT_LEFT_LOWER_LEG_META: usize = 71;
15-
pub const FULL_BODY_JOINT_LEFT_FOOT_ANKLE_TWIST_META: usize = 72;
16-
pub const FULL_BODY_JOINT_LEFT_FOOT_ANKLE_META: usize = 73;
17-
pub const FULL_BODY_JOINT_LEFT_FOOT_SUBTALAR_META: usize = 74;
18-
pub const FULL_BODY_JOINT_LEFT_FOOT_TRANSVERSE_META: usize = 75;
19-
pub const FULL_BODY_JOINT_LEFT_FOOT_BALL_META: usize = 76;
20-
pub const FULL_BODY_JOINT_RIGHT_UPPER_LEG_META: usize = 77;
21-
pub const FULL_BODY_JOINT_RIGHT_LOWER_LEG_META: usize = 78;
22-
pub const FULL_BODY_JOINT_RIGHT_FOOT_ANKLE_TWIST_META: usize = 79;
23-
pub const FULL_BODY_JOINT_RIGHT_FOOT_ANKLE_META: usize = 80;
24-
pub const FULL_BODY_JOINT_RIGHT_FOOT_SUBTALAR_META: usize = 81;
25-
pub const FULL_BODY_JOINT_RIGHT_FOOT_TRANSVERSE_META: usize = 82;
26-
pub const FULL_BODY_JOINT_RIGHT_FOOT_BALL_META: usize = 83;
2716
pub const FULL_BODY_JOINT_COUNT_META: usize = 84;
2817

2918
#[repr(C)]

alvr/client_openxr/src/extra_extensions/eye_tracking_social.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use openxr::{self as xr, raw, sys};
1+
use openxr::{
2+
self as xr, raw,
3+
sys::{self, Handle},
4+
};
25
use std::ptr;
36

47
pub struct EyeTrackerSocial {

alvr/client_openxr/src/extra_extensions/face_tracking2_fb.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use openxr::{self as xr, raw, sys};
1+
use openxr::{
2+
self as xr, raw,
3+
sys::{self, Handle},
4+
};
25
use std::ptr;
36

47
pub struct FaceTracker2FB {

alvr/client_openxr/src/extra_extensions/facial_tracking_htc.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use openxr::{self as xr, raw, sys};
1+
use openxr::{
2+
self as xr, raw,
3+
sys::{self, Handle},
4+
};
25
use std::ptr;
36

47
pub struct FacialTrackerHTC {

alvr/client_openxr/src/extra_extensions/passthrough_fb.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
use alvr_system_info::Platform;
2-
use openxr::{self as xr, raw, sys};
2+
use openxr::{
3+
self as xr, raw,
4+
sys::{self, Handle},
5+
};
36
use std::ptr;
47

58
pub struct PassthroughFB {

alvr/client_openxr/src/extra_extensions/passthrough_htc.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use openxr::{self as xr, raw, sys};
1+
use openxr::{
2+
self as xr, raw,
3+
sys::{self, Handle},
4+
};
25
use std::ptr;
36

47
pub struct PassthroughHTC {

alvr/client_openxr/src/interaction.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -359,27 +359,27 @@ impl InteractionContext {
359359
.unwrap();
360360

361361
let left_grip_space = left_grip_action
362-
.create_space(xr_session.clone(), xr::Path::NULL, xr::Posef::IDENTITY)
362+
.create_space(&xr_session, xr::Path::NULL, xr::Posef::IDENTITY)
363363
.unwrap();
364364
let right_grip_space = right_grip_action
365-
.create_space(xr_session.clone(), xr::Path::NULL, xr::Posef::IDENTITY)
365+
.create_space(&xr_session, xr::Path::NULL, xr::Posef::IDENTITY)
366366
.unwrap();
367367

368368
let left_aim_space = left_aim_action
369-
.create_space(xr_session.clone(), xr::Path::NULL, xr::Posef::IDENTITY)
369+
.create_space(&xr_session, xr::Path::NULL, xr::Posef::IDENTITY)
370370
.unwrap();
371371
let right_aim_space = right_aim_action
372-
.create_space(xr_session.clone(), xr::Path::NULL, xr::Posef::IDENTITY)
372+
.create_space(&xr_session, xr::Path::NULL, xr::Posef::IDENTITY)
373373
.unwrap();
374374

375375
let left_detached_grip_space = left_detached_grip_action.as_ref().map(|action| {
376376
action
377-
.create_space(xr_session.clone(), xr::Path::NULL, xr::Posef::IDENTITY)
377+
.create_space(&xr_session, xr::Path::NULL, xr::Posef::IDENTITY)
378378
.unwrap()
379379
});
380380
let right_detached_grip_space = right_detached_grip_action.as_ref().map(|action| {
381381
action
382-
.create_space(xr_session.clone(), xr::Path::NULL, xr::Posef::IDENTITY)
382+
.create_space(&xr_session, xr::Path::NULL, xr::Posef::IDENTITY)
383383
.unwrap()
384384
});
385385

@@ -420,7 +420,7 @@ impl InteractionContext {
420420
}
421421

422422
let space = action
423-
.create_space(xr_session.clone(), xr::Path::NULL, xr::Posef::IDENTITY)
423+
.create_space(&xr_session, xr::Path::NULL, xr::Posef::IDENTITY)
424424
.unwrap();
425425

426426
Some((action, space))

alvr/client_openxr/src/lib.rs

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use interaction::{InteractionContext, InteractionSourcesConfig};
2727
use lobby::Lobby;
2828
use openxr as xr;
2929
use passthrough::PassthroughLayer;
30-
use std::{path::Path, rc::Rc, sync::Arc, thread, time::Duration};
30+
use std::{ffi::CStr, path::Path, rc::Rc, sync::Arc, thread, time::Duration};
3131
use stream::StreamContext;
3232

3333
fn from_xr_vec3(v: xr::Vector3f) -> Vec3 {
@@ -135,17 +135,21 @@ fn create_session(
135135
pub fn entry_point() {
136136
alvr_client_core::init_logging();
137137

138+
const LEGACY_OPENXR_VERSION: xr::Version = xr::Version::new(1, 0, 34);
139+
const CURRENT_OPENXR_VERSION: xr::Version = xr::Version::new(1, 1, 36);
140+
138141
// Using a provisional platform, before we can get the runtime info
139-
let loader_suffix = match alvr_system_info::platform(None, None) {
140-
Platform::Quest1 => "_quest1",
142+
let (loader_suffix, openxr_version) = match alvr_system_info::platform(None, None) {
143+
Platform::Quest1 => ("_quest1", LEGACY_OPENXR_VERSION),
141144
Platform::PicoNeo3
142145
| Platform::PicoG3
143146
| Platform::Pico4
144147
| Platform::Pico4Pro
145-
| Platform::Pico4Enterprise => "_pico_old",
146-
p if p.is_yvr() => "_yvr",
147-
Platform::Lynx => "_lynx",
148-
_ => "",
148+
| Platform::Pico4Enterprise => ("_pico_old", LEGACY_OPENXR_VERSION),
149+
p if p.is_vive() => ("", LEGACY_OPENXR_VERSION),
150+
p if p.is_yvr() => ("_yvr", LEGACY_OPENXR_VERSION),
151+
Platform::Lynx => ("_lynx", LEGACY_OPENXR_VERSION),
152+
_ => ("", CURRENT_OPENXR_VERSION),
149153
};
150154
let xr_entry = unsafe {
151155
xr::Entry::load_from(Path::new(&format!("libopenxr_loader{loader_suffix}.so"))).unwrap()
@@ -156,6 +160,18 @@ pub fn entry_point() {
156160

157161
let available_extensions = xr_entry.enumerate_extensions().unwrap();
158162
info!("OpenXR available extensions: {available_extensions:#?}");
163+
info!(
164+
"Extra available extensions: {:#?}",
165+
available_extensions
166+
.other
167+
.iter()
168+
.map(|vec| CStr::from_bytes_with_nul(vec)
169+
.unwrap()
170+
.to_str()
171+
.unwrap()
172+
.to_owned())
173+
.collect::<Vec<_>>()
174+
);
159175

160176
// todo: switch to vulkan
161177
assert!(available_extensions.khr_opengl_es_enable);
@@ -199,12 +215,24 @@ pub fn entry_point() {
199215
BD_MOTION_TRACKING_EXTENSION_NAME,
200216
PICO_CONFIGURATION_EXTENSION_NAME,
201217
]
202-
.contains(&ext.as_str())
218+
.contains(&CStr::from_bytes_with_nul(ext).unwrap().to_str().unwrap())
203219
})
204220
.collect();
205221

206222
let available_layers = xr_entry.enumerate_layers().unwrap();
207-
alvr_common::info!("OpenXR available layers: {available_layers:#?}");
223+
info!("OpenXR available layers: {available_layers:#?}");
224+
225+
let other_exts = exts
226+
.other
227+
.iter()
228+
.map(|vec| {
229+
CStr::from_bytes_with_nul(vec)
230+
.unwrap()
231+
.to_str()
232+
.unwrap()
233+
.to_owned()
234+
})
235+
.collect::<Vec<_>>();
208236

209237
let xr_instance = xr_entry
210238
.create_instance(
@@ -213,6 +241,7 @@ pub fn entry_point() {
213241
application_version: 0,
214242
engine_name: "ALVR",
215243
engine_version: 0,
244+
api_version: openxr_version,
216245
},
217246
&exts,
218247
&[],
@@ -297,7 +326,7 @@ pub fn entry_point() {
297326

298327
let interaction_context = Arc::new(RwLock::new(InteractionContext::new(
299328
xr_session.clone(),
300-
exts.other.clone(),
329+
other_exts.clone(),
301330
xr_system,
302331
platform,
303332
)));
@@ -402,6 +431,10 @@ pub fn entry_point() {
402431

403432
core_context.send_proximity_state(event.is_user_present());
404433
}
434+
xr::Event::Unknown => {
435+
// use event_storage.as_raw(), reinterpret as sys::BaseInStructure, get type
436+
// and then reinterpret as the event struct
437+
}
405438
_ => (),
406439
}
407440
}

0 commit comments

Comments
 (0)