Report openxr failure at app startup.

This commit is contained in:
Josh Matthews 2020-04-24 10:06:30 -04:00
parent 0540c4a284
commit 2a0700e78b
3 changed files with 26 additions and 10 deletions

4
Cargo.lock generated
View file

@ -6419,7 +6419,7 @@ dependencies = [
[[package]] [[package]]
name = "webxr" name = "webxr"
version = "0.0.1" version = "0.0.1"
source = "git+https://github.com/servo/webxr#836a08e1168e3a2b0b0fa12d7987603d5fc79002" source = "git+https://github.com/servo/webxr#6ead41b15b0c72ef8bd98af0c09f4fefec888aac"
dependencies = [ dependencies = [
"android_injected_glue", "android_injected_glue",
"bindgen", "bindgen",
@ -6442,7 +6442,7 @@ dependencies = [
[[package]] [[package]]
name = "webxr-api" name = "webxr-api"
version = "0.0.1" version = "0.0.1"
source = "git+https://github.com/servo/webxr#836a08e1168e3a2b0b0fa12d7987603d5fc79002" source = "git+https://github.com/servo/webxr#6ead41b15b0c72ef8bd98af0c09f4fefec888aac"
dependencies = [ dependencies = [
"euclid", "euclid",
"ipc-channel", "ipc-channel",

View file

@ -267,7 +267,8 @@ impl XRSystem {
) { ) {
let session = match response { let session = match response {
Ok(session) => session, Ok(session) => session,
Err(_) => { Err(e) => {
warn!("Error requesting XR session: {:?}", e);
if mode != XRSessionMode::Inline { if mode != XRSessionMode::Inline {
self.pending_immersive_session.set(false); self.pending_immersive_session.set(false);
} }

View file

@ -810,7 +810,7 @@ impl EmbedderMethods for ServoEmbedderCallbacks {
} }
struct GlThread(WebGlExecutor); struct GlThread(WebGlExecutor);
impl webxr::openxr::GlThread for GlThread { impl openxr::GlThread for GlThread {
fn execute(&self, runnable: Box<dyn FnOnce(&surfman::Device) + Send>) { fn execute(&self, runnable: Box<dyn FnOnce(&surfman::Device) + Send>) {
let _ = self.0.send(runnable); let _ = self.0.send(runnable);
} }
@ -819,12 +819,27 @@ impl EmbedderMethods for ServoEmbedderCallbacks {
} }
} }
let discovery = webxr::openxr::OpenXrDiscovery::new( if openxr::create_instance().is_ok() {
let discovery = openxr::OpenXrDiscovery::new(
Box::new(GlThread(executor)), Box::new(GlThread(executor)),
Box::new(ProviderRegistration(surface_providers)), Box::new(ProviderRegistration(surface_providers)),
Box::new(ContextMenuCallback(embedder_proxy)), Box::new(ContextMenuCallback(embedder_proxy)),
); );
registry.register(discovery); registry.register(discovery);
} else {
let msg =
"Cannot initialize OpenXR - please ensure runtime is installed and enabled in \
the OpenXR developer portal app.\n\nImmersive mode will not function until \
this error is fixed.";
let (sender, _receiver) = ipc::channel().unwrap();
embedder_proxy.send((
None,
EmbedderMsg::Prompt(
PromptDefinition::Alert(msg.to_owned(), sender),
PromptOrigin::Trusted,
),
));
}
} }
#[cfg(not(feature = "uwp"))] #[cfg(not(feature = "uwp"))]