[gimp] app: in legacy layer modes, clamp after blending, not compositing
- From: N/A <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: in legacy layer modes, clamp after blending, not compositing
- Date: Thu, 4 Jan 2018 18:35:10 +0000 (UTC)
commit da8bcdcd5694259c60df570381d8424a6b08678f
Author: Ell <ell_se yahoo com>
Date: Thu Jan 4 13:25:02 2018 -0500
app: in legacy layer modes, clamp after blending, not compositing
In legacy layer modes that may produce out-of-range output given
in-range input, clamp the result after blending and before
compositing, instead of after compositing, to avoid producing
different results than 2.8 in certain cases.
.../gimpoperationadditionlegacy.c | 2 +-
.../layer-modes-legacy/gimpoperationdividelegacy.c | 12 +++---------
.../layer-modes-legacy/gimpoperationdodgelegacy.c | 4 +++-
.../gimpoperationgrainextractlegacy.c | 2 +-
.../gimpoperationgrainmergelegacy.c | 2 +-
.../gimpoperationmultiplylegacy.c | 2 +-
.../gimpoperationsubtractlegacy.c | 3 ++-
7 files changed, 12 insertions(+), 15 deletions(-)
---
diff --git a/app/operations/layer-modes-legacy/gimpoperationadditionlegacy.c
b/app/operations/layer-modes-legacy/gimpoperationadditionlegacy.c
index d9792b7..a7c43d6 100644
--- a/app/operations/layer-modes-legacy/gimpoperationadditionlegacy.c
+++ b/app/operations/layer-modes-legacy/gimpoperationadditionlegacy.c
@@ -97,9 +97,9 @@ gimp_operation_addition_legacy_process (GeglOperation *op,
for (b = RED; b < ALPHA; b++)
{
gfloat comp = in[b] + layer[b];
+ comp = CLAMP (comp, 0.0f, 1.0f);
out[b] = comp * ratio + in[b] * (1.0f - ratio);
- out[b] = CLAMP (out[b], 0.0f, 1.0f);
}
}
else
diff --git a/app/operations/layer-modes-legacy/gimpoperationdividelegacy.c
b/app/operations/layer-modes-legacy/gimpoperationdividelegacy.c
index d4e9e00..33052d2 100644
--- a/app/operations/layer-modes-legacy/gimpoperationdividelegacy.c
+++ b/app/operations/layer-modes-legacy/gimpoperationdividelegacy.c
@@ -23,6 +23,8 @@
#include <gegl-plugin.h>
+#include "libgimpmath/gimpmath.h"
+
#include "../operations-types.h"
#include "gimpoperationdividelegacy.h"
@@ -96,17 +98,9 @@ gimp_operation_divide_legacy_process (GeglOperation *op,
for (b = RED; b < ALPHA; b++)
{
gfloat comp = in[b] / layer[b];
-
- /* make infinities(or NaN) correspond to a high number,
- * to get more predictable math, ideally higher than 5.0
- * but it seems like some babl conversions might be
- * acting up then
- */
- if (!(comp > -42949672.0f && comp < 5.0f))
- comp = 1.0f;
+ comp = SAFE_CLAMP (comp, 0.0f, 1.0f);
out[b] = comp * ratio + in[b] * (1.0f - ratio);
- out[b] = CLAMP (out[b], 0.0f, 1.0f);
}
}
else
diff --git a/app/operations/layer-modes-legacy/gimpoperationdodgelegacy.c
b/app/operations/layer-modes-legacy/gimpoperationdodgelegacy.c
index 98df1b7..55e531f 100644
--- a/app/operations/layer-modes-legacy/gimpoperationdodgelegacy.c
+++ b/app/operations/layer-modes-legacy/gimpoperationdodgelegacy.c
@@ -23,6 +23,8 @@
#include <gegl-plugin.h>
+#include "libgimpmath/gimpmath.h"
+
#include "../operations-types.h"
#include "gimpoperationdodgelegacy.h"
@@ -96,7 +98,7 @@ gimp_operation_dodge_legacy_process (GeglOperation *op,
for (b = RED; b < ALPHA; b++)
{
gfloat comp = in[b] / (1.0f - layer[b]);
- comp = MIN (comp, 1.0f);
+ comp = SAFE_CLAMP (comp, 0.0f, 1.0f);
out[b] = comp * ratio + in[b] * (1.0f - ratio);
}
diff --git a/app/operations/layer-modes-legacy/gimpoperationgrainextractlegacy.c
b/app/operations/layer-modes-legacy/gimpoperationgrainextractlegacy.c
index 26b822e..42d232c 100644
--- a/app/operations/layer-modes-legacy/gimpoperationgrainextractlegacy.c
+++ b/app/operations/layer-modes-legacy/gimpoperationgrainextractlegacy.c
@@ -96,9 +96,9 @@ gimp_operation_grain_extract_legacy_process (GeglOperation *op,
for (b = RED; b < ALPHA; b++)
{
gfloat comp = in[b] - layer[b] + 128.0f / 255.0f;
+ comp = CLAMP (comp, 0.0f, 1.0f);
out[b] = comp * ratio + in[b] * (1.0f - ratio);
- out[b] = CLAMP (out[b], 0.0f, 1.0f);
}
}
else
diff --git a/app/operations/layer-modes-legacy/gimpoperationgrainmergelegacy.c
b/app/operations/layer-modes-legacy/gimpoperationgrainmergelegacy.c
index f16220f..a30ac88 100644
--- a/app/operations/layer-modes-legacy/gimpoperationgrainmergelegacy.c
+++ b/app/operations/layer-modes-legacy/gimpoperationgrainmergelegacy.c
@@ -96,9 +96,9 @@ gimp_operation_grain_merge_legacy_process (GeglOperation *op,
for (b = RED; b < ALPHA; b++)
{
gfloat comp = in[b] + layer[b] - 128.0f / 255.0f;
+ comp = CLAMP (comp, 0.0f, 1.0f);
out[b] = comp * ratio + in[b] * (1.0f - ratio);
- out[b] = CLAMP (out[b], 0.0f, 1.0f);
}
}
else
diff --git a/app/operations/layer-modes-legacy/gimpoperationmultiplylegacy.c
b/app/operations/layer-modes-legacy/gimpoperationmultiplylegacy.c
index 70d1d75..68a8a61 100644
--- a/app/operations/layer-modes-legacy/gimpoperationmultiplylegacy.c
+++ b/app/operations/layer-modes-legacy/gimpoperationmultiplylegacy.c
@@ -96,8 +96,8 @@ gimp_operation_multiply_legacy_process (GeglOperation *op,
for (b = RED; b < ALPHA; b++)
{
gfloat comp = layer[b] * in[b];
+
out[b] = comp * ratio + in[b] * (1.0f - ratio);
- out[b] = CLAMP (out[b], 0.0f, 1.0f);
}
}
else
diff --git a/app/operations/layer-modes-legacy/gimpoperationsubtractlegacy.c
b/app/operations/layer-modes-legacy/gimpoperationsubtractlegacy.c
index 09e6518..bc7bc92 100644
--- a/app/operations/layer-modes-legacy/gimpoperationsubtractlegacy.c
+++ b/app/operations/layer-modes-legacy/gimpoperationsubtractlegacy.c
@@ -96,8 +96,9 @@ gimp_operation_subtract_legacy_process (GeglOperation *op,
for (b = RED; b < ALPHA; b++)
{
gfloat comp = in[b] - layer[b];
+ comp = CLAMP (comp, 0.0f, 1.0f);
+
out[b] = comp * ratio + in[b] * (1.0f - ratio);
- out[b] = CLAMP(out[b], 0.0f, 1.0f);
}
}
else
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]