Skip to main content

Surface

Struct Surface 

Source
pub struct Surface<'a, const COMPONENTS: usize> {
    pub data: &'a [u8],
    pub width: u32,
    pub height: u32,
    pub stride: u32,
}
Expand description

Describes a 2D image to block-compress.

COMPONENTS is the number of bytes per pixel in the source data. This determines the expected tightly-packed stride (width * COMPONENTS) and is used to validate that data is large enough. The actual channel layout depends on which encoder consumes the surface — see the individual format modules for details.

§Available surface type aliases

AliasCOMPONENTSLayoutUsed by
RSurface1R8 (1 byte/pixel)bc4
RgSurface2R8 G8 interleaved (2 bytes/pixel)bc5
RgbaSurface4R8 G8 B8 A8 interleaved (4 bytes/pixel)bc1, bc3, bc7, etc1
RgbaF16Surface8R16 G16 B16 A16 interleaved (8 bytes/pixel)bc6h

Fields§

§data: &'a [u8]

The raw pixel data for the image.

The byte interpretation depends on the encoder that consumes this surface. For most formats, each byte is one u8 channel sample. For bc6h, every two bytes form a little-endian f16 channel sample.

The data does not need to be tightly packed, but if it isn’t, stride must differ from width * COMPONENTS.

Expected to be at least stride * height bytes.

§width: u32

The width of the image in texels.

§height: u32

The height of the image in texels.

§stride: u32

The stride between rows of the image, in bytes.

For tightly-packed data this is width * COMPONENTS.

Implementations§

Source§

impl<'a, const COMPONENTS: usize> Surface<'a, COMPONENTS>

Source

pub fn new(data: &'a [u8], width: u32, height: u32, stride: u32) -> Self

Creates a new surface, validating the preconditions required by the underlying ISPC kernels.

§Panics

Panics if:

  • width or height is zero,
  • width or height is not a multiple of 4 (the ISPC kernels process whole 4×4 blocks and will silently drop partial edge blocks otherwise),
  • width, height, or stride exceed i32::MAX,
  • stride is less than width * COMPONENTS,
  • data.len() is less than stride * height.

Trait Implementations§

Source§

impl<'a, const COMPONENTS: usize> Clone for Surface<'a, COMPONENTS>

Source§

fn clone(&self) -> Surface<'a, COMPONENTS>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<'a, const COMPONENTS: usize> Debug for Surface<'a, COMPONENTS>

Source§

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

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

impl<'a, const COMPONENTS: usize> Copy for Surface<'a, COMPONENTS>

Auto Trait Implementations§

§

impl<'a, const COMPONENTS: usize> Freeze for Surface<'a, COMPONENTS>

§

impl<'a, const COMPONENTS: usize> RefUnwindSafe for Surface<'a, COMPONENTS>

§

impl<'a, const COMPONENTS: usize> Send for Surface<'a, COMPONENTS>

§

impl<'a, const COMPONENTS: usize> Sync for Surface<'a, COMPONENTS>

§

impl<'a, const COMPONENTS: usize> Unpin for Surface<'a, COMPONENTS>

§

impl<'a, const COMPONENTS: usize> UnsafeUnpin for Surface<'a, COMPONENTS>

§

impl<'a, const COMPONENTS: usize> UnwindSafe for Surface<'a, COMPONENTS>

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, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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<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.