Use builtin clamp() rather than min() + max()
This commit is contained in:
parent
b5b070aade
commit
e0e7917eaa
@ -93,7 +93,7 @@ vec4 vec4_premul(vec4 rgba) {
|
|||||||
* 7) Draw the images that are supposed to be above text again in the graphics shader
|
* 7) Draw the images that are supposed to be above text again in the graphics shader
|
||||||
*
|
*
|
||||||
* 2b) Transparent bg with images
|
* 2b) Transparent bg with images
|
||||||
* First everything is rendered into a framebuffer, and then the framebauffer is blended onto
|
* First everything is rendered into a framebuffer, and then the framebuffer is blended onto
|
||||||
* the screen. The framebuffer is needed because it allows access to the background color pixels
|
* the screen. The framebuffer is needed because it allows access to the background color pixels
|
||||||
* to blend with the image pixels. The steps are basically the same as for 2a.
|
* to blend with the image pixels. The steps are basically the same as for 2a.
|
||||||
*
|
*
|
||||||
@ -116,17 +116,17 @@ float srgb2linear(float x) {
|
|||||||
return pow(x, 2.2);
|
return pow(x, 2.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
float clamp(float x) {
|
float clamp_to_unit_float(float x) {
|
||||||
// Clamp value to suitable output range
|
// Clamp value to suitable output range
|
||||||
return max(min(x, 1.0f), 0.0f);
|
return clamp(x, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 foreground_contrast(vec4 over, vec3 under) {
|
vec4 foreground_contrast(vec4 over, vec3 under) {
|
||||||
float underL = dot(under, Y);
|
float underL = dot(under, Y);
|
||||||
float overL = dot(over.rgb, Y);
|
float overL = dot(over.rgb, Y);
|
||||||
// Apply additional gamma-adjustment scaled by the luminance difference, the darker the foreground the more adjustment we apply.
|
// Apply additional gamma-adjustment scaled by the luminance difference, the darker the foreground the more adjustment we apply.
|
||||||
// A multiplicative contrast is also available to increase sasturation.
|
// A multiplicative contrast is also available to increase saturation.
|
||||||
over.a = clamp(mix(over.a, pow(over.a, text_gamma_adjustment), (1 - overL + underL) * text_gamma_scaling) * text_contrast);
|
over.a = clamp_to_unit_float(mix(over.a, pow(over.a, text_gamma_adjustment), (1 - overL + underL) * text_gamma_scaling) * text_contrast);
|
||||||
return over;
|
return over;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ vec4 foreground_contrast_incorrect(vec4 over, vec3 under) {
|
|||||||
//
|
//
|
||||||
// linear2srgb(over * overA2 + under * (1 - overA2)) = linear2srgb(over) * over.a + linear2srgb(under) * (1 - over.a)
|
// linear2srgb(over * overA2 + under * (1 - overA2)) = linear2srgb(over) * over.a + linear2srgb(under) * (1 - over.a)
|
||||||
// ^ gamma correct blending with new alpha ^ gamma incorrect blending with old alpha
|
// ^ gamma correct blending with new alpha ^ gamma incorrect blending with old alpha
|
||||||
over.a = clamp((srgb2linear(linear2srgb(overL) * over.a + linear2srgb(underL) * (1.0f - over.a)) - underL) / (overL - underL));
|
over.a = clamp_to_unit_float((srgb2linear(linear2srgb(overL) * over.a + linear2srgb(underL) * (1.0f - over.a)) - underL) / (overL - underL));
|
||||||
return over;
|
return over;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user