aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2018-09-10 19:21:45 -0400
committerGitHub <noreply@github.com>2018-09-10 19:21:45 -0400
commitb0ee750fba3f310c7617a7e8eb15c7c614216556 (patch)
tree4aa80cc115ed9b374d6fa698ba41f56fc2141bd6 /components/script/dom
parent795e7f60029ec8d6be23bbac007ac2100abdabe1 (diff)
parentdac7740b8c1be31c1457dbc48ad26baaa1bb8ed7 (diff)
downloadservo-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.rs47
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
-}