webgl/webgl_mode/
inprocess.rs1use std::thread::JoinHandle;
6
7use log::debug;
8use paint_api::{CrossProcessPaintApi, PainterSurfmanDetailsMap, WebRenderExternalImageIdManager};
9use servo_canvas_traits::webgl::{WebGLContextId, WebGLMsg, WebGLThreads, webgl_channel};
10use surfman::Device;
11use surfman::chains::SwapChains;
12#[cfg(feature = "webxr")]
13use webxr::SurfmanGL as WebXRSurfman;
14#[cfg(feature = "webxr")]
15use webxr_api::LayerGrandManager as WebXRLayerGrandManager;
16
17use crate::webgl_thread::{WebGLContextBusyMap, WebGLThread, WebGLThreadInit};
18
19pub struct WebGLComm {
20 pub webgl_threads: WebGLThreads,
21 pub swap_chains: SwapChains<WebGLContextId, Device>,
22 pub busy_webgl_context_map: WebGLContextBusyMap,
23 #[cfg(feature = "webxr")]
24 pub webxr_layer_grand_manager: WebXRLayerGrandManager<WebXRSurfman>,
25 pub join_handle: JoinHandle<()>,
28}
29
30impl WebGLComm {
31 pub fn new(
33 paint_api: CrossProcessPaintApi,
34 external_image_id_manager: WebRenderExternalImageIdManager,
35 painter_surfman_details_map: PainterSurfmanDetailsMap,
36 ) -> WebGLComm {
37 debug!("WebGLThreads::new()");
38 let (sender, receiver) = webgl_channel::<WebGLMsg>().unwrap();
39 let swap_chains = SwapChains::new();
40 let busy_webgl_context_map = WebGLContextBusyMap::default();
41
42 #[cfg(feature = "webxr")]
43 let webxr_init = crate::webxr::WebXRBridgeInit::new(sender.clone());
44 #[cfg(feature = "webxr")]
45 let webxr_layer_grand_manager = webxr_init.layer_grand_manager();
46
47 let init = WebGLThreadInit {
49 paint_api,
50 external_image_id_manager,
51 sender: sender.clone(),
52 receiver,
53 webrender_swap_chains: swap_chains.clone(),
54 painter_surfman_details_map,
55 busy_webgl_context_map: busy_webgl_context_map.clone(),
56 #[cfg(feature = "webxr")]
57 webxr_init,
58 };
59
60 let join_handle = WebGLThread::run_on_own_thread(init);
61
62 WebGLComm {
63 webgl_threads: WebGLThreads(sender),
64 swap_chains,
65 busy_webgl_context_map,
66 #[cfg(feature = "webxr")]
67 webxr_layer_grand_manager,
68 join_handle,
69 }
70 }
71}