aboutsummaryrefslogtreecommitdiffstats
path: root/components/servo/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/servo/lib.rs')
-rw-r--r--components/servo/lib.rs45
1 files changed, 30 insertions, 15 deletions
diff --git a/components/servo/lib.rs b/components/servo/lib.rs
index bb408eaa2b5..a71a1e708ba 100644
--- a/components/servo/lib.rs
+++ b/components/servo/lib.rs
@@ -65,7 +65,7 @@ fn webdriver(_port: u16, _constellation: Sender<ConstellationMsg>) {}
use bluetooth::BluetoothThreadFactory;
use bluetooth_traits::BluetoothRequest;
-use canvas::WebGLComm;
+use canvas::{SurfaceProviders, WebGLComm, WebGlExecutor};
use canvas_traits::webgl::WebGLThreads;
use compositing::compositor_thread::{
CompositorProxy, CompositorReceiver, InitialCompositorState, Msg,
@@ -432,14 +432,6 @@ where
panic!("We don't currently support running both WebVR and WebXR");
}
- // For the moment, we enable use both the webxr crate and the rust-webvr crate,
- // but we are migrating over to just using webxr.
- let mut webxr_main_thread = webxr::MainThreadRegistry::new(event_loop_waker)
- .expect("Failed to create WebXR device registry");
- if pref!(dom.webxr.enabled) {
- embedder.register_webxr(&mut webxr_main_thread);
- }
-
let mut webvr_heartbeats = Vec::new();
let webvr_services = if pref!(dom.webvr.enabled) {
let mut services = VRServiceManager::new();
@@ -468,7 +460,12 @@ where
let (external_image_handlers, external_images) = WebrenderExternalImageHandlers::new();
let mut external_image_handlers = Box::new(external_image_handlers);
- let webgl_threads = create_webgl_threads(
+ // For the moment, we enable use both the webxr crate and the rust-webvr crate,
+ // but we are migrating over to just using webxr.
+ let mut webxr_main_thread = webxr::MainThreadRegistry::new(event_loop_waker)
+ .expect("Failed to create WebXR device registry");
+
+ let (webgl_threads, webgl_extras) = create_webgl_threads(
&*window,
&mut webrender,
webrender_api_sender.clone(),
@@ -478,6 +475,16 @@ where
external_images.clone(),
);
+ if pref!(dom.webxr.enabled) {
+ if let Some((webxr_surface_providers, webgl_executor)) = webgl_extras {
+ embedder.register_webxr(
+ &mut webxr_main_thread,
+ webgl_executor,
+ webxr_surface_providers,
+ );
+ }
+ }
+
let glplayer_threads = match window.get_gl_context() {
GlContext::Unknown => None,
_ => {
@@ -1060,7 +1067,10 @@ fn create_webgl_threads<W>(
webxr_main_thread: &mut webxr::MainThreadRegistry,
external_image_handlers: &mut WebrenderExternalImageHandlers,
external_images: Arc<Mutex<WebrenderExternalImageRegistry>>,
-) -> Option<WebGLThreads>
+) -> (
+ Option<WebGLThreads>,
+ Option<(SurfaceProviders, WebGlExecutor)>,
+)
where
W: WindowMethods + 'static + ?Sized,
{
@@ -1074,7 +1084,7 @@ where
Ok(a) => a,
Err(e) => {
warn!("Failed to create software graphics context: {:?}", e);
- return None;
+ return (None, None);
},
};
(Device::Software(device), Context::Software(context))
@@ -1083,7 +1093,7 @@ where
Ok(a) => a,
Err(e) => {
warn!("Failed to create hardware graphics context: {:?}", e);
- return None;
+ return (None, None);
},
};
(Device::Hardware(device), Context::Hardware(context))
@@ -1094,7 +1104,7 @@ where
Ok(a) => a,
Err(e) => {
warn!("Failed to create graphics context: {:?}", e);
- return None;
+ return (None, None);
},
};
@@ -1106,8 +1116,10 @@ where
let WebGLComm {
webgl_threads,
webxr_swap_chains,
+ webxr_surface_providers,
image_handler,
output_handler,
+ webgl_executor,
} = WebGLComm::new(
device,
context,
@@ -1129,5 +1141,8 @@ where
webrender.set_output_image_handler(output_handler);
}
- Some(webgl_threads)
+ (
+ Some(webgl_threads),
+ Some((webxr_surface_providers, webgl_executor)),
+ )
}