Skip to content

Commit 809666b

Browse files
committed
shaders: brightness_contrast_classic gpu node
1 parent 4a285dd commit 809666b

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

node-graph/graster-nodes/src/adjustments.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,43 @@ fn make_opaque<T: Adjust<Color>>(
141141
input
142142
}
143143

144+
// Aims for interoperable compatibility with:
145+
// https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=%27brit%27%20%3D%20Brightness/Contrast
146+
// https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=Padding-,Brightness%20and%20Contrast,-Key%20is%20%27brit
147+
//
148+
// Some further analysis available at:
149+
// https://geraldbakker.nl/psnumbers/brightness-contrast.html
150+
#[node_macro::node(
151+
name("Brightness/Contrast classic"),
152+
category("Raster: Adjustment"),
153+
properties("brightness_contrast_properties"),
154+
shader_node(PerPixelAdjust)
155+
)]
156+
fn brightness_contrast_classic<T: Adjust<Color>>(
157+
_: impl Ctx,
158+
#[implementations(
159+
Table<Raster<CPU>>,
160+
Table<Color>,
161+
Table<GradientStops>,
162+
GradientStops,
163+
)]
164+
#[gpu_image]
165+
mut input: T,
166+
brightness: SignedPercentageF32,
167+
contrast: SignedPercentageF32,
168+
) -> T {
169+
let brightness = brightness / 255.;
170+
171+
let contrast = contrast / 100.;
172+
let contrast = if contrast > 0. { (contrast * core::f32::consts::FRAC_PI_2 - 0.01).tan() } else { contrast };
173+
174+
let offset = brightness * contrast + brightness - contrast / 2.;
175+
176+
input.adjust(|color| color.to_gamma_srgb().map_rgb(|c| (c + c * contrast + offset).clamp(0., 1.)).to_linear_srgb());
177+
178+
input
179+
}
180+
144181
// Aims for interoperable compatibility with:
145182
// https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=%27brit%27%20%3D%20Brightness/Contrast
146183
// https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=Padding-,Brightness%20and%20Contrast,-Key%20is%20%27brit

0 commit comments

Comments
 (0)