Merge pull request #875 from ZakisM/optimize_svg_algorithm

This commit optimizes the algorithm used to convert rgba pixels into bgra pixels for SVG's.
This commit is contained in:
Héctor Ramón 2021-05-17 19:51:17 +07:00 committed by GitHub
commit 70ee917bac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,7 +1,8 @@
use crate::image::atlas::{self, Atlas};
use iced_native::svg;
use std::collections::{HashMap, HashSet};
use crate::image::atlas::{self, Atlas};
pub enum Svg {
Loaded(usvg::Tree),
NotFound,
@ -111,26 +112,13 @@ impl Cache {
let width = img.width();
let height = img.height();
let mut rgba = img.take().into_iter();
// TODO: Perform conversion in the GPU
let bgra: Vec<u8> = std::iter::from_fn(move || {
use std::iter::once;
let r = rgba.next()?;
let g = rgba.next()?;
let b = rgba.next()?;
let a = rgba.next()?;
Some(once(b).chain(once(g)).chain(once(r)).chain(once(a)))
})
.flatten()
.collect();
let mut rgba = img.take();
rgba.chunks_exact_mut(4).for_each(|rgba| rgba.swap(0, 2));
let allocation = texture_atlas.upload(
width,
height,
bytemuck::cast_slice(bgra.as_slice()),
bytemuck::cast_slice(rgba.as_slice()),
device,
encoder,
)?;