Rgb

Struct Rgb 

Source
pub struct Rgb(/* private fields */);
Expand description

A floating-point RGB color value, unbounded.

  • Represents a light intensity in unspecified units.
  • Each color component must have a nonnegative, non-NaN f32 value.
  • Color components are linear (gamma = 1), but use the same RGB primaries as sRGB (Rec. 709).

For colors whose components do not exceed 1, use Rgb01 instead.

§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 Rgb

Source

pub const ZERO: Rgb

Black; the constant equal to Rgb::new(0., 0., 0.).unwrap().

Source

pub const ONE: Rgb

Nominal white; the constant equal to Rgb::new(1., 1., 1.).unwrap().

Note that brighter values may exist; the color system “supports HDR”.

Source

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

Constructs a color from components.

Panics if any component is NaN. Clamps any component that is negative.

Source

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

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

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

Source

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

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

Source

pub const fn with_alpha(self, alpha: ZeroOne<f32>) -> Rgba

Adds an alpha component to produce an Rgba color.

Source

pub const fn with_alpha_one(self) -> Rgba

Adds an alpha component of 1.0 (fully opaque) to produce an Rgba color.

Source

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

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

Source

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

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

Source

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

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

Source

pub fn luminance(self) -> f32

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

use all_is_cubes::math::Rgb;

assert_eq!(0.0, Rgb::ZERO.luminance());
assert_eq!(0.5, (Rgb::ONE * 0.5).luminance());
assert_eq!(1.0, Rgb::ONE.luminance());
assert_eq!(2.0, (Rgb::ONE * 2.0).luminance());

assert_eq!(0.2126, Rgb::new(1., 0., 0.).luminance());
assert_eq!(0.7152, Rgb::new(0., 1., 0.).luminance());
assert_eq!(0.0722, Rgb::new(0., 0., 1.).luminance());
Source

pub const fn from_srgb8(rgb: [u8; 3]) -> Rgb

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

Source

pub fn clamp(self, maximum: PositiveSign<f32>) -> Rgb

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

Source

pub fn clamp_01(self) -> Rgb01

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

Source

pub fn saturating_sub(self, other: Rgb) -> Rgb

Subtract other from self; if any component would be negative, it is zero instead.

Trait Implementations§

Source§

impl Add for Rgb

Source§

type Output = Rgb

The resulting type after applying the + operator.
Source§

fn add(self, other: Rgb) -> Rgb

Performs the + operation. Read more
Source§

impl AddAssign for Rgb

Source§

fn add_assign(&mut self, other: Rgb)

Performs the += operation. Read more
Source§

impl<'a> Arbitrary<'a> for Rgb

Source§

fn arbitrary(u: &mut Unstructured<'a>) -> Result<Rgb, 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 Rgb

Source§

fn clone(&self) -> Rgb

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 Rgb

Source§

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

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

impl From<[PositiveSign<f32>; 3]> for Rgb

Source§

fn from(value: [PositiveSign<f32>; 3]) -> Rgb

Converts to this type from the input type.
Source§

impl From<[ZeroOne<f32>; 3]> for Rgb

Source§

fn from(value: [ZeroOne<f32>; 3]) -> Rgb

Converts to this type from the input type.
Source§

impl From<Rgb> for PackedLight

Source§

fn from(value: Rgb) -> Self

Converts to this type from the input type.
Source§

impl From<Rgb> for Vector3D<f32, Intensity>

Source§

fn from(value: Rgb) -> Vector3D<f32, Intensity>

Converts to this type from the input type.
Source§

impl From<Rgb01> for Rgb

Source§

fn from(value: Rgb01) -> Rgb

Converts to this type from the input type.
Source§

impl From<Vector3D<PositiveSign<f32>, Intensity>> for Rgb

Source§

fn from(value: Vector3D<PositiveSign<f32>, Intensity>) -> Rgb

Converts to this type from the input type.
Source§

impl Hash for Rgb

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 Mul<PositiveSign<f32>> for Rgb

Multiplies this color value by a scalar.

Source§

fn mul(self, scalar: PositiveSign<f32>) -> Rgb

Multiplies this color value by a scalar.

Source§

type Output = Rgb

The resulting type after applying the * operator.
Source§

impl Mul<ZeroOne<f32>> for Rgb

Source§

fn mul(self, scalar: ZeroOne<f32>) -> Rgb

Multiplies this color value by a scalar.

Source§

type Output = Rgb

The resulting type after applying the * operator.
Source§

impl Mul<f32> for Rgb

Multiplies this color value by a scalar.

Panics if the scalar is NaN. Returns zero if the scalar is negative.

Source§

fn mul(self, scalar: f32) -> Rgb

Multiplies this color value by a scalar.

Panics if the scalar is NaN. Returns zero if the scalar is negative.

Source§

type Output = Rgb

The resulting type after applying the * operator.
Source§

impl Mul for Rgb

Multiplies two color values componentwise.

Source§

fn mul(self, other: Rgb) -> Rgb

Multiplies two color values componentwise.

Source§

type Output = Rgb

The resulting type after applying the * operator.
Source§

impl PartialEq for Rgb

Source§

fn eq(&self, other: &Rgb) -> 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 Sum for Rgb

There is no corresponding impl Sum for Rgba because the alpha would not have a universally reasonable interpretation.

Source§

fn sum<I>(iter: I) -> Rgb
where I: Iterator<Item = Rgb>,

Takes an iterator and generates Self from the elements by “summing up” the items.
Source§

impl TryFrom<Vector3D<f32, Intensity>> for Rgb

Source§

type Error = NotPositiveSign<f32>

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

fn try_from( value: Vector3D<f32, Intensity>, ) -> Result<Rgb, <Rgb as TryFrom<Vector3D<f32, Intensity>>>::Error>

Performs the conversion.
Source§

impl Copy for Rgb

Source§

impl Eq for Rgb

Source§

impl StructuralPartialEq for Rgb

Auto Trait Implementations§

§

impl Freeze for Rgb

§

impl RefUnwindSafe for Rgb

§

impl Send for Rgb

§

impl Sync for Rgb

§

impl Unpin for Rgb

§

impl UnwindSafe for Rgb

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,