diff options
author | Kevin Dietrich <kevin.dietrich@mailoo.org> | 2014-04-28 19:38:34 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-04-29 16:03:09 +0400 |
commit | 1dcf95684929806e80e3d0b514c8690cd757b1bd (patch) | |
tree | 2d5c4cc6a3c73996ec99e8f2c068dd92f3bc839a /source/blender/compositor/operations/COM_MixOperation.cpp | |
parent | 4ff3ebf45c8b7fe6911fb40d43384dc04d7a132b (diff) |
Fix for wrong behavior of 'darken' blend mode with factor.
The formula was not consistent across Blender and behaved strangely, now it is
a simple linear blend between color1 and min(color1, color2).
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D489
Diffstat (limited to 'source/blender/compositor/operations/COM_MixOperation.cpp')
-rw-r--r-- | source/blender/compositor/operations/COM_MixOperation.cpp | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/source/blender/compositor/operations/COM_MixOperation.cpp b/source/blender/compositor/operations/COM_MixOperation.cpp index 247880c84e3..04025329ad4 100644 --- a/source/blender/compositor/operations/COM_MixOperation.cpp +++ b/source/blender/compositor/operations/COM_MixOperation.cpp @@ -292,17 +292,9 @@ void MixDarkenOperation::executePixelSampled(float output[4], float x, float y, value *= inputColor2[3]; } float valuem = 1.0f - value; - float tmp; - tmp = inputColor2[0] + ((1.0f - inputColor2[0]) * valuem); - if (tmp < inputColor1[0]) output[0] = tmp; - else output[0] = inputColor1[0]; - tmp = inputColor2[1] + ((1.0f - inputColor2[1]) * valuem); - if (tmp < inputColor1[1]) output[1] = tmp; - else output[1] = inputColor1[1]; - tmp = inputColor2[2] + ((1.0f - inputColor2[2]) * valuem); - if (tmp < inputColor1[2]) output[2] = tmp; - else output[2] = inputColor1[2]; - + output[0] = min_ff(inputColor1[0], inputColor2[0]) * value + inputColor1[0] * valuem; + output[1] = min_ff(inputColor1[1], inputColor2[1]) * value + inputColor1[1] * valuem; + output[2] = min_ff(inputColor1[2], inputColor2[2]) * value + inputColor1[2] * valuem; output[3] = inputColor1[3]; clampIfNeeded(output); |