Skip to content

Commit

Permalink
Support for webxr layer management
Browse files Browse the repository at this point in the history
  • Loading branch information
Alan Jeffrey committed Jun 28, 2020
1 parent af110ac commit 349619e
Show file tree
Hide file tree
Showing 34 changed files with 949 additions and 642 deletions.
29 changes: 11 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 0 additions & 2 deletions Cargo.toml
Expand Up @@ -28,5 +28,3 @@ opt-level = 3

# This is here to dedupe winapi since mio 0.6 is still using winapi 0.2.
mio = { git = "https://github.com/servo/mio.git", branch = "servo" }
surfman = { git = "https://github.com/servo/surfman" }
surfman-chains = { git = "https://github.com/asajeffrey/surfman-chains" }
7 changes: 4 additions & 3 deletions components/canvas/Cargo.toml
Expand Up @@ -38,13 +38,14 @@ servo_config = { path = "../config" }
sparkle = "0.1.25"
style = { path = "../style" }
style_traits = { path = "../style_traits" }
# NOTE: the sm-angle feature only enables ANGLE on Windows, not other platforms!
surfman = { version = "0.2", features = ["sm-angle", "sm-angle-default"] }
surfman-chains = "0.3"
# NOTE: the sm-angle feature only enables angle on windows, not other platforms!
surfman = { version = "0.3", features = ["sm-angle","sm-angle-default"] }
surfman-chains = "0.4"
surfman-chains-api = "0.2"
time = { version = "0.1.0", optional = true }
webrender = { git = "https://github.com/servo/webrender" }
webrender_api = { git = "https://github.com/servo/webrender" }
webrender_surfman = { path = "../webrender_surfman" }
webrender_traits = { path = "../webrender_traits" }
webxr-api = { git = "https://github.com/servo/webxr", features = ["ipc"] }
webxr = { git = "https://github.com/servo/webxr", features = ["ipc"] }
3 changes: 0 additions & 3 deletions components/canvas/lib.rs
Expand Up @@ -12,9 +12,6 @@ extern crate log;
mod raqote_backend;

pub use webgl_mode::WebGLComm;
pub use webgl_thread::SurfaceProvider;
pub use webgl_thread::SurfaceProviders;
pub use webgl_thread::WebGlExecutor;

pub mod canvas_data;
pub mod canvas_paint_thread;
Expand Down
23 changes: 8 additions & 15 deletions components/canvas/webgl_mode/inprocess.rs
Expand Up @@ -2,7 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */

use crate::webgl_thread::{SurfaceProviders, WebGLThread, WebGLThreadInit, WebGlExecutor};
use crate::webgl_thread::{WebGLThread, WebGLThreadInit, WebXRBridgeInit};
use canvas_traits::webgl::webgl_channel;
use canvas_traits::webgl::{WebGLContextId, WebGLMsg, WebGLThreads};
use euclid::default::Size2D;
Expand All @@ -11,7 +11,6 @@ use gleam;
use servo_config::pref;
use sparkle::gl;
use sparkle::gl::GlType;
use std::collections::HashMap;
use std::default::Default;
use std::rc::Rc;
use std::sync::{Arc, Mutex};
Expand All @@ -25,15 +24,14 @@ use webrender_surfman::WebrenderSurfman;
use webrender_traits::{
WebrenderExternalImageApi, WebrenderExternalImageRegistry, WebrenderImageSource,
};
use webxr_api::SwapChainId as WebXRSwapChainId;
use webxr::SurfmanGL as WebXRSurfman;
use webxr_api::LayerGrandManager as WebXRLayerGrandManager;

pub struct WebGLComm {
pub webgl_threads: WebGLThreads,
pub webxr_swap_chains: SwapChains<WebXRSwapChainId, Device>,
pub webxr_surface_providers: SurfaceProviders,
pub image_handler: Box<dyn WebrenderExternalImageApi>,
pub output_handler: Option<Box<dyn webrender_api::OutputImageHandler>>,
pub webgl_executor: WebGlExecutor,
pub webxr_layer_grand_manager: WebXRLayerGrandManager<WebXRSurfman>,
}

impl WebGLComm {
Expand All @@ -49,9 +47,8 @@ impl WebGLComm {
debug!("WebGLThreads::new()");
let (sender, receiver) = webgl_channel::<WebGLMsg>().unwrap();
let webrender_swap_chains = SwapChains::new();
let webxr_swap_chains = SwapChains::new();
let webxr_surface_providers = Arc::new(Mutex::new(HashMap::new()));
let (runnable_sender, runnable_receiver) = crossbeam_channel::unbounded();
let webxr_init = WebXRBridgeInit::new(sender.clone());
let webxr_layer_grand_manager = webxr_init.layer_grand_manager();

// This implementation creates a single `WebGLThread` for all the pipelines.
let init = WebGLThreadInit {
Expand All @@ -61,12 +58,10 @@ impl WebGLComm {
sender: sender.clone(),
receiver,
webrender_swap_chains: webrender_swap_chains.clone(),
webxr_swap_chains: webxr_swap_chains.clone(),
webxr_surface_providers: webxr_surface_providers.clone(),
connection: surfman.connection(),
adapter: surfman.adapter(),
api_type,
runnable_receiver,
webxr_init,
};

let output_handler = if pref!(dom.webgl.dom_to_texture.enabled) {
Expand All @@ -81,11 +76,9 @@ impl WebGLComm {

WebGLComm {
webgl_threads: WebGLThreads(sender),
webxr_swap_chains,
webxr_surface_providers,
image_handler: Box::new(external),
output_handler: output_handler.map(|b| b as Box<_>),
webgl_executor: runnable_sender,
webxr_layer_grand_manager: webxr_layer_grand_manager,
}
}
}
Expand Down

0 comments on commit 349619e

Please sign in to comment.