diff --git a/libs/pigment/compositeops/KoCompositeOpFunctions.h b/libs/pigment/compositeops/KoCompositeOpFunctions.h --- a/libs/pigment/compositeops/KoCompositeOpFunctions.h +++ b/libs/pigment/compositeops/KoCompositeOpFunctions.h @@ -177,12 +177,12 @@ inline T cfColorDodge(T src, T dst) { using namespace Arithmetic; - if(dst == zeroValue()) - return zeroValue(); + if(src == unitValue()) + return unitValue(); T invSrc = inv(src); - if(invSrc < dst) + if(invSrc == zeroValue()) return unitValue(); return Arithmetic::clamp(div(dst, invSrc)); @@ -344,6 +344,13 @@ using namespace Arithmetic; typedef typename KoColorSpaceMathsTraits::compositetype composite_type; + if (src == zeroValue()) { + return zeroValue(); + } + if (dst == zeroValue()) { + return zeroValue(); + } + // min(max(2 / (1/dst + 1/src), 0), 1) composite_type unit = unitValue(); composite_type s = (src != zeroValue()) ? div(unit, src) : unit;