From dac7740b8c1be31c1457dbc48ad26baaa1bb8ed7 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 10 Sep 2018 12:55:57 +0200 Subject: [PATCH] Reuse input buffer for RGB/UNSIGNED_BYTE in rgba8_image_to_tex_image_data --- components/script/dom/webglrenderingcontext.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 9b99f598d51..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::::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 {