Rgba

Struct Rgba 

Source
pub struct Rgba { /* private fields */ }
Expand description

A floating-point RGBA color value.

  • Each color component must have a nonnegative, non-NaN value. Depending on the application, they may be considered to have a nominal range of 0 to 1, or unbounded. (TODO: Split these use cases into different types.)
  • The alpha must have a non-NaN value.
  • Color components are linear (gamma = 1), but use the same RGB primaries as sRGB (Rec. 709).
  • The alpha is not premultiplied.
  • Alpha values less than zero and greater than one will usually be treated equivalently to zero and one, respectively, but are preserved rather than clipped.

§Suitability

The primary purpose of this color type and its relatives, and the reason for its enforced value restrictions, is to be able to be stored in game state data structures, with reliable comparison and serialization. It is not necessarily appropriate for storing the intermediate results of computations (though the operations do take care to avoid unnecessary re-validation).

Future versions of All is Cubes may choose to reduce the precision of this type to f16 when Rust has built-in support for that data type.

Implementations§

Source§

impl Rgba

Source

pub const TRANSPARENT: Rgba

Transparent black (all components zero); identical to Rgba::new(0.0, 0.0, 0.0, 0.0) except for being a constant.

Source

pub const BLACK: Rgba

Black; identical to Rgba::new(0.0, 0.0, 0.0, 1.0) except for being a constant.

Source

pub const WHITE: Rgba

White; identical to Rgba::new(1.0, 1.0, 1.0, 1.0) except for being a constant.

Source

pub const fn new(r: f32, g: f32, b: f32, a: f32) -> Rgba

Constructs a color from components. Panics if any component is NaN or negative. No other range checks are performed.

Source

pub const fn new_ps( r: PositiveSign<f32>, g: PositiveSign<f32>, b: PositiveSign<f32>, alpha: ZeroOne<f32>, ) -> Rgba

Constructs a color from components that have already been checked for not being NaN or negative.

Note: This exists primarily to assist the rgba_const! macro and may be renamed or replaced in future versions.

Source

pub const fn from_luminance(luminance: f32) -> Rgba

Constructs a shade of gray (components all equal). Panics if any component is NaN. No other range checks are performed.

Source

pub const fn red(self) -> PositiveSign<f32>

Returns the red color component. Values are linear (gamma = 1) and not premultiplied.

Source

pub const fn green(self) -> PositiveSign<f32>

Returns the green color component. Values are linear (gamma = 1) and not premultiplied.

Source

pub const fn blue(self) -> PositiveSign<f32>

Returns the blue color component. Values are linear (gamma = 1) and not premultiplied.

Source

pub const fn alpha(self) -> ZeroOne<f32>

Returns the alpha component.

Note that the RGB components are not premultiplied by alpha.

Source

pub fn fully_transparent(self) -> bool

Returns whether this color is fully transparent, or has an alpha component of zero or less.

Source

pub fn fully_opaque(self) -> bool

Returns whether this color is fully opaque, or has an alpha component of one or greater.

Source

pub fn opacity_category(self) -> OpacityCategory

Returns the OpacityCategory which this color’s alpha fits into. This returns the same information as Rgba::fully_transparent combined with Rgba::fully_opaque.

Source

pub const fn to_rgb(self) -> Rgb

Discards the alpha component to produce an RGB color.

Note that if alpha is 0 then the components could be any value and yet be “hidden” by the transparency.

Source

pub fn map_rgb(self, f: impl FnOnce(Rgb) -> Rgb) -> Rgba

Applies a function to the RGB portion of this color.

Source

pub fn luminance(self) -> f32

Combines the red, green, and blue components to obtain a luminance (“grayscale”) value. This will be equal to 1 if all components are 1.

This is identical to Rgb::luminance, ignoring the alpha component.

Source

pub fn to_srgb8(self) -> [u8; 4]

Converts this color lossily to sRGB 8-bits-per-component color.

Source

pub const fn from_srgb8(rgba: [u8; 4]) -> Rgba

Converts sRGB 8-bits-per-component color to the corresponding linear Rgba value.

Source

pub fn clamp(self) -> Rgba

Clamp each component to lie within the range 0 to 1, inclusive.

Trait Implementations§

Source§

impl<'a> Arbitrary<'a> for Rgba

Source§

fn arbitrary(u: &mut Unstructured<'a>) -> Result<Rgba, Error>

Generate an arbitrary value of Self from the given unstructured data. Read more
Source§

fn size_hint(_depth: usize) -> (usize, Option<usize>)

Get a size hint for how many bytes out of an Unstructured this type needs to construct itself. Read more
Source§

fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>

Generate an arbitrary value of Self from the entirety of the given unstructured data. Read more
Source§

fn try_size_hint( depth: usize, ) -> Result<(usize, Option<usize>), MaxRecursionReached>

Get a size hint for how many bytes out of an Unstructured this type needs to construct itself. Read more
Source§

impl Clone for Rgba

Source§

fn clone(&self) -> Rgba

Returns a duplicate 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 Debug for Rgba

Source§

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

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

impl From<[ZeroOne<f32>; 4]> for Rgba

Source§

fn from(value: [ZeroOne<f32>; 4]) -> Rgba

Converts to this type from the input type.
Source§

impl From<(PositiveSign<f32>, PositiveSign<f32>, PositiveSign<f32>, ZeroOne<f32>)> for Rgba

Source§

fn from( value: (PositiveSign<f32>, PositiveSign<f32>, PositiveSign<f32>, ZeroOne<f32>), ) -> Rgba

Converts to this type from the input type.
Source§

impl From<Rgba> for Atom

Source§

fn from(color: Rgba) -> Self

Construct an Atom with the given reflectance color, and default attributes.

Source§

impl From<Rgba> for Block

Source§

fn from(color: Rgba) -> Self

Construct a Block with the given reflectance color, and default attributes.

This operation allocates a new Primitive value on the heap. If the color is a constant, you may use block::from_color! instead to avoid allocation.

Source§

impl From<Rgba> for Builder<'_, Atom, ()>

Equivalent to Block::builder().color(color).

Source§

fn from(color: Rgba) -> Self

Converts to this type from the input type.
Source§

impl Hash for Rgba

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Rgba

Source§

fn eq(&self, other: &Rgba) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PixelColor for Rgba

Source§

type Raw = ()

Raw data type. Read more
Source§

impl<'a> VoxelColor<'a> for Rgba

Source§

fn into_blocks(self) -> VoxelBrush<'a>

Returns a corresponding VoxelBrush, the most general form of blocky drawing.
Source§

impl Copy for Rgba

Source§

impl Eq for Rgba

Source§

impl StructuralPartialEq for Rgba

Auto Trait Implementations§

§

impl Freeze for Rgba

§

impl RefUnwindSafe for Rgba

§

impl Send for Rgba

§

impl Sync for Rgba

§

impl Unpin for Rgba

§

impl UnwindSafe for Rgba

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> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
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<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
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> DynEq for T
where T: Any + Eq,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Casts the type to dyn Any.
Source§

fn dyn_eq(&self, other: &(dyn DynEq + 'static)) -> bool

This method tests for self and other values to be equal. Read more
Source§

impl<T> DynHash for T
where T: DynEq + Hash,

Source§

fn as_dyn_eq(&self) -> &(dyn DynEq + 'static)

Casts the type to dyn Any.
Source§

fn dyn_hash(&self, state: &mut dyn Hasher)

Feeds this value into the given Hasher.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
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.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
Source§

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