mirror of
https://github.com/servo/servo.git
synced 2025-07-05 22:43:40 +01:00
Get the servo
crate building with the new WebRender
This commit is contained in:
parent
6b9924bec4
commit
e57e2121b2
6 changed files with 28 additions and 14 deletions
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
|
@ -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!")
|
||||||
};
|
};
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue