mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Report openxr failure at app startup.
This commit is contained in:
parent
0540c4a284
commit
2a0700e78b
3 changed files with 26 additions and 10 deletions
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -6419,7 +6419,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "webxr"
|
||||
version = "0.0.1"
|
||||
source = "git+https://github.com/servo/webxr#836a08e1168e3a2b0b0fa12d7987603d5fc79002"
|
||||
source = "git+https://github.com/servo/webxr#6ead41b15b0c72ef8bd98af0c09f4fefec888aac"
|
||||
dependencies = [
|
||||
"android_injected_glue",
|
||||
"bindgen",
|
||||
|
@ -6442,7 +6442,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "webxr-api"
|
||||
version = "0.0.1"
|
||||
source = "git+https://github.com/servo/webxr#836a08e1168e3a2b0b0fa12d7987603d5fc79002"
|
||||
source = "git+https://github.com/servo/webxr#6ead41b15b0c72ef8bd98af0c09f4fefec888aac"
|
||||
dependencies = [
|
||||
"euclid",
|
||||
"ipc-channel",
|
||||
|
|
|
@ -267,7 +267,8 @@ impl XRSystem {
|
|||
) {
|
||||
let session = match response {
|
||||
Ok(session) => session,
|
||||
Err(_) => {
|
||||
Err(e) => {
|
||||
warn!("Error requesting XR session: {:?}", e);
|
||||
if mode != XRSessionMode::Inline {
|
||||
self.pending_immersive_session.set(false);
|
||||
}
|
||||
|
|
|
@ -810,7 +810,7 @@ impl EmbedderMethods for ServoEmbedderCallbacks {
|
|||
}
|
||||
|
||||
struct GlThread(WebGlExecutor);
|
||||
impl webxr::openxr::GlThread for GlThread {
|
||||
impl openxr::GlThread for GlThread {
|
||||
fn execute(&self, runnable: Box<dyn FnOnce(&surfman::Device) + Send>) {
|
||||
let _ = self.0.send(runnable);
|
||||
}
|
||||
|
@ -819,12 +819,27 @@ impl EmbedderMethods for ServoEmbedderCallbacks {
|
|||
}
|
||||
}
|
||||
|
||||
let discovery = webxr::openxr::OpenXrDiscovery::new(
|
||||
Box::new(GlThread(executor)),
|
||||
Box::new(ProviderRegistration(surface_providers)),
|
||||
Box::new(ContextMenuCallback(embedder_proxy)),
|
||||
);
|
||||
registry.register(discovery);
|
||||
if openxr::create_instance().is_ok() {
|
||||
let discovery = openxr::OpenXrDiscovery::new(
|
||||
Box::new(GlThread(executor)),
|
||||
Box::new(ProviderRegistration(surface_providers)),
|
||||
Box::new(ContextMenuCallback(embedder_proxy)),
|
||||
);
|
||||
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"))]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue