From 938a05428aede1ddf65258d2d259baba9a5866b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Sun, 1 Nov 2015 14:47:46 +0100 Subject: [PATCH] servo/main: Load gl symbols in headless mode This allows running WebGL reftests in wpt. --- components/servo/Cargo.lock | 1 + components/servo/Cargo.toml | 3 +++ components/servo/main.rs | 16 ++++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 446af0a8638..56143d3776d 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -24,6 +24,7 @@ dependencies = [ "net 0.0.1", "net_tests 0.0.1", "net_traits 0.0.1", + "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", "profile 0.0.1", "profile_traits 0.0.1", "script 0.0.1", diff --git a/components/servo/Cargo.toml b/components/servo/Cargo.toml index db611072946..d1bb7634689 100644 --- a/components/servo/Cargo.toml +++ b/components/servo/Cargo.toml @@ -133,6 +133,9 @@ features = ["plugins"] [dependencies.gleam] version = "0.1" +[dependencies.offscreen_gl_context] +git = "https://github.com/ecoal95/rust-offscreen-rendering-context" + [dependencies] env_logger = "0.3" time = "0.1.12" diff --git a/components/servo/main.rs b/components/servo/main.rs index b339babb972..6d830e7be73 100644 --- a/components/servo/main.rs +++ b/components/servo/main.rs @@ -29,12 +29,25 @@ extern crate log; extern crate servo; extern crate time; +extern crate gleam; +extern crate offscreen_gl_context; + +use gleam::gl; +use offscreen_gl_context::GLContext; use servo::Browser; use servo::compositing::windowing::WindowEvent; use servo::net_traits::hosts; use servo::util::opts; use std::rc::Rc; +#[cfg(not(target_os = "android"))] +fn load_gl_when_headless() { + gl::load_with(|addr| GLContext::get_proc_address(addr) as *const _); +} + +#[cfg(target_os = "android")] +fn load_gl_when_headless() {} + fn main() { env_logger::init().unwrap(); @@ -47,6 +60,9 @@ fn main() { hosts::global_init(); let window = if opts::get().headless { + // Load gl functions even when in headless mode, + // to avoid crashing with webgl + load_gl_when_headless(); None } else { Some(app::create_window(std::ptr::null_mut()))