From 1e5e3c95c93236f6564cccd38b95f2c60e855ff2 Mon Sep 17 00:00:00 2001 From: Alan Jeffrey Date: Fri, 14 Jun 2019 14:39:20 -0500 Subject: [PATCH] Pass events loop to glwindow test webvr implementation --- Cargo.lock | 20 ++++++++++---------- components/webvr/Cargo.toml | 4 ++-- components/webvr_traits/Cargo.toml | 2 +- ports/glutin/Cargo.toml | 2 +- ports/glutin/embedder.rs | 7 ++++++- ports/glutin/events_loop.rs | 3 +++ ports/libmlservo/Cargo.toml | 2 +- 7 files changed, 24 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7064e2d21553..38517119285a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2434,7 +2434,7 @@ dependencies = [ "libc 0.2.53 (registry+https://github.com/rust-lang/crates.io-index)", "libservo 0.0.1", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-webvr 0.11.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rust-webvr 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "simpleservo 0.0.1", "smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3626,7 +3626,7 @@ dependencies = [ [[package]] name = "rust-webvr" -version = "0.11.5" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bindgen 0.49.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3639,12 +3639,12 @@ dependencies = [ "libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "ovr-mobile-sys 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-webvr-api 0.11.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rust-webvr-api 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rust-webvr-api" -version = "0.11.4" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "android_injected_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3977,7 +3977,7 @@ dependencies = [ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "osmesa-src 0.1.0 (git+https://github.com/servo/osmesa-src)", "osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-webvr 0.11.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rust-webvr 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)", "sig 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "tinyfiledialogs 3.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -5309,8 +5309,8 @@ dependencies = [ "ipc-channel 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", - "rust-webvr 0.11.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-webvr-api 0.11.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rust-webvr 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rust-webvr-api 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "script_traits 0.0.1", "servo_config 0.0.1", "webvr_traits 0.0.1", @@ -5322,7 +5322,7 @@ version = "0.0.1" dependencies = [ "ipc-channel 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", - "rust-webvr-api 0.11.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rust-webvr-api 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -5843,8 +5843,8 @@ dependencies = [ "checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" "checksum ron 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "da06feaa07f69125ab9ddc769b11de29090122170b402547f64b86fe16ebc399" -"checksum rust-webvr 0.11.5 (registry+https://github.com/rust-lang/crates.io-index)" = "08ab7221a7ed14bfb24d8cbbec61926b9a54881a66e32f24f3a0b2efbe56fa02" -"checksum rust-webvr-api 0.11.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c8eb1d528c0d05ebf44126775b38eb3ec543f35a24275bb0360e45e3e3e8da73" +"checksum rust-webvr 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "db3a145f737e4bf51cd4f7d29262f2b2e46e76b116070cbbfc0959553b2e8006" +"checksum rust-webvr-api 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4f3a81b1acf3c6295f9c180e8ade671858865ee4e11d114ecf60974e86b2e0" "checksum rustc-demangle 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3058a43ada2c2d0b92b3ae38007a2d0fa5e9db971be260e0171408a4ff471c95" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum rusttype 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b8eb11f5b0a98c8eca2fb1483f42646d8c340e83e46ab416f8a063a0fd0eeb20" diff --git a/components/webvr/Cargo.toml b/components/webvr/Cargo.toml index 7d7511739061..ff627cd0fe5d 100644 --- a/components/webvr/Cargo.toml +++ b/components/webvr/Cargo.toml @@ -22,8 +22,8 @@ gleam = "0.6" ipc-channel = "0.11.2" log = "0.4" msg = {path = "../msg"} -rust-webvr = {version = "0.11.4", features = ["mock", "openvr", "vrexternal"]} -rust-webvr-api = "0.11.4" +rust-webvr = {version = "0.12", features = ["mock", "openvr", "vrexternal"]} +rust-webvr-api = "0.12" script_traits = {path = "../script_traits"} servo_config = {path = "../config"} webvr_traits = {path = "../webvr_traits" } diff --git a/components/webvr_traits/Cargo.toml b/components/webvr_traits/Cargo.toml index b1d986343ed2..dfd78a52bc76 100644 --- a/components/webvr_traits/Cargo.toml +++ b/components/webvr_traits/Cargo.toml @@ -13,5 +13,5 @@ path = "lib.rs" [dependencies] ipc-channel = "0.11" msg = {path = "../msg"} -rust-webvr-api = {version = "0.11.4", features = ["ipc"]} +rust-webvr-api = {version = "0.12", features = ["ipc"]} serde = "1.0" diff --git a/ports/glutin/Cargo.toml b/ports/glutin/Cargo.toml index 2a6f1302d22c..11d861908002 100644 --- a/ports/glutin/Cargo.toml +++ b/ports/glutin/Cargo.toml @@ -54,7 +54,7 @@ lazy_static = "1" libservo = {path = "../../components/servo"} libc = "0.2" log = "0.4" -rust-webvr = { version = "0.11", features = ["glwindow"] } +rust-webvr = { version = "0.12", features = ["glwindow"] } tinyfiledialogs = "3.0" [target.'cfg(any(target_os = "linux", target_os = "windows"))'.dependencies] diff --git a/ports/glutin/embedder.rs b/ports/glutin/embedder.rs index b7c6b6134263..565f12fe5c03 100644 --- a/ports/glutin/embedder.rs +++ b/ports/glutin/embedder.rs @@ -8,6 +8,7 @@ use crate::app; use crate::events_loop::EventsLoop; use gleam::gl; use glutin; +use glutin::EventsLoopClosed; use glutin::dpi::LogicalSize; use rust_webvr::GlWindowVRService; use servo::compositing::windowing::EmbedderMethods; @@ -46,6 +47,10 @@ impl EmbedderMethods for EmbedderCallbacks { let name = String::from("Test VR Display"); let size = opts::get().initial_window_size.to_f64(); let size = LogicalSize::new(size.width, size.height); + let events_loop_clone = self.events_loop.clone(); + let events_loop_factory = Box::new(move || { + events_loop_clone.borrow_mut().take().ok_or(EventsLoopClosed) + }); let window_builder = glutin::WindowBuilder::new() .with_title(name.clone()) .with_dimensions(size) @@ -57,7 +62,7 @@ impl EmbedderMethods for EmbedderCallbacks { .build_windowed(window_builder, &*self.events_loop.borrow().as_winit()) .expect("Failed to create window."); let gl = self.gl.clone(); - let (service, heartbeat) = GlWindowVRService::new(name, context, gl); + let (service, heartbeat) = GlWindowVRService::new(name, context, events_loop_factory, gl); services.register(Box::new(service)); heartbeats.push(Box::new(heartbeat)); diff --git a/ports/glutin/events_loop.rs b/ports/glutin/events_loop.rs index fbe3cd57017f..d3afddef8fe4 100644 --- a/ports/glutin/events_loop.rs +++ b/ports/glutin/events_loop.rs @@ -44,6 +44,9 @@ impl EventsLoop { pub fn as_winit(&self) -> &glutin::EventsLoop { &self.0.as_ref().expect("Can't access winit event loop while using the fake headless event loop") } + pub fn take(&mut self) -> Option { + self.0.take() + } pub fn poll_events(&mut self, callback: F) where F: FnMut(glutin::Event) { if let Some(ref mut events_loop) = self.0 { events_loop.poll_events(callback); diff --git a/ports/libmlservo/Cargo.toml b/ports/libmlservo/Cargo.toml index f2b92ed63495..d641106b07c3 100644 --- a/ports/libmlservo/Cargo.toml +++ b/ports/libmlservo/Cargo.toml @@ -19,7 +19,7 @@ raqote_backend = ["simpleservo/raqote_backend"] [dependencies] libservo = { path = "../../components/servo", features = ["no_static_freetype"] } simpleservo = { path = "../libsimpleservo/api", features = ["no_static_freetype"] } -rust-webvr = { version = "0.11", features = ["magicleap"] } +rust-webvr = { version = "0.12", features = ["magicleap"] } libc = "0.2" log = "0.4" servo-egl = "0.2"