Cleanup: Avoid writing to input arguments

This patch adjusts the GLSL compositor code to avoid writing to
inputting as variables. This is to make it easier to port the code to
CPU. Also, write to the output directly instead of per channel.
This commit is contained in:
Omar Emara
2024-10-15 14:21:45 +03:00
parent b0cfebbb99
commit e8a9de550f
5 changed files with 12 additions and 18 deletions

View File

@@ -7,19 +7,18 @@
void node_composite_color_balance_lgg(
float factor, vec4 color, vec3 lift, vec3 gamma, vec3 gain, out vec4 result)
{
lift = 2.0 - lift;
vec3 inverse_lift = 2.0 - lift;
vec3 srgb_color = linear_rgb_to_srgb(color.rgb);
vec3 lift_balanced = ((srgb_color - 1.0) * lift) + 1.0;
vec3 lift_balanced = ((srgb_color - 1.0) * inverse_lift) + 1.0;
vec3 gain_balanced = lift_balanced * gain;
gain_balanced = max(gain_balanced, vec3(0.0));
vec3 linear_color = srgb_to_linear_rgb(gain_balanced);
gamma = mix(gamma, vec3(1e-6), equal(gamma, vec3(0.0)));
vec3 gamma_balanced = pow(linear_color, 1.0 / gamma);
vec3 sanitized_gamma = mix(gamma, vec3(1e-6), equal(gamma, vec3(0.0)));
vec3 gamma_balanced = pow(linear_color, 1.0 / sanitized_gamma);
result.rgb = mix(color.rgb, gamma_balanced, min(factor, 1.0));
result.a = color.a;
result = vec4(mix(color.rgb, gamma_balanced, min(factor, 1.0)), color.a);
}
void node_composite_color_balance_asc_cdl(float factor,
@@ -30,11 +29,10 @@ void node_composite_color_balance_asc_cdl(float factor,
float offset_basis,
out vec4 result)
{
offset += offset_basis;
vec3 balanced = color.rgb * slope + offset;
vec3 full_offset = offset + offset_basis;
vec3 balanced = color.rgb * slope + full_offset;
balanced = pow(max(balanced, vec3(0.0)), power);
result.rgb = mix(color.rgb, balanced, min(factor, 1.0));
result.a = color.a;
result = vec4(mix(color.rgb, balanced, min(factor, 1.0)), color.a);
}
void node_composite_color_balance_whitepoint(float factor,

View File

@@ -12,6 +12,5 @@ void node_composite_color_spill(vec4 color,
{
float average_limit = (color[int(limit_channels.x)] + color[int(limit_channels.y)]) / 2.0;
float map = factor * color[int(spill_channel)] - limit_scale * average_limit;
result.rgb = map > 0.0 ? color.rgb + spill_scale * map : color.rgb;
result.a = color.a;
result = vec4(map > 0.0 ? color.rgb + spill_scale * map : color.rgb, color.a);
}

View File

@@ -5,6 +5,5 @@
void node_composite_exposure(vec4 color, float exposure, out vec4 result)
{
float multiplier = exp2(exposure);
result.rgb = color.rgb * multiplier;
result.a = color.a;
result = vec4(color.rgb * multiplier, color.a);
}

View File

@@ -6,6 +6,5 @@
void node_composite_gamma(vec4 color, float gamma, out vec4 result)
{
result.rgb = fallback_pow(color.rgb, gamma, color.rgb);
result.a = color.a;
result = vec4(fallback_pow(color.rgb, gamma, color.rgb), color.a);
}

View File

@@ -5,6 +5,5 @@
void node_composite_posterize(vec4 color, float steps, out vec4 result)
{
steps = clamp(steps, 2.0, 1024.0);
result = floor(color * steps) / steps;
result.a = color.a;
result = vec4(floor(color.rgb * steps) / steps, color.a);
}