lib8: implement layer blending

This commit is contained in:
Victoria Fischer 2024-10-30 21:54:27 +01:00
parent 6fc4cb224f
commit 18287783d4
2 changed files with 11 additions and 1 deletions

View File

@ -2,6 +2,16 @@ use palette::encoding::srgb::Srgb;
use rgb::RGB8;
pub trait Rgb8Blend {
fn saturating_add(&self, b: Self) -> Self;
}
impl Rgb8Blend for RGB8 {
fn saturating_add(&self, b: Self) -> Self {
RGB8::new(self.r.saturating_add(b.r), self.g.saturating_add(b.g), self.b.saturating_add(b.b))
}
}
pub trait IntoRgb8 {
fn into_rgb8(self) -> RGB8;
}

View File

@ -103,7 +103,7 @@ impl<T: LedPixelShape, S: Surface> Display<S> for EmbeddedDisplay<Ws2812DrawTarg
let mut pixel = RGB8::new(0, 0, 0);
for surface in self.surfaces.iter() {
surface.with_shader(|shader| {
pixel = shader.draw(virtCoords.clone());
pixel = pixel.saturating_add(shader.draw(virtCoords.clone()));
})
}
self.total_mw += pixel.as_milliwatts();