pub struct RgbBuffer<'s, const X: usize, const Y: usize, D: HasDisplayHandle, W: HasWindowHandle> {
pub buffer: Buffer<'s, D, W>,
pub pixels: &'s mut [[Color; X]],
}
Expand description
An RgbBuffer
contains a softbuffer buffer
and pixels
, a mutable slice of the same data.
buffer
and pixels
reference the same underlying data.
Modifying the elements of one will affect the values of the other.
Color data is represented as a 4-element array where the first element is always 0.
This will align the color data correctly for softbuffer
.
Generic parameters:
X
andY
are the width and height of the surface. This should always match the actual dimensions of the underlyingSurface
.D
andW
are generics that should match those of theBuffer<D, W>
.
Fields§
§buffer: Buffer<'s, D, W>
The “raw” softbuffer Buffer
.
pixels: &'s mut [[Color; X]]
The “raw” RGB pixel data as a 3D array where the axes are: Y
, X
, and 4 (XRGB).
Note that the order is: Y, X
. Therefore, to get the pixel at x=4, y=5
: self.pixels[y][x]
.
The color has four elements. The first element should always be 0, and the other three are R, G, and B: self.pixels[y][x] = [0, 200, 160, 30];
This will align the color data correctly for softbuffer
.
Do not reassign the entire array!
It’s a slice of self.buffer
.
If it’s something else, something bad might happen!
Implementations§
Source§impl<'s, const X: usize, const Y: usize, D: HasDisplayHandle, W: HasWindowHandle> RgbBuffer<'s, X, Y, D, W>
impl<'s, const X: usize, const Y: usize, D: HasDisplayHandle, W: HasWindowHandle> RgbBuffer<'s, X, Y, D, W>
Sourcepub fn from_softbuffer(buffer: Buffer<'s, D, W>) -> Result<Self, SizeError>
pub fn from_softbuffer(buffer: Buffer<'s, D, W>) -> Result<Self, SizeError>
Convert a Buffer
into an RgbBuffer
. This consumes buffer
and returns an RgbBuffer
.
This returns an Error
if X * Y != buffer.len()
(i.e. if the dimensions of the RgbBuffer
are invalid).
Sourcepub fn set_pixels(&mut self, positions: &[[usize; 2]], color: Color)
pub fn set_pixels(&mut self, positions: &[[usize; 2]], color: Color)
Set the color of multiple pixels.
positions
: A slice of[x, y]
positions.color
: The[0, r, g, b]
color.
Panics if any position in positions
is out of bounds.
Sourcepub fn fill_rectangle(
&mut self,
x: usize,
y: usize,
w: usize,
h: usize,
color: Color,
)
pub fn fill_rectangle( &mut self, x: usize, y: usize, w: usize, h: usize, color: Color, )
Fill a rectangle with a color.
x
andy
are the coordinates of the top-left pixel.w
andh
are the width and height of the rectangle.color
is the[0, r, g, b]
color.
Panics if the top-left or bottom-right positions are out of bounds.
Auto Trait Implementations§
impl<'s, const X: usize, const Y: usize, D, W> Freeze for RgbBuffer<'s, X, Y, D, W>
impl<'s, const X: usize, const Y: usize, D, W> !RefUnwindSafe for RgbBuffer<'s, X, Y, D, W>
impl<'s, const X: usize, const Y: usize, D, W> Send for RgbBuffer<'s, X, Y, D, W>
impl<'s, const X: usize, const Y: usize, D, W> !Sync for RgbBuffer<'s, X, Y, D, W>
impl<'s, const X: usize, const Y: usize, D, W> Unpin for RgbBuffer<'s, X, Y, D, W>
impl<'s, const X: usize, const Y: usize, D, W> !UnwindSafe for RgbBuffer<'s, X, Y, D, W>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.