40 if (allChannelFlags) {
41 genericComposite<true, true, true>(params, &flags);
43 genericComposite<true, true, false>(params, &flags);
46 if (allChannelFlags) {
47 genericComposite<true, false, true>(params, &flags);
49 genericComposite<true, false, false>(params, &flags);
54 if (allChannelFlags) {
55 genericComposite<false, true, true>(params, &flags);
57 genericComposite<false, true, false>(params, &flags);
60 if (allChannelFlags) {
61 genericComposite<false, false, true>(params, &flags);
63 genericComposite<false, false, false>(params, &flags);
83 for (qint32 r = params.
rows; r > 0; --r) {
86 const quint8 *mask = maskRowStart;
88 for (qint32 c = params.
cols; c > 0; --c) {
91 channels_type mskAlpha = useMask ? mul(scale<channels_type>(*mask), srcAlpha) : srcAlpha;
93 srcAlpha = mul(mskAlpha, opacity);
95 if (dstAlpha != zeroValue<channels_type>()) {
99 if (i !=
alpha_pos && (allChannelFlags || channelFlags->testBit(i))) {
100 dst[i] =
lerp(dst[i], src[i], t);
104 if constexpr (!allChannelFlags) {
105 memset(
reinterpret_cast<quint8 *
>(dst), 0,
pixel_size);
108 if (i !=
alpha_pos && (allChannelFlags || channelFlags->testBit(i))) {
114 if constexpr (
alpha_pos != -1 && !alphaLocked) {
128 if constexpr (useMask) {