aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglrenderingcontext.rs
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2018-09-10 12:55:57 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2018-09-10 14:13:23 +0200
commitdac7740b8c1be31c1457dbc48ad26baaa1bb8ed7 (patch)
tree0a5117692ea5353531062b38218b79348a2b207e /components/script/dom/webglrenderingcontext.rs
parente1486f7d711f8d6f9a11c7ba863465a6a8e91938 (diff)
downloadservo-dac7740b8c1be31c1457dbc48ad26baaa1bb8ed7.tar.gz
servo-dac7740b8c1be31c1457dbc48ad26baaa1bb8ed7.zip
Reuse input buffer for RGB/UNSIGNED_BYTE in rgba8_image_to_tex_image_data
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r--components/script/dom/webglrenderingcontext.rs15
1 files 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::<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 {