From f891de290905f99237cac9de5fb21672b859605e Mon Sep 17 00:00:00 2001 From: lisk77 Date: Sun, 30 Mar 2025 00:06:33 +0100 Subject: [PATCH] feat: added `to_vec` to the `Color` trait to allow the colors to be lerped and produce gradients --- crates/comet_colors/src/hsla.rs | 5 +++++ crates/comet_colors/src/hsva.rs | 5 +++++ crates/comet_colors/src/hwba.rs | 5 +++++ crates/comet_colors/src/laba.rs | 5 +++++ crates/comet_colors/src/lcha.rs | 5 +++++ crates/comet_colors/src/lib.rs | 2 ++ crates/comet_colors/src/linear_rgba.rs | 5 +++++ crates/comet_colors/src/oklaba.rs | 5 +++++ crates/comet_colors/src/oklcha.rs | 5 +++++ crates/comet_colors/src/rgba.rs | 13 +++++++++++++ crates/comet_colors/src/xyza.rs | 5 +++++ crates/comet_math/src/matrix.rs | 3 +-- crates/comet_math/src/noise.rs | 4 ++-- 13 files changed, 63 insertions(+), 4 deletions(-) diff --git a/crates/comet_colors/src/hsla.rs b/crates/comet_colors/src/hsla.rs index ff44ab2..21f7d60 100644 --- a/crates/comet_colors/src/hsla.rs +++ b/crates/comet_colors/src/hsla.rs @@ -1,3 +1,4 @@ +use comet_math::Vec4; use crate::{sRgba, Color, Hsva, Hwba, Laba, Lcha, LinearRgba, Oklaba, Oklcha, Xyza}; #[derive(Debug, Clone, PartialEq, Copy)] @@ -104,4 +105,8 @@ impl Color for Hsla { fn to_wgpu(&self) -> wgpu::Color { self.to_linear().to_wgpu() } + + fn to_vec(&self) -> Vec4 { + Vec4::new(self.hue, self.saturation, self.lightness, self.alpha) + } } \ No newline at end of file diff --git a/crates/comet_colors/src/hsva.rs b/crates/comet_colors/src/hsva.rs index ff55a28..f5c6789 100644 --- a/crates/comet_colors/src/hsva.rs +++ b/crates/comet_colors/src/hsva.rs @@ -1,3 +1,4 @@ +use comet_math::Vec4; use crate::{sRgba, Color, Hsla, Hwba, Laba, Lcha, LinearRgba, Oklaba, Oklcha, Xyza}; #[derive(Debug, Clone, PartialEq, Copy)] @@ -102,4 +103,8 @@ impl Color for Hsva { fn to_wgpu(&self) -> wgpu::Color { self.to_linear().to_wgpu() } + + fn to_vec(&self) -> Vec4 { + Vec4::new(self.hue, self.saturation, self.value, self.alpha) + } } \ No newline at end of file diff --git a/crates/comet_colors/src/hwba.rs b/crates/comet_colors/src/hwba.rs index 2c5b8b2..cc0992b 100644 --- a/crates/comet_colors/src/hwba.rs +++ b/crates/comet_colors/src/hwba.rs @@ -1,3 +1,4 @@ +use comet_math::Vec4; use crate::{sRgba, Color, Hsla, Hsva, Laba, Lcha, LinearRgba, Oklaba, Oklcha, Xyza}; #[derive(Debug, Clone, PartialEq, Copy)] @@ -165,4 +166,8 @@ impl Color for Hwba { fn to_wgpu(&self) -> wgpu::Color { self.to_linear().to_wgpu() } + + fn to_vec(&self) -> Vec4 { + Vec4::new(self.hue, self.whiteness, self.blackness, self.alpha) + } } \ No newline at end of file diff --git a/crates/comet_colors/src/laba.rs b/crates/comet_colors/src/laba.rs index d713bbd..0cfe83f 100644 --- a/crates/comet_colors/src/laba.rs +++ b/crates/comet_colors/src/laba.rs @@ -1,3 +1,4 @@ +use comet_math::Vec4; use crate::{sRgba, Color, Hsla, Hsva, Hwba, Lcha, LinearRgba, Oklaba, Oklcha, Xyza}; #[derive(Debug, Clone, PartialEq, Copy)] @@ -146,4 +147,8 @@ impl Color for Laba { fn to_wgpu(&self) -> wgpu::Color { self.to_linear().to_wgpu() } + + fn to_vec(&self) -> Vec4 { + Vec4::new(self.lightness, self.a, self.b, self.alpha) + } } \ No newline at end of file diff --git a/crates/comet_colors/src/lcha.rs b/crates/comet_colors/src/lcha.rs index 37bd3fa..d9e67ad 100644 --- a/crates/comet_colors/src/lcha.rs +++ b/crates/comet_colors/src/lcha.rs @@ -1,3 +1,4 @@ +use comet_math::Vec4; use crate::{sRgba, Color, Hsla, Hsva, Hwba, Laba, LinearRgba, Oklaba, Oklcha, Xyza}; #[derive(Debug, Clone, PartialEq, Copy)] @@ -96,4 +97,8 @@ impl Color for Lcha { fn to_wgpu(&self) -> wgpu::Color { self.to_linear().to_wgpu() } + + fn to_vec(&self) -> Vec4 { + Vec4::new(self.lightness, self.chroma, self.hue, self.alpha) + } } \ No newline at end of file diff --git a/crates/comet_colors/src/lib.rs b/crates/comet_colors/src/lib.rs index da5a46d..aedca2a 100644 --- a/crates/comet_colors/src/lib.rs +++ b/crates/comet_colors/src/lib.rs @@ -1,4 +1,5 @@ pub use comet_math as math; +use comet_math::Vec4; pub use linear_rgba::*; pub use rgba::*; pub use hwba::*; @@ -23,4 +24,5 @@ mod oklcha; pub trait Color: Copy { fn to_wgpu(&self) -> wgpu::Color; + fn to_vec(&self) -> Vec4; } \ No newline at end of file diff --git a/crates/comet_colors/src/linear_rgba.rs b/crates/comet_colors/src/linear_rgba.rs index d31fa49..35ab5a5 100644 --- a/crates/comet_colors/src/linear_rgba.rs +++ b/crates/comet_colors/src/linear_rgba.rs @@ -1,4 +1,5 @@ use wgpu; +use comet_math::Vec4; use crate::{sRgba, Color, Hsla, Hsva, Hwba, Laba, Lcha, Oklaba, Oklcha, Xyza}; #[derive(Debug, Clone, PartialEq, Copy)] @@ -134,4 +135,8 @@ impl Color for LinearRgba { a: self.alpha as f64 } } + + fn to_vec(&self) -> Vec4 { + Vec4::new(self.red, self.green, self.blue, self.alpha) + } } \ No newline at end of file diff --git a/crates/comet_colors/src/oklaba.rs b/crates/comet_colors/src/oklaba.rs index cdaf876..3c114bf 100644 --- a/crates/comet_colors/src/oklaba.rs +++ b/crates/comet_colors/src/oklaba.rs @@ -1,3 +1,4 @@ +use comet_math::Vec4; use crate::{sRgba, Color, Hsla, Hsva, Hwba, Laba, Lcha, LinearRgba, Oklcha, Xyza}; #[derive(Debug, Clone, PartialEq, Copy)] @@ -116,4 +117,8 @@ impl Color for Oklaba { fn to_wgpu(&self) -> wgpu::Color { self.to_linear().to_wgpu() } + + fn to_vec(&self) -> Vec4 { + Vec4::new(self.lightness, self.a, self.b, self.alpha) + } } \ No newline at end of file diff --git a/crates/comet_colors/src/oklcha.rs b/crates/comet_colors/src/oklcha.rs index 30e6fd7..ec0d856 100644 --- a/crates/comet_colors/src/oklcha.rs +++ b/crates/comet_colors/src/oklcha.rs @@ -1,3 +1,4 @@ +use comet_math::Vec4; use crate::{sRgba, Color, Hsla, Hsva, Hwba, Laba, Lcha, LinearRgba, Oklaba, Xyza}; #[derive(Debug, Clone, PartialEq, Copy)] @@ -95,4 +96,8 @@ impl Color for Oklcha { fn to_wgpu(&self) -> wgpu::Color { self.to_linear().to_wgpu() } + + fn to_vec(&self) -> Vec4 { + Vec4::new(self.lightness, self.chroma, self.hue, self.alpha) + } } \ No newline at end of file diff --git a/crates/comet_colors/src/rgba.rs b/crates/comet_colors/src/rgba.rs index 9506b34..20aef06 100644 --- a/crates/comet_colors/src/rgba.rs +++ b/crates/comet_colors/src/rgba.rs @@ -348,10 +348,23 @@ impl Color for sRgba { fn to_wgpu(&self) -> wgpu::Color { self.to_linear().to_wgpu() } + + fn to_vec(&self) -> Vec4 { + Vec4::new(self.red, self.green, self.blue, self.alpha) + } } impl Color for sRgba { fn to_wgpu(&self) -> wgpu::Color { self.to_linear().to_wgpu() } + + fn to_vec(&self) -> Vec4 { + Vec4::new( + self.red as f32, + self.green as f32, + self.blue as f32, + self.alpha as f32 + ) + } } \ No newline at end of file diff --git a/crates/comet_colors/src/xyza.rs b/crates/comet_colors/src/xyza.rs index 4a73072..a665d2a 100644 --- a/crates/comet_colors/src/xyza.rs +++ b/crates/comet_colors/src/xyza.rs @@ -1,3 +1,4 @@ +use comet_math::Vec4; use crate::{sRgba, Color, Hsla, Hsva, Hwba, Laba, Lcha, LinearRgba, Oklaba, Oklcha}; #[derive(Debug, Clone, PartialEq, Copy)] @@ -112,4 +113,8 @@ impl Color for Xyza { fn to_wgpu(&self) -> wgpu::Color { self.to_linear().to_wgpu() } + + fn to_vec(&self) -> Vec4 { + Vec4::new(self.x, self.y, self.z, self.alpha) + } } \ No newline at end of file diff --git a/crates/comet_math/src/matrix.rs b/crates/comet_math/src/matrix.rs index 6811080..e606af9 100644 --- a/crates/comet_math/src/matrix.rs +++ b/crates/comet_math/src/matrix.rs @@ -1,5 +1,4 @@ -use std::ops::{Add, Sub, Mul, Div}; -use crate::{cross, dot, Point3}; +use std::ops::*; use crate::vector::{Vec2, Vec3, Vec4}; trait LinearTransformation { diff --git a/crates/comet_math/src/noise.rs b/crates/comet_math/src/noise.rs index 6d4cc3f..05eae9f 100644 --- a/crates/comet_math/src/noise.rs +++ b/crates/comet_math/src/noise.rs @@ -1,7 +1,7 @@ use rand::{Rng, SeedableRng}; use comet_log::debug; use crate::utilities::{lerp, lerp2, PI}; -use crate::{dot, InnerSpace, Vec2}; +use crate::{InnerSpace, Vec2}; // TODO // Make noise struct keep their generated noise @@ -94,7 +94,7 @@ impl PerlinNoise { let nx = x as f64 / self.size.0 as f64; let ny = y as f64 / self.size.1 as f64; let value = self.perlin(nx * self.frequency, ny * self.frequency); - noise.push(((value+1.0) * 0.5)); + noise.push((value+1.0) * 0.5); } }