mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Implement GPUSwapChain and GPUCanvasContext and interface with Webrender
This commit is contained in:
parent
73760ea594
commit
71401e0855
28 changed files with 882 additions and 91 deletions
|
@ -115,6 +115,7 @@ use servo_media::player::context::GlContext;
|
|||
use servo_media::ServoMedia;
|
||||
use std::borrow::Cow;
|
||||
use std::cmp::max;
|
||||
use std::collections::HashMap;
|
||||
use std::path::PathBuf;
|
||||
use std::rc::Rc;
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
@ -476,13 +477,21 @@ where
|
|||
let glplayer_threads = match window.get_gl_context() {
|
||||
GlContext::Unknown => None,
|
||||
_ => {
|
||||
let (glplayer_threads, image_handler) = GLPlayerThreads::new(external_images);
|
||||
let (glplayer_threads, image_handler) =
|
||||
GLPlayerThreads::new(external_images.clone());
|
||||
external_image_handlers
|
||||
.set_handler(image_handler, WebrenderImageHandlerType::Media);
|
||||
Some(glplayer_threads)
|
||||
},
|
||||
};
|
||||
|
||||
let wgpu_image_handler = webgpu::WGPUExternalImages::new();
|
||||
let wgpu_image_map = wgpu_image_handler.images.clone();
|
||||
external_image_handlers.set_handler(
|
||||
Box::new(wgpu_image_handler),
|
||||
WebrenderImageHandlerType::WebGPU,
|
||||
);
|
||||
|
||||
let player_context = WindowGLContext {
|
||||
gl_context: window.get_gl_context(),
|
||||
native_display: window.get_native_display(),
|
||||
|
@ -514,12 +523,15 @@ where
|
|||
debugger_chan,
|
||||
devtools_chan,
|
||||
webrender_document,
|
||||
webrender_api_sender,
|
||||
webxr_main_thread.registry(),
|
||||
player_context,
|
||||
webgl_threads,
|
||||
glplayer_threads,
|
||||
event_loop_waker,
|
||||
window_size,
|
||||
external_images,
|
||||
wgpu_image_map,
|
||||
);
|
||||
|
||||
if cfg!(feature = "webdriver") {
|
||||
|
@ -851,12 +863,15 @@ fn create_constellation(
|
|||
debugger_chan: Option<debugger::Sender>,
|
||||
devtools_chan: Option<Sender<devtools_traits::DevtoolsControlMsg>>,
|
||||
webrender_document: webrender_api::DocumentId,
|
||||
webrender_api_sender: webrender_api::RenderApiSender,
|
||||
webxr_registry: webxr_api::Registry,
|
||||
player_context: WindowGLContext,
|
||||
webgl_threads: Option<WebGLThreads>,
|
||||
glplayer_threads: Option<GLPlayerThreads>,
|
||||
event_loop_waker: Option<Box<dyn EventLoopWaker>>,
|
||||
initial_window_size: WindowSizeData,
|
||||
external_images: Arc<Mutex<WebrenderExternalImageRegistry>>,
|
||||
wgpu_image_map: Arc<Mutex<HashMap<u64, webgpu::PresentationData>>>,
|
||||
) -> Sender<ConstellationMsg> {
|
||||
// Global configuration options, parsed from the command line.
|
||||
let opts = opts::get();
|
||||
|
@ -896,12 +911,15 @@ fn create_constellation(
|
|||
time_profiler_chan,
|
||||
mem_profiler_chan,
|
||||
webrender_document,
|
||||
webrender_api_sender,
|
||||
webxr_registry,
|
||||
webgl_threads,
|
||||
glplayer_threads,
|
||||
player_context,
|
||||
event_loop_waker,
|
||||
user_agent,
|
||||
webrender_external_images: external_images,
|
||||
wgpu_image_map,
|
||||
};
|
||||
|
||||
let constellation_chan = Constellation::<
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue