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:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user