Make the node graph use Table<GradientStops> instead of GradientStops (#3837)

* Switch from GradientStops to Table<GradientStops> in all nodes

* Remove TaggedValue::ColorNotInTable

* Fix bug

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Add migrations

* Fix default gradient on empty table

* Update demo artwork

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This commit is contained in:
Keavon Chambers
2026-02-26 14:07:31 -08:00
committed by GitHub
parent 81c73d11ff
commit f1cbc4b396
26 changed files with 132 additions and 111 deletions

View File

@@ -54,7 +54,6 @@ fn luminance<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut input: T,
@@ -80,7 +79,6 @@ fn gamma_correction<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut input: T,
@@ -102,7 +100,6 @@ fn extract_channel<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut input: T,
@@ -127,7 +124,6 @@ fn make_opaque<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut input: T,
@@ -154,7 +150,6 @@ fn brightness_contrast_classic<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut input: T,
@@ -186,7 +181,6 @@ fn brightness_contrast<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut input: T,
@@ -268,7 +262,6 @@ fn levels<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut image: T,
@@ -337,7 +330,6 @@ fn black_and_white<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut image: T,
@@ -411,7 +403,6 @@ fn hue_saturation<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut input: T,
@@ -447,7 +438,6 @@ fn invert<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut input: T,
@@ -471,7 +461,6 @@ fn threshold<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut image: T,
@@ -518,7 +507,6 @@ fn vibrance<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut image: T,
@@ -684,7 +672,6 @@ fn channel_mixer<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut image: T,
@@ -815,7 +802,6 @@ fn selective_color<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut image: T,
@@ -962,7 +948,6 @@ fn posterize<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut input: T,
@@ -997,7 +982,6 @@ fn exposure<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut input: T,

View File

@@ -136,7 +136,6 @@ fn blend<T: Blend<Color> + Send>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
over: T,
@@ -145,7 +144,6 @@ fn blend<T: Blend<Color> + Send>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
under: T,
@@ -162,7 +160,6 @@ fn color_overlay<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
#[gpu_image]
mut image: T,

View File

@@ -16,16 +16,17 @@ async fn gradient_map<T: Adjust<Color>>(
Table<Raster<CPU>>,
Table<Color>,
Table<GradientStops>,
GradientStops,
)]
mut image: T,
gradient: GradientStops,
gradient: Table<GradientStops>,
reverse: bool,
) -> T {
let Some(row) = gradient.get(0) else { return image };
image.adjust(|color| {
let intensity = color.luminance_srgb();
let intensity = if reverse { 1. - intensity } else { intensity };
gradient.evaluate(intensity as f64).to_linear_srgb()
row.element.evaluate(intensity as f64).to_linear_srgb()
});
image