diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-09-10 19:21:45 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-10 19:21:45 -0400 |
commit | b0ee750fba3f310c7617a7e8eb15c7c614216556 (patch) | |
tree | 4aa80cc115ed9b374d6fa698ba41f56fc2141bd6 /components/script/dom | |
parent | 795e7f60029ec8d6be23bbac007ac2100abdabe1 (diff) | |
parent | dac7740b8c1be31c1457dbc48ad26baaa1bb8ed7 (diff) | |
download | servo-b0ee750fba3f310c7617a7e8eb15c7c614216556.tar.gz servo-b0ee750fba3f310c7617a7e8eb15c7c614216556.zip |
Auto merge of #21660 - servo:webgl, r=jdm
Some more drive-by fixes for rgba8_image_to_tex_image_data
<!-- 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/21660)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 47 |
1 files changed, 18 insertions, 29 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index d227af7ea1a..ab7178ffa16 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -4017,14 +4017,15 @@ fn rgba8_image_to_tex_image_data( match (format, data_type) { (TexFormat::RGBA, TexDataType::UnsignedByte) => pixels, (TexFormat::RGB, TexDataType::UnsignedByte) => { - // Remove alpha channel - let mut rgb8 = Vec::<u8>::with_capacity(pixel_count * 3); - for rgba8 in pixels.chunks(4) { - rgb8.push(rgba8[0]); - rgb8.push(rgba8[1]); - rgb8.push(rgba8[2]); + for i in 0..pixel_count { + let rgb = { + let rgb = &pixels[i * 4..i * 4 + 3]; + [rgb[0], rgb[1], rgb[2]] + }; + pixels[i * 3..i * 3 + 3].copy_from_slice(&rgb); } - rgb8 + pixels.truncate(pixel_count * 3); + pixels }, (TexFormat::Alpha, TexDataType::UnsignedByte) => { for i in 0..pixel_count { @@ -4126,8 +4127,8 @@ fn rgba8_image_to_tex_image_data( (TexFormat::Luminance, TexDataType::Float) => { for rgba8 in pixels.chunks_mut(4) { - let p = luminance(rgba8[0], rgba8[1], rgba8[2]); - NativeEndian::write_f32(rgba8, p as f32); + let p = rgba8[0] as f32; + NativeEndian::write_f32(rgba8, p); } pixels }, @@ -4135,8 +4136,7 @@ fn rgba8_image_to_tex_image_data( (TexFormat::LuminanceAlpha, TexDataType::Float) => { let mut data = Vec::<u8>::with_capacity(pixel_count * 8); for rgba8 in pixels.chunks(4) { - let p = luminance(rgba8[0], rgba8[1], rgba8[2]); - data.write_f32::<NativeEndian>(p as f32).unwrap(); + data.write_f32::<NativeEndian>(rgba8[0] as f32).unwrap(); data.write_f32::<NativeEndian>(rgba8[3] as f32).unwrap(); } data @@ -4172,23 +4172,20 @@ fn rgba8_image_to_tex_image_data( }, (TexFormat::Luminance, TexDataType::HalfFloat) => { for i in 0..pixel_count { - let p = { - let rgb = &pixels[i * 4..i * 4 + 3]; - f16::from_f32(luminance(rgb[0], rgb[1], rgb[2]) as f32).as_bits() - }; + let p = f16::from_f32(pixels[i * 4] as f32).as_bits(); NativeEndian::write_u16(&mut pixels[i * 2..i * 2 + 2], p); } pixels.truncate(pixel_count * 2); pixels }, (TexFormat::LuminanceAlpha, TexDataType::HalfFloat) => { - let mut data = Vec::<u8>::with_capacity(pixel_count * 8); - for rgba8 in pixels.chunks(4) { - let p = luminance(rgba8[0], rgba8[1], rgba8[2]); - data.write_u16::<NativeEndian>(f16::from_f32(p as f32).as_bits()).unwrap(); - data.write_u16::<NativeEndian>(f16::from_f32(rgba8[3] as f32).as_bits()).unwrap(); + for rgba8 in pixels.chunks_mut(4) { + let lum = f16::from_f32(rgba8[0] as f32).as_bits(); + let a = f16::from_f32(rgba8[3] as f32).as_bits(); + NativeEndian::write_u16(&mut rgba8[0..2], lum); + NativeEndian::write_u16(&mut rgba8[2..4], a); } - data + pixels }, // Validation should have ensured that we only hit the @@ -4197,11 +4194,3 @@ fn rgba8_image_to_tex_image_data( _ => unreachable!("Unsupported formats {:?} {:?}", format, data_type) } } - -// https://en.wikipedia.org/wiki/Relative_luminance -#[inline] -fn luminance(r: u8, g: u8, b: u8) -> u8 { - (0.2126 * (r as f32) + - 0.7152 * (g as f32) + - 0.0722 * (b as f32)) as u8 -} |