app: fixed a bug in gegl legacy blending modes

This commit is contained in:
Ville Sokk
2012-04-28 11:37:27 +03:00
committed by Michael Natterer
parent fa0faf4254
commit 0ac531fa3b
15 changed files with 31 additions and 32 deletions

View File

@ -92,7 +92,7 @@ gimp_operation_addition_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -101,7 +101,7 @@ gimp_operation_addition_mode_process (GeglOperation *operation,
gfloat comp = in[b] + layer[b];
comp = CLAMP (comp, 0, 1);
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -92,7 +92,7 @@ gimp_operation_burn_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -101,7 +101,7 @@ gimp_operation_burn_mode_process (GeglOperation *operation,
gfloat comp = (1 - in[b]) / layer[b];
comp = CLAMP (1 - comp, 0, 1);
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -93,7 +93,7 @@ gimp_operation_darken_only_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -101,7 +101,7 @@ gimp_operation_darken_only_mode_process (GeglOperation *operation,
{
gfloat comp = MIN (in[b], layer[b]);
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -92,7 +92,7 @@ gimp_operation_difference_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -101,7 +101,7 @@ gimp_operation_difference_mode_process (GeglOperation *operation,
gfloat comp = in[b] - layer[b];
comp = (comp < 0) ? -comp : comp;
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -76,7 +76,6 @@ gimp_operation_divide_mode_prepare (GeglOperation *operation)
gegl_operation_set_format (operation, "output", format);
}
static gboolean
gimp_operation_divide_mode_process (GeglOperation *operation,
void *in_buf,
@ -93,16 +92,16 @@ gimp_operation_divide_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
for (b = RED; b < ALPHA; b++)
{
gfloat comp = in[b] / layer[b];
gfloat comp = (256 / 255.0 * in[b]) / (1 / 255.0 + layer[b]);
comp = MIN (comp, 1);
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -92,7 +92,7 @@ gimp_operation_dodge_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -101,7 +101,7 @@ gimp_operation_dodge_mode_process (GeglOperation *operation,
gfloat comp = in[b] / (1 - layer[b]);
comp = MIN (comp, 1);
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -93,7 +93,7 @@ gimp_operation_grain_extract_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -102,7 +102,7 @@ gimp_operation_grain_extract_mode_process (GeglOperation *operation,
gfloat comp = in[b] - layer[b] + 0.5;
comp = CLAMP (comp, 0, 1);
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -93,7 +93,7 @@ gimp_operation_grain_merge_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -102,7 +102,7 @@ gimp_operation_grain_merge_mode_process (GeglOperation *operation,
gfloat comp = in[b] + layer[b] - 0.5;
comp = CLAMP (comp, 0, 1);
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -92,7 +92,7 @@ gimp_operation_hardlight_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -111,7 +111,7 @@ gimp_operation_hardlight_mode_process (GeglOperation *operation,
comp = MIN (comp, 1);
}
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -92,7 +92,7 @@ gimp_operation_lighten_only_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -100,7 +100,7 @@ gimp_operation_lighten_only_mode_process (GeglOperation *operation,
{
gfloat comp = MAX (layer[b], in[b]);
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -92,7 +92,7 @@ gimp_operation_multiply_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -101,7 +101,7 @@ gimp_operation_multiply_mode_process (GeglOperation *operation,
gfloat comp = layer[b] * in[b];
comp = CLAMP (comp, 0, 1);
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -93,7 +93,7 @@ gimp_operation_overlay_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -101,7 +101,7 @@ gimp_operation_overlay_mode_process (GeglOperation *operation,
{
gfloat comp = in[b] * (in[b] + (2 * layer[b]) * (1 - in[b]));
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -92,7 +92,7 @@ gimp_operation_screen_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -100,7 +100,7 @@ gimp_operation_screen_mode_process (GeglOperation *operation,
{
gfloat comp = 1 - (1 - in[b]) * (1 - layer[b]);
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -93,7 +93,7 @@ gimp_operation_softlight_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -103,7 +103,7 @@ gimp_operation_softlight_mode_process (GeglOperation *operation,
gfloat screen = 1 - (1 - in[b]) * (1 - layer[b]);
gfloat comp = (1 - in[b]) * multiply + in[b] * screen;
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];

View File

@ -92,7 +92,7 @@ gimp_operation_subtract_mode_process (GeglOperation *operation,
while (samples--)
{
gint b;
gfloat comp_alpha = in[ALPHA] * layer[ALPHA];
gfloat comp_alpha = MIN (in[ALPHA], layer[ALPHA]);
gfloat new_alpha = in[ALPHA] + (1 - in[ALPHA]) * comp_alpha;
gfloat ratio = comp_alpha / new_alpha;
@ -101,7 +101,7 @@ gimp_operation_subtract_mode_process (GeglOperation *operation,
gfloat comp = in[b] - layer[b];
comp = (comp < 0) ? 0 : comp;
out[b] = comp * ratio + in[b] * (1 - ratio);
out[b] = comp * ratio + in[b] * (1 - ratio) + 0.0001;
}
out[ALPHA] = in[ALPHA];