retrofire_core::util::buf

Struct Buf2

Source
pub struct Buf2<T>(/* private fields */);
Expand description

A rectangular 2D buffer that owns its elements, backed by a Vec.

Unlike Vec, however, Buf2 cannot be resized after construction without explicitly copying the contents to a new, larger buffer.

Buf2 stores its elements contiguously, in standard row-major order, such that the coordinate pair (x, y) maps to the index

buf.width() * y + x

in the backing vector.

§Examples

// Elements initialized with `Default::default()`
let mut buf = Buf2::new((4, 4));
// Indexing with a 2D vector (x, y) yields element at row y, column x:
buf[vec2(2, 1)] = 123;
// Indexing with an usize i yields row with index i as a slice:
assert_eq!(buf[1usize], [0, 0, 123, 0]);
// Thus you can also do this, row first, column second:
assert_eq!(buf[1usize][2], 123)

Implementations§

Source§

impl<T> Buf2<T>

Source

pub fn new_from<I>(dims: Dims, init: I) -> Self
where I: IntoIterator<Item = T>,

Returns a buffer with the given dimensions, with elements initialized in row-major order with values yielded by init.

§Panics

If there are fewer than w * h elements in init.

Source

pub fn new(dims: Dims) -> Self
where T: Clone + Default,

Returns a buffer with size w × h, with every element initialized by calling T::default().

Source

pub fn new_with<F>(dims: Dims, init_fn: F) -> Self
where F: Clone + FnMut(u32, u32) -> T,

Returns a buffer with size w × h, with every element initialized by calling init_fn(x, y) where x is the column index and y the row index of the element being initialized.

Source

pub fn data(&self) -> &[T]

Returns a view of the backing data of self.

Source

pub fn data_mut(&mut self) -> &mut [T]

Returns a mutable view of the backing data of self.

Methods from Deref<Target = Inner<T, Vec<T>>>§

Source

pub fn width(&self) -> u32

Returns the width of self.

Source

pub fn height(&self) -> u32

Returns the height of self.

Source

pub fn stride(&self) -> u32

Returns the stride of self.

Source

pub fn is_contiguous(&self) -> bool

Returns whether the rows of self are stored as one contiguous slice, without gaps between rows.

Buf2 instances are always contiguous. A Slice2 or MutSlice2 instance is contiguous if its width equals its stride, if its height is 1, or if it is empty.

Source

pub fn is_empty(&self) -> bool

Returns whether self contains no elements.

Source

pub fn as_slice2(&self) -> Slice2<'_, T>

Borrows self as a Slice2.

Source

pub fn slice(&self, rect: impl Into<Rect>) -> Slice2<'_, T>

Returns a borrowed rectangular slice of self.

§Panics

If any part of rect is outside the bounds of self.

Source

pub fn get(&self, pos: impl Into<Vec2u>) -> Option<&T>

Returns a reference to the element at pos, or None if pos is out of bounds.

Source

pub fn rows(&self) -> impl Iterator<Item = &[T]>

Returns an iterator over the rows of self as &[T] slices.

The length of each slice equals self.width().

Source

pub fn iter(&self) -> impl Iterator<Item = &T>

Returns an iterator over all the elements of self in row-major order.

First returns the elements on row 0 from left to right, followed by the elements on row 1, and so on.

Source

pub fn as_mut_slice2(&mut self) -> MutSlice2<'_, T>

Returns a mutably borrowed rectangular slice of self.

Source

pub fn rows_mut(&mut self) -> impl Iterator<Item = &mut [T]>

Returns an iterator over the rows of this buffer as &mut [T].

The length of each slice equals self.width().

Source

pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut T>

Returns an iterator over all the elements of self in row-major order: first the elements on row 0 from left to right, followed by the elements on row 1, and so on.

Source

pub fn fill(&mut self, val: T)
where T: Clone,

Fills self with clones of val.

Source

pub fn fill_with<F>(&mut self, fill_fn: F)
where F: Copy + FnMut(u32, u32) -> T,

Fills self by invoking f(x, y) for every element, where x and y are the column and row of the element, respectively.

Source

pub fn copy_from(&mut self, src: impl AsSlice2<T>)
where T: Copy,

Copies each element in src to the same position in self.

This operation is often called “blitting”.

§Panics

if the dimensions of self and src don’t match.

Source

pub fn get_mut(&mut self, pos: impl Into<Vec2u>) -> Option<&mut T>

Returns a mutable reference to the element at pos, or None if pos is out of bounds.

Source

pub fn slice_mut(&mut self, rect: impl Into<Rect>) -> MutSlice2<'_, T>

Returns a mutably borrowed rectangular slice of self.

§Panics

If any part of rect is outside the bounds of self.

Trait Implementations§

Source§

impl<T> AsMutSlice2<T> for &mut Buf2<T>

Source§

fn as_mut_slice2(&mut self) -> MutSlice2<'_, T>

Returns a mutably borrowed MutSlice2 view of Self.
Source§

impl<T> AsMutSlice2<T> for Buf2<T>

Source§

fn as_mut_slice2(&mut self) -> MutSlice2<'_, T>

Returns a mutably borrowed MutSlice2 view of Self.
Source§

impl<T> AsSlice2<T> for &Buf2<T>

Source§

fn as_slice2(&self) -> Slice2<'_, T>

Returns a borrowed Slice2 view of Self.
Source§

impl<T> AsSlice2<T> for Buf2<T>

Source§

fn as_slice2(&self) -> Slice2<'_, T>

Returns a borrowed Slice2 view of Self.
Source§

impl<T: Clone> Clone for Buf2<T>

Source§

fn clone(&self) -> Buf2<T>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T> Debug for Buf2<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Deref for Buf2<T>

Source§

type Target = Inner<T, Vec<T>>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<T> DerefMut for Buf2<T>

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
Source§

impl<C> From<Buf2<C>> for Texture<Buf2<C>>

Source§

fn from(data: Buf2<C>) -> Self

Creates a new texture from owned pixel data.

Auto Trait Implementations§

§

impl<T> Freeze for Buf2<T>

§

impl<T> RefUnwindSafe for Buf2<T>
where T: RefUnwindSafe,

§

impl<T> Send for Buf2<T>
where T: Send,

§

impl<T> Sync for Buf2<T>
where T: Sync,

§

impl<T> Unpin for Buf2<T>
where T: Unpin,

§

impl<T> UnwindSafe for Buf2<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<Buf> Target for Buf
where Buf: AsMutSlice2<u32>,

Source§

fn rasterize<V, Fs>( &mut self, sl: Scanline<V>, fs: &Fs, ctx: &Context, ) -> Throughput
where V: Vary, Fs: FragmentShader<V>,

Rasterizes scanline into this u32 color buffer. Does no z-buffering.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.