mirror of
https://github.com/servo/servo.git
synced 2025-07-08 07:53:40 +01:00
Update WR (radial gradients, subpixel positioning, tiling changes).
This commit is contained in:
parent
71deabc8bc
commit
4cbefe82b5
13 changed files with 117 additions and 61 deletions
|
@ -559,9 +559,13 @@ impl<'a> CanvasPaintThread<'a> {
|
|||
self.drawtarget.snapshot().get_data_surface().with_data(|element| {
|
||||
let size = self.drawtarget.get_size();
|
||||
self.webrender_api.update_image(self.webrender_image_key,
|
||||
size.width as u32,
|
||||
size.height as u32,
|
||||
webrender_traits::ImageFormat::RGBA8,
|
||||
webrender_traits::ImageDescriptor {
|
||||
width: size.width as u32,
|
||||
height: size.height as u32,
|
||||
stride: None,
|
||||
format: webrender_traits::ImageFormat::RGBA8,
|
||||
is_opaque: false,
|
||||
},
|
||||
element.into());
|
||||
|
||||
let data = CanvasImageData {
|
||||
|
|
|
@ -236,9 +236,13 @@ impl WebGLPaintThread {
|
|||
// TODO: This shouldn't be a common path, but try to avoid
|
||||
// the spurious clone().
|
||||
webrender_api.update_image(image_key,
|
||||
width as u32,
|
||||
height as u32,
|
||||
webrender_traits::ImageFormat::RGBA8,
|
||||
webrender_traits::ImageDescriptor {
|
||||
width: width as u32,
|
||||
height: height as u32,
|
||||
stride: None,
|
||||
format: webrender_traits::ImageFormat::RGBA8,
|
||||
is_opaque: false,
|
||||
},
|
||||
pixels.clone());
|
||||
|
||||
let image_data = CanvasImageData {
|
||||
|
|
|
@ -739,6 +739,7 @@ impl<Window: WindowMethods> IOCompositor<Window> {
|
|||
|
||||
let pipeline_id = frame_tree.pipeline.id.to_webrender();
|
||||
self.webrender_api.set_root_pipeline(pipeline_id);
|
||||
self.webrender_api.generate_frame();
|
||||
|
||||
self.create_pipeline_details_for_frame_tree(&frame_tree);
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ features = ["serde_derive", "ipc"]
|
|||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
byteorder = "0.5"
|
||||
core-foundation = "0.2"
|
||||
core-graphics = "0.4"
|
||||
core-graphics = "0.5"
|
||||
core-text = "2.0"
|
||||
|
||||
[target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies]
|
||||
|
|
|
@ -246,7 +246,8 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
item.text_run.font_key,
|
||||
item.text_color,
|
||||
item.text_run.actual_pt_size,
|
||||
item.blur_radius);
|
||||
item.blur_radius,
|
||||
None);
|
||||
}
|
||||
}
|
||||
DisplayItem::Image(ref item) => {
|
||||
|
|
|
@ -988,6 +988,7 @@ impl LayoutThread {
|
|||
webrender_traits::Epoch(epoch_number),
|
||||
viewport_size,
|
||||
builder);
|
||||
self.webrender_api.generate_frame();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,26 @@ use webrender_traits;
|
|||
/// MAYBE(Yoric):
|
||||
/// * For faster lookups, it might be useful to store the LoadKey in the DOM once we have performed a first load.
|
||||
|
||||
// TODO(gw): This is a port of the old is_image_opaque code from WR.
|
||||
// Consider using SIMD to speed this up if it shows in profiles.
|
||||
fn is_image_opaque(format: webrender_traits::ImageFormat, bytes: &[u8]) -> bool {
|
||||
match format {
|
||||
webrender_traits::ImageFormat::RGBA8 => {
|
||||
let mut is_opaque = true;
|
||||
for i in 0..(bytes.len() / 4) {
|
||||
if bytes[i * 4 + 3] != 255 {
|
||||
is_opaque = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
is_opaque
|
||||
}
|
||||
webrender_traits::ImageFormat::RGB8 => true,
|
||||
webrender_traits::ImageFormat::A8 => false,
|
||||
webrender_traits::ImageFormat::Invalid | webrender_traits::ImageFormat::RGBAF32 => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Represents an image that is either being loaded
|
||||
/// by the resource thread, or decoded by a worker thread.
|
||||
struct PendingLoad {
|
||||
|
@ -314,12 +334,15 @@ fn get_placeholder_image(webrender_api: &webrender_traits::RenderApi) -> io::Res
|
|||
let format = convert_format(image.format);
|
||||
let mut bytes = Vec::new();
|
||||
bytes.extend_from_slice(&*image.bytes);
|
||||
let descriptor = webrender_traits::ImageDescriptor {
|
||||
width: image.width,
|
||||
height: image.height,
|
||||
stride: None,
|
||||
format: format,
|
||||
is_opaque: is_image_opaque(format, &bytes),
|
||||
};
|
||||
let data = webrender_traits::ImageData::new(bytes);
|
||||
image.id = Some(webrender_api.add_image(image.width,
|
||||
image.height,
|
||||
None,
|
||||
format,
|
||||
data));
|
||||
image.id = Some(webrender_api.add_image(descriptor, data));
|
||||
Ok(Arc::new(image))
|
||||
}
|
||||
|
||||
|
@ -476,12 +499,15 @@ impl ImageCache {
|
|||
let format = convert_format(image.format);
|
||||
let mut bytes = Vec::new();
|
||||
bytes.extend_from_slice(&*image.bytes);
|
||||
let descriptor = webrender_traits::ImageDescriptor {
|
||||
width: image.width,
|
||||
height: image.height,
|
||||
stride: None,
|
||||
format: format,
|
||||
is_opaque: is_image_opaque(format, &bytes),
|
||||
};
|
||||
let data = webrender_traits::ImageData::new(bytes);
|
||||
image.id = Some(self.webrender_api.add_image(image.width,
|
||||
image.height,
|
||||
None,
|
||||
format,
|
||||
data));
|
||||
image.id = Some(self.webrender_api.add_image(descriptor, data));
|
||||
}
|
||||
LoadResult::PlaceholderLoaded(..) | LoadResult::None => {}
|
||||
}
|
||||
|
|
|
@ -162,13 +162,21 @@ impl<Window> Browser<Window> where Window: WindowMethods + 'static {
|
|||
webrender_traits::RendererKind::Native
|
||||
};
|
||||
|
||||
let recorder = if opts.webrender_record {
|
||||
let record_path = PathBuf::from("wr-record.bin");
|
||||
let recorder = Box::new(webrender::BinaryRecorder::new(&record_path));
|
||||
Some(recorder as Box<webrender::ApiRecordingReceiver>)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
webrender::Renderer::new(webrender::RendererOptions {
|
||||
device_pixel_ratio: device_pixel_ratio,
|
||||
resource_override_path: Some(resource_path),
|
||||
enable_aa: opts.enable_text_antialiasing,
|
||||
enable_profiler: opts.webrender_stats,
|
||||
debug: opts.webrender_debug,
|
||||
enable_recording: opts.webrender_record,
|
||||
recorder: recorder,
|
||||
precache_shaders: opts.precache_shaders,
|
||||
enable_scrollbars: opts.output_file.is_none(),
|
||||
renderer_kind: renderer_kind,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue