diff --git a/libs/pigment/compositeops/KoCompositeOpAlphaDarken.h b/libs/pigment/compositeops/KoCompositeOpAlphaDarken.h --- a/libs/pigment/compositeops/KoCompositeOpAlphaDarken.h +++ b/libs/pigment/compositeops/KoCompositeOpAlphaDarken.h @@ -57,7 +57,7 @@ qint32 srcInc = (params.srcRowStride == 0) ? 0 : channels_nb; channels_type flow = scale(params.flow); - channels_type opacity = mul(flow, scale(params.opacity)); + channels_type opacity = scale(params.opacity); quint8* dstRowStart = params.dstRowStart; const quint8* srcRowStart = params.srcRowStart; const quint8* maskRowStart = params.maskRowStart; @@ -89,7 +89,7 @@ if(alpha_pos != -1) { channels_type fullFlowAlpha; - channels_type averageOpacity = mul(flow, scale(*params.lastOpacity)); + channels_type averageOpacity = scale(*params.lastOpacity); if (averageOpacity > opacity) { channels_type reverseBlend = KoColorSpaceMaths::divide(dstAlpha, averageOpacity); @@ -101,8 +101,10 @@ if (params.flow == 1.0) { dstAlpha = fullFlowAlpha; } else { - channels_type zeroFlowAlpha = unionShapeOpacity(srcAlpha, dstAlpha); + channels_type zeroFlowAlpha = dstAlpha; dstAlpha = lerp(zeroFlowAlpha, fullFlowAlpha, flow); + + } dst[alpha_pos] = dstAlpha; diff --git a/libs/pigment/compositeops/KoOptimizedCompositeOpAlphaDarken128.h b/libs/pigment/compositeops/KoOptimizedCompositeOpAlphaDarken128.h --- a/libs/pigment/compositeops/KoOptimizedCompositeOpAlphaDarken128.h +++ b/libs/pigment/compositeops/KoOptimizedCompositeOpAlphaDarken128.h @@ -29,13 +29,11 @@ struct OptionalParams { OptionalParams(const KoCompositeOp::ParameterInfo& params) : flow(params.flow) - , averageOpacity(*params.lastOpacity * params.flow) - , premultipliedOpacity(params.opacity * params.flow) + , averageOpacity(*params.lastOpacity) { } float flow; float averageOpacity; - float premultipliedOpacity; }; struct Pixel { @@ -83,12 +81,7 @@ msk_norm_alpha = src_alpha; } - // we don't use directly passed value - Q_UNUSED(opacity); - - // instead we should use opacity premultiplied by flow - opacity = oparams.premultipliedOpacity; - Vc::float_v opacity_vec(oparams.premultipliedOpacity); + Vc::float_v opacity_vec(opacity); src_alpha = msk_norm_alpha * opacity_vec; @@ -142,7 +135,7 @@ dst_alpha = fullFlowAlpha; } else { - Vc::float_v zeroFlowAlpha = src_alpha + dst_alpha - src_alpha * dst_alpha; + Vc::float_v zeroFlowAlpha = dst_alpha; Vc::float_v flow_norm_vec(oparams.flow); dst_alpha = (fullFlowAlpha - zeroFlowAlpha) * flow_norm_vec + zeroFlowAlpha; } @@ -166,9 +159,6 @@ const float uint8Rec1 = 1.0 / 255.0; float mskAlphaNorm = haveMask ? float(*mask) * uint8Rec1 * src[alpha_pos] : src[alpha_pos]; - Q_UNUSED(opacity); - opacity = oparams.premultipliedOpacity; - float srcAlphaNorm = mskAlphaNorm * opacity; if (dstAlphaNorm != 0) { @@ -195,7 +185,7 @@ if (flow == 1.0) { dst[alpha_pos] = fullFlowAlpha; } else { - float zeroFlowAlpha = unionShapeOpacity(srcAlphaNorm, dstAlphaNorm); + float zeroFlowAlpha = dstAlphaNorm; dst[alpha_pos] = lerp(zeroFlowAlpha, fullFlowAlpha, flow); } } diff --git a/libs/pigment/compositeops/KoOptimizedCompositeOpAlphaDarken32.h b/libs/pigment/compositeops/KoOptimizedCompositeOpAlphaDarken32.h --- a/libs/pigment/compositeops/KoOptimizedCompositeOpAlphaDarken32.h +++ b/libs/pigment/compositeops/KoOptimizedCompositeOpAlphaDarken32.h @@ -31,13 +31,11 @@ struct OptionalParams { OptionalParams(const KoCompositeOp::ParameterInfo& params) : flow(params.flow), - averageOpacity(*params.lastOpacity * params.flow), - premultipliedOpacity(params.opacity * params.flow) + averageOpacity(*params.lastOpacity) { } float flow; float averageOpacity; - float premultipliedOpacity; }; /** @@ -59,12 +57,7 @@ Vc::float_v src_alpha; Vc::float_v dst_alpha; - // we don't use directly passed value - Q_UNUSED(opacity); - - // instead we should use opacity premultiplied by flow - opacity = oparams.premultipliedOpacity; - Vc::float_v opacity_vec(255.0 * oparams.premultipliedOpacity); + Vc::float_v opacity_vec(255.0 * opacity); Vc::float_v average_opacity_vec(255.0 * oparams.averageOpacity); Vc::float_v flow_norm_vec(oparams.flow); @@ -170,8 +163,7 @@ if (oparams.flow == 1.0) { dst_alpha = fullFlowAlpha; } else { - Vc::float_v zeroFlowAlpha = src_alpha + dst_alpha - - dst_blend * dst_alpha; + Vc::float_v zeroFlowAlpha = dst_alpha; dst_alpha = (fullFlowAlpha - zeroFlowAlpha) * flow_norm_vec + zeroFlowAlpha; } @@ -196,9 +188,6 @@ float srcAlphaNorm; float mskAlphaNorm; - Q_UNUSED(opacity); - opacity = oparams.premultipliedOpacity; - if (haveMask) { mskAlphaNorm = float(*mask) * uint8Rec2 * src[alpha_pos]; srcAlphaNorm = mskAlphaNorm * opacity; @@ -234,7 +223,7 @@ if (flow == 1.0) { dstAlpha = fullFlowAlpha * uint8Max; } else { - float zeroFlowAlpha = unionShapeOpacity(srcAlphaNorm, dstAlphaNorm); + float zeroFlowAlpha = dstAlphaNorm; dstAlpha = lerp(zeroFlowAlpha, fullFlowAlpha, flow) * uint8Max; }