add back buffer support to agl

This commit is contained in:
Able 2023-05-08 21:56:10 -05:00
parent 7881ee2881
commit 9239fe7f9e
2 changed files with 17 additions and 1 deletions

View file

@ -7,6 +7,8 @@ use embedded_graphics::{
pub struct Display { pub struct Display {
pub fb: *mut u32, pub fb: *mut u32,
// Back buffer
pub bb: *mut u32,
pub size: Size, pub size: Size,
pub color: Rgb888, pub color: Rgb888,
} }
@ -15,6 +17,15 @@ impl Display {
pub fn set_color(&mut self, color: Rgb888) { pub fn set_color(&mut self, color: Rgb888) {
self.color = color; self.color = color;
} }
pub fn swap_buffers(&mut self) {
let size: usize = (self.size.height * self.size.width).try_into().unwrap();
unsafe {
let dst_ptr = self.fb;
let src_ptr = self.bb;
core::ptr::copy_nonoverlapping(src_ptr, dst_ptr, size);
}
}
pub fn line( pub fn line(
&mut self, &mut self,
@ -53,7 +64,7 @@ impl DrawTarget for Display {
return Err(BlitOutOfBoundsError); return Err(BlitOutOfBoundsError);
} }
self.fb self.bb
.add( .add(
(pos_y * self.size.width + pos_x) (pos_y * self.size.width + pos_x)
.try_into() .try_into()

View file

@ -0,0 +1,5 @@
Type Coordinate = i32;
Type Coordinates = (Coordinate, Coordinate);
Function line Takes(Coordinates, Coordinates) Returns(Nothing);