Get the servo crate building with the new WebRender

This commit is contained in:
Patrick Walton 2019-06-04 21:39:59 -07:00 committed by Josh Matthews
parent 6b9924bec4
commit e57e2121b2
6 changed files with 28 additions and 14 deletions

View file

@ -32,7 +32,7 @@ use script_traits::{
MouseButton, MouseEventType, ScrollState, TouchEventType, TouchId, WheelDelta, MouseButton, MouseEventType, ScrollState, TouchEventType, TouchId, WheelDelta,
}; };
use script_traits::{UntrustedNodeAddress, WindowSizeData, WindowSizeType}; use script_traits::{UntrustedNodeAddress, WindowSizeData, WindowSizeType};
use servo_geometry::DeviceIndependentPixel; use servo_geometry::{DeviceIndependentPixel, FramebufferUintLength};
use std::collections::HashMap; use std::collections::HashMap;
use std::env; use std::env;
use std::fs::{create_dir_all, File}; use std::fs::{create_dir_all, File};
@ -1268,7 +1268,9 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
CompositeTarget::Window => gl::RenderTargetInfo::default(), CompositeTarget::Window => gl::RenderTargetInfo::default(),
#[cfg(feature = "gl")] #[cfg(feature = "gl")]
CompositeTarget::WindowAndPng | CompositeTarget::PngFile => { CompositeTarget::WindowAndPng | CompositeTarget::PngFile => {
gl::initialize_png(&*self.window.gl(), width, height) gl::initialize_png(&*self.window.gl(),
FramebufferUintLength::new(width.get()),
FramebufferUintLength::new(height.get()))
}, },
#[cfg(not(feature = "gl"))] #[cfg(not(feature = "gl"))]
_ => (), _ => (),
@ -1330,7 +1332,10 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
CompositeTarget::Window => None, CompositeTarget::Window => None,
#[cfg(feature = "gl")] #[cfg(feature = "gl")]
CompositeTarget::WindowAndPng => { CompositeTarget::WindowAndPng => {
let img = gl::draw_img(&*self.window.gl(), rt_info, width, height); let img = gl::draw_img(&*self.window.gl(),
rt_info,
FramebufferUintLength::new(width.get()),
FramebufferUintLength::new(height.get()));
Some(Image { Some(Image {
width: img.width(), width: img.width(),
height: img.height(), height: img.height(),
@ -1349,7 +1354,10 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
|| match self.output_file.as_ref() { || match self.output_file.as_ref() {
Some(path) => match File::create(path) { Some(path) => match File::create(path) {
Ok(mut file) => { Ok(mut file) => {
let img = gl::draw_img(gl, rt_info, width, height); let img = gl::draw_img(gl,
rt_info,
FramebufferUintLength::new(width.get()),
FramebufferUintLength::new(height.get()));
let dynamic_image = DynamicImage::ImageRgb8(img); let dynamic_image = DynamicImage::ImageRgb8(img);
if let Err(e) = dynamic_image.write_to(&mut file, ImageFormat::PNG) if let Err(e) = dynamic_image.write_to(&mut file, ImageFormat::PNG)
{ {

View file

@ -21,7 +21,7 @@ use std::time::Duration;
use style_traits::DevicePixel; use style_traits::DevicePixel;
use webrender_api::ScrollLocation; use webrender_api::ScrollLocation;
use webrender_api::units::{DeviceIntPoint, DeviceIntRect, DeviceIntSize}; use webrender_api::units::{DeviceIntPoint, DeviceIntRect, DeviceIntSize};
use webrender_api::units::{DevicePoint, FramebufferIntSize}; use webrender_api::units::DevicePoint;
use webvr::VRServiceManager; use webvr::VRServiceManager;
use webvr_traits::WebVRMainThreadHeartbeat; use webvr_traits::WebVRMainThreadHeartbeat;
@ -191,7 +191,7 @@ pub struct EmbedderCoordinates {
/// Size of the native window. /// Size of the native window.
pub window: (DeviceIntSize, DeviceIntPoint), pub window: (DeviceIntSize, DeviceIntPoint),
/// Size of the GL buffer in the window. /// Size of the GL buffer in the window.
pub framebuffer: FramebufferIntSize, pub framebuffer: DeviceIntSize,
/// Coordinates of the document within the framebuffer. /// Coordinates of the document within the framebuffer.
pub viewport: DeviceIntRect, pub viewport: DeviceIntRect,
} }

View file

@ -84,6 +84,7 @@ use constellation::{FromCompositorLogger, FromScriptLogger};
use crossbeam_channel::{unbounded, Sender}; use crossbeam_channel::{unbounded, Sender};
use embedder_traits::{EmbedderMsg, EmbedderProxy, EmbedderReceiver, EventLoopWaker}; use embedder_traits::{EmbedderMsg, EmbedderProxy, EmbedderReceiver, EventLoopWaker};
use env_logger::Builder as EnvLoggerBuilder; use env_logger::Builder as EnvLoggerBuilder;
use euclid::TypedSize2D;
#[cfg(all( #[cfg(all(
not(target_os = "windows"), not(target_os = "windows"),
not(target_os = "ios"), not(target_os = "ios"),
@ -303,11 +304,16 @@ where
let render_notifier = Box::new(RenderNotifier::new(compositor_proxy.clone())); let render_notifier = Box::new(RenderNotifier::new(compositor_proxy.clone()));
// Cast from `DeviceIndependentPixel` to `DevicePixel`
let device_pixel_ratio = coordinates.hidpi_factor.get();
let window_size = TypedSize2D::from_untyped(
&(opts.initial_window_size.to_f32() / device_pixel_ratio).to_i32().to_untyped());
webrender::Renderer::new( webrender::Renderer::new(
window.gl(), window.gl(),
render_notifier, render_notifier,
webrender::RendererOptions { webrender::RendererOptions {
device_pixel_ratio: coordinates.hidpi_factor.get(), device_pixel_ratio,
resource_override_path: opts.shaders_dir.clone(), resource_override_path: opts.shaders_dir.clone(),
enable_aa: opts.enable_text_antialiasing, enable_aa: opts.enable_text_antialiasing,
debug_flags: debug_flags, debug_flags: debug_flags,
@ -323,6 +329,7 @@ where
..Default::default() ..Default::default()
}, },
None, None,
window_size,
) )
.expect("Unable to initialize webrender!") .expect("Unable to initialize webrender!")
}; };

View file

@ -27,9 +27,8 @@ use servo::script_traits::{TouchEventType, WheelMode, WheelDelta};
use servo::servo_config::{opts, pref}; use servo::servo_config::{opts, pref};
use servo::servo_geometry::DeviceIndependentPixel; use servo::servo_geometry::DeviceIndependentPixel;
use servo::style_traits::DevicePixel; use servo::style_traits::DevicePixel;
use servo::webrender_api::{ use servo::webrender_api::ScrollLocation;
DeviceIntPoint, DeviceIntRect, DeviceIntSize, FramebufferIntSize, ScrollLocation, use servo::webrender_api::units::{DeviceIntPoint, DeviceIntRect, DeviceIntSize};
};
use servo_media::player::context::{GlApi, GlContext as PlayerGLContext, NativeDisplay}; use servo_media::player::context::{GlApi, GlContext as PlayerGLContext, NativeDisplay};
use std::cell::{Cell, RefCell}; use std::cell::{Cell, RefCell};
use std::mem; use std::mem;
@ -500,7 +499,7 @@ impl WindowMethods for Window {
.expect("Failed to get window inner size."); .expect("Failed to get window inner size.");
let inner_size = (TypedSize2D::new(width as f32, height as f32) * dpr).to_i32(); let inner_size = (TypedSize2D::new(width as f32, height as f32) * dpr).to_i32();
let viewport = DeviceIntRect::new(TypedPoint2D::zero(), inner_size); let viewport = DeviceIntRect::new(TypedPoint2D::zero(), inner_size);
let framebuffer = FramebufferIntSize::from_untyped(&viewport.size.to_untyped()); let framebuffer = DeviceIntSize::from_untyped(&viewport.size.to_untyped());
EmbedderCoordinates { EmbedderCoordinates {
viewport, viewport,

View file

@ -13,7 +13,7 @@ use servo::compositing::windowing::{EmbedderCoordinates, WindowMethods};
use servo::servo_config::opts; use servo::servo_config::opts;
use servo::servo_geometry::DeviceIndependentPixel; use servo::servo_geometry::DeviceIndependentPixel;
use servo::style_traits::DevicePixel; use servo::style_traits::DevicePixel;
use servo::webrender_api::{DeviceIntRect, FramebufferIntSize}; use servo::webrender_api::units::{DeviceIntRect, DeviceIntSize};
use servo_media::player::context as MediaPlayerCtxt; use servo_media::player::context as MediaPlayerCtxt;
use std::cell::Cell; use std::cell::Cell;
#[cfg(any(target_os = "linux", target_os = "macos"))] #[cfg(any(target_os = "linux", target_os = "macos"))]
@ -178,7 +178,7 @@ impl WindowMethods for Window {
let size = let size =
(TypedSize2D::new(self.context.width, self.context.height).to_f32() * dpr).to_i32(); (TypedSize2D::new(self.context.width, self.context.height).to_f32() * dpr).to_i32();
let viewport = DeviceIntRect::new(TypedPoint2D::zero(), size); let viewport = DeviceIntRect::new(TypedPoint2D::zero(), size);
let framebuffer = FramebufferIntSize::from_untyped(&size.to_untyped()); let framebuffer = DeviceIntSize::from_untyped(&size.to_untyped());
EmbedderCoordinates { EmbedderCoordinates {
viewport, viewport,
framebuffer, framebuffer,

View file

@ -8,7 +8,7 @@
use glutin; use glutin;
use servo::compositing::windowing::{WindowEvent, WindowMethods}; use servo::compositing::windowing::{WindowEvent, WindowMethods};
use servo::embedder_traits::Cursor; use servo::embedder_traits::Cursor;
use servo::webrender_api::{DeviceIntPoint, DeviceIntSize}; use servo::webrender_api::units::{DeviceIntPoint, DeviceIntSize};
// This should vary by zoom level and maybe actual text size (focused or under cursor) // This should vary by zoom level and maybe actual text size (focused or under cursor)
pub const LINE_HEIGHT: f32 = 38.0; pub const LINE_HEIGHT: f32 = 38.0;