servoshell: Enable OpenXR by default and remove old WebVR prefs, adjust XrDiscovery initialization (#33245)

* Remove WebVR prefs, enable OpenXR by default

Signed-off-by: Daniel Adams <msub2official@gmail.com>

* Prefer OpenXR if available, otherwise use GLWindow

Signed-off-by: Daniel Adams <msub2official@gmail.com>

---------

Signed-off-by: Daniel Adams <msub2official@gmail.com>
This commit is contained in:
Daniel Adams 2024-08-29 05:06:57 +00:00 committed by GitHub
parent 1aff31fd96
commit 5ffdce9aee
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 29 additions and 25 deletions

View file

@ -141,27 +141,7 @@ impl App {
if let winit::event::Event::NewEvents(winit::event::StartCause::Init) = event {
let surfman = window.rendering_context();
let xr_discovery = if pref!(dom.webxr.glwindow.enabled) && !opts::get().headless {
let window = window.clone();
// This should be safe because run_forever does, in fact,
// run forever. The event loop window target doesn't get
// moved, and does outlast this closure, and we won't
// ever try to make use of it once shutdown begins and
// it stops being valid.
let w = unsafe {
std::mem::transmute::<
&EventLoopWindowTarget<WakerEvent>,
&'static EventLoopWindowTarget<WakerEvent>,
>(w.unwrap())
};
let factory = Box::new(move || Ok(window.new_glwindow(w)));
Some(XrDiscovery::GlWindow(GlWindowDiscovery::new(
surfman.connection(),
surfman.adapter(),
surfman.context_attributes(),
factory,
)))
} else if pref!(dom.webxr.openxr.enabled) && !opts::get().headless {
let openxr_discovery = if pref!(dom.webxr.openxr.enabled) && !opts::get().headless {
#[cfg(target_os = "windows")]
let openxr = {
let app_info = AppInfo::new("Servoshell", 0, "Servo", 0);
@ -175,6 +155,33 @@ impl App {
None
};
let glwindow_discovery =
if pref!(dom.webxr.glwindow.enabled) && !opts::get().headless {
let window = window.clone();
// This should be safe because run_forever does, in fact,
// run forever. The event loop window target doesn't get
// moved, and does outlast this closure, and we won't
// ever try to make use of it once shutdown begins and
// it stops being valid.
let w = unsafe {
std::mem::transmute::<
&EventLoopWindowTarget<WakerEvent>,
&'static EventLoopWindowTarget<WakerEvent>,
>(w.unwrap())
};
let factory = Box::new(move || Ok(window.new_glwindow(w)));
Some(XrDiscovery::GlWindow(GlWindowDiscovery::new(
surfman.connection(),
surfman.adapter(),
surfman.context_attributes(),
factory,
)))
} else {
None
};
let xr_discovery = openxr_discovery.or(glwindow_discovery);
let window = window.clone();
// Implements embedder methods, used by libservo and constellation.
let embedder = Box::new(EmbedderCallbacks::new(ev_waker.clone(), xr_discovery));

View file

@ -37,9 +37,6 @@
"dom.webgpu.wgpu_backend": "",
"dom.webrtc.enabled": false,
"dom.webrtc.transceiver.enabled": false,
"dom.webvr.enabled": false,
"dom.webvr.event_polling_interval": 500,
"dom.webvr.test": false,
"dom.webvtt.enabled": false,
"dom.webxr.enabled": true,
"dom.webxr.first_person_observer_view": false,
@ -50,7 +47,7 @@
"dom.webxr.glwindow.spherical": false,
"dom.webxr.hands.enabled": true,
"dom.webxr.layers.enabled": false,
"dom.webxr.openxr.enabled": false,
"dom.webxr.openxr.enabled": true,
"dom.webxr.sessionavailable": false,
"dom.webxr.test": false,
"dom.webxr.unsafe-assume-user-intent": false,