Webrender external image handler demux

This commit is contained in:
Fernando Jiménez Moreno 2019-06-25 19:42:47 +02:00
parent 7d589ed4f5
commit ba9cf85fb3
11 changed files with 172 additions and 126 deletions

View file

@ -50,6 +50,7 @@ pub use servo_url;
pub use style;
pub use style_traits;
pub use webrender_api;
pub use webrender_traits;
pub use webvr;
pub use webvr_traits;
@ -112,6 +113,7 @@ use std::cmp::max;
use std::path::PathBuf;
use std::rc::Rc;
use webrender::{RendererKind, ShaderPrecacheFlags};
use webrender_traits::{WebrenderExternalImageHandler, WebrenderImageHandlerType};
use webvr::{VRServiceManager, WebVRCompositorHandler, WebVRThread};
pub use gleam::gl;
@ -688,9 +690,11 @@ fn create_constellation(
GLContextFactory::current_native_handle(&compositor_proxy)
};
let mut webrender_external_image_handler = Box::new(WebrenderExternalImageHandler::new());
// Initialize WebGL Thread entry point.
let webgl_threads = gl_factory.map(|factory| {
let (webgl_threads, _image_handler, output_handler) = WebGLThreads::new(
let (webgl_threads, image_handler, output_handler) = WebGLThreads::new(
factory,
window_gl,
webrender_api_sender.clone(),
@ -698,7 +702,8 @@ fn create_constellation(
);
// Set webrender external image handler for WebGL textures
//webrender.set_external_image_handler(image_handler);
webrender_external_image_handler
.set_handler(image_handler, WebrenderImageHandlerType::WebGL);
// Set DOM to texture handler, if enabled.
if let Some(output_handler) = output_handler {
@ -712,11 +717,14 @@ fn create_constellation(
GlContext::Unknown => None,
_ => {
let (glplayer_threads, image_handler) = GLPlayerThreads::new();
webrender.set_external_image_handler(image_handler);
webrender_external_image_handler
.set_handler(image_handler, WebrenderImageHandlerType::Media);
Some(glplayer_threads)
},
};
webrender.set_external_image_handler(webrender_external_image_handler);
let player_context = WindowGLContext {
glplayer_chan: glplayer_threads.as_ref().map(|threads| threads.pipeline()),
..player_context