Auto merge of #15899 - glennw:wr-update-premultiply, r=nox

Update WR (pre-multiplied alpha)

<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15899)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2017-03-10 02:27:23 -08:00 committed by GitHub
commit b97b0fd7cc
7 changed files with 26 additions and 5 deletions

4
Cargo.lock generated
View file

@ -3178,7 +3178,7 @@ dependencies = [
[[package]] [[package]]
name = "webrender" name = "webrender"
version = "0.23.0" version = "0.23.0"
source = "git+https://github.com/servo/webrender#bfef6dbb9fe69a8c408568c85b392186d3853477" source = "git+https://github.com/servo/webrender#94f255dfae21d9e66041a07f5fbcf2cdd2c73208"
dependencies = [ dependencies = [
"app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"bincode 1.0.0-alpha2 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 1.0.0-alpha2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3206,7 +3206,7 @@ dependencies = [
[[package]] [[package]]
name = "webrender_traits" name = "webrender_traits"
version = "0.24.0" version = "0.24.0"
source = "git+https://github.com/servo/webrender#bfef6dbb9fe69a8c408568c85b392186d3853477" source = "git+https://github.com/servo/webrender#94f255dfae21d9e66041a07f5fbcf2cdd2c73208"
dependencies = [ dependencies = [
"app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",

View file

@ -1327,7 +1327,7 @@ impl<Window: WindowMethods> IOCompositor<Window> {
} }
fn update_page_zoom_for_webrender(&mut self) { fn update_page_zoom_for_webrender(&mut self) {
let page_zoom = webrender_traits::PageZoomFactor::new(self.page_zoom.get()); let page_zoom = webrender_traits::ZoomFactor::new(self.page_zoom.get());
self.webrender_api.set_page_zoom(page_zoom); self.webrender_api.set_page_zoom(page_zoom);
} }

View file

@ -336,6 +336,21 @@ fn get_placeholder_image(webrender_api: &webrender_traits::RenderApi) -> io::Res
Ok(Arc::new(image)) Ok(Arc::new(image))
} }
fn premultiply(data: &mut [u8]) {
let length = data.len();
for i in (0..length).step_by(4) {
let b = data[i + 0] as u32;
let g = data[i + 1] as u32;
let r = data[i + 2] as u32;
let a = data[i + 3] as u32;
data[i + 0] = (b * a / 255) as u8;
data[i + 1] = (g * a / 255) as u8;
data[i + 2] = (r * a / 255) as u8;
}
}
impl ImageCache { impl ImageCache {
fn run(webrender_api: webrender_traits::RenderApi, fn run(webrender_api: webrender_traits::RenderApi,
ipc_command_receiver: IpcReceiver<ImageCacheCommand>) { ipc_command_receiver: IpcReceiver<ImageCacheCommand>) {
@ -484,6 +499,9 @@ impl ImageCache {
let format = convert_format(image.format); let format = convert_format(image.format);
let mut bytes = Vec::new(); let mut bytes = Vec::new();
bytes.extend_from_slice(&*image.bytes); bytes.extend_from_slice(&*image.bytes);
if format == webrender_traits::ImageFormat::RGBA8 {
premultiply(bytes.as_mut_slice());
}
let descriptor = webrender_traits::ImageDescriptor { let descriptor = webrender_traits::ImageDescriptor {
width: image.width, width: image.width,
height: image.height, height: image.height,

View file

@ -5,6 +5,7 @@
#![deny(unsafe_code)] #![deny(unsafe_code)]
#![feature(box_syntax)] #![feature(box_syntax)]
#![feature(mpsc_select)] #![feature(mpsc_select)]
#![feature(step_by)]
extern crate brotli; extern crate brotli;
extern crate cookie as cookie_rs; extern crate cookie as cookie_rs;

View file

@ -31256,7 +31256,7 @@
"support" "support"
], ],
"mozilla/webgl/tex_image_2d_mipmap.html": [ "mozilla/webgl/tex_image_2d_mipmap.html": [
"80f79d8804ee9cdb2b12c02223bf1e15854122d7", "b4d54f0f58f75ff622a9c3f9bab3f59d9f1fb0e7",
"reftest" "reftest"
], ],
"mozilla/webgl/tex_image_2d_mipmap_ref.html": [ "mozilla/webgl/tex_image_2d_mipmap_ref.html": [
@ -31264,7 +31264,7 @@
"support" "support"
], ],
"mozilla/webgl/tex_image_2d_simple.html": [ "mozilla/webgl/tex_image_2d_simple.html": [
"636673ea0aa2a16f4aec362ca40cd82e78ff3396", "1811000d21dcdb5d27c67afbf22e77a83c6820d6",
"reftest" "reftest"
], ],
"mozilla/webgl/tex_image_2d_simple_ref.html": [ "mozilla/webgl/tex_image_2d_simple_ref.html": [

View file

@ -106,6 +106,7 @@
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
gl.generateMipmap(gl.TEXTURE_2D); gl.generateMipmap(gl.TEXTURE_2D);

View file

@ -106,6 +106,7 @@
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
gl.drawArrays(gl.TRIANGLES, 0, 6); gl.drawArrays(gl.TRIANGLES, 0, 6);