Changeset View
Changeset View
Standalone View
Standalone View
libs/image/kis_brush_mask_applicator_factories.cpp
Show First 20 Lines • Show All 156 Lines • ▼ Show 20 Line(s) | 155 | if (useSmoothing) { | |||
---|---|---|---|---|---|
157 | yr = Vc::abs(yr) + vOne; | 157 | yr = Vc::abs(yr) + vOne; | ||
158 | } | 158 | } | ||
159 | 159 | | |||
160 | Vc::float_v vNormFade = pow2(xr * vTransformedFadeX) + pow2(yr * vTransformedFadeY); | 160 | Vc::float_v vNormFade = pow2(xr * vTransformedFadeX) + pow2(yr * vTransformedFadeY); | ||
161 | 161 | | |||
162 | //255 * n * (normeFade - 1) / (normeFade - n) | 162 | //255 * n * (normeFade - 1) / (normeFade - n) | ||
163 | Vc::float_v vFade = n * (vNormFade - vOne) / (vNormFade - n); | 163 | Vc::float_v vFade = n * (vNormFade - vOne) / (vNormFade - n); | ||
164 | 164 | | |||
165 | // Mask in the inner circe of the mask | 165 | // Mask in the inner circle of the mask | ||
166 | Vc::float_m mask = vNormFade < vOne; | 166 | Vc::float_m mask = vNormFade < vOne; | ||
167 | vFade.setZero(mask); | 167 | vFade.setZero(mask); | ||
168 | 168 | | |||
169 | // Mask out the outer circe of the mask | 169 | // Mask out the outer circle of the mask | ||
170 | vFade(outsideMask) = vOne; | 170 | vFade(outsideMask) = vOne; | ||
171 | 171 | | |||
172 | vFade.store(bufferPointer, Vc::Aligned); | 172 | vFade.store(bufferPointer, Vc::Aligned); | ||
173 | } | 173 | } | ||
174 | } else { | 174 | } else { | ||
175 | // Mask out everything outside the circle | 175 | // Mask out everything outside the circle | ||
176 | vOne.store(bufferPointer, Vc::Aligned); | 176 | vOne.store(bufferPointer, Vc::Aligned); | ||
177 | } | 177 | } | ||
▲ Show 20 Lines • Show All 57 Lines • ▼ Show 20 Line(s) | 226 | for (int i=0; i < width; i+= Vc::float_v::size()){ | |||
235 | // Apply FadeMaker mask and operations | 235 | // Apply FadeMaker mask and operations | ||
236 | Vc::float_m excludeMask = d->fadeMaker.needFade(dist); | 236 | Vc::float_m excludeMask = d->fadeMaker.needFade(dist); | ||
237 | 237 | | |||
238 | if (!excludeMask.isFull()) { | 238 | if (!excludeMask.isFull()) { | ||
239 | Vc::float_v valDist = dist * vDistfactor; | 239 | Vc::float_v valDist = dist * vDistfactor; | ||
240 | Vc::float_v fullFade = vAlphafactor * ( VcExtraMath::erf(valDist + vCenter) - VcExtraMath::erf(valDist - vCenter)); | 240 | Vc::float_v fullFade = vAlphafactor * ( VcExtraMath::erf(valDist + vCenter) - VcExtraMath::erf(valDist - vCenter)); | ||
241 | 241 | | |||
242 | Vc::float_m mask; | 242 | Vc::float_m mask; | ||
243 | // Mask in the inner circe of the mask | 243 | // Mask in the inner circle of the mask | ||
244 | mask = fullFade < vZero; | 244 | mask = fullFade < vZero; | ||
245 | fullFade.setZero(mask); | 245 | fullFade.setZero(mask); | ||
246 | 246 | | |||
247 | // Mask the outter circle | 247 | // Mask the outer circle | ||
248 | mask = fullFade > 254.974f; | 248 | mask = fullFade > 254.974f; | ||
249 | fullFade(mask) = vValMax; | 249 | fullFade(mask) = vValMax; | ||
250 | 250 | | |||
251 | // Mask (value - value), presicion errors. | 251 | // Mask (value - value), precision errors. | ||
252 | Vc::float_v vFade = (vValMax - fullFade) / vValMax; | 252 | Vc::float_v vFade = (vValMax - fullFade) / vValMax; | ||
253 | 253 | | |||
254 | // return original dist values before vFade transform | 254 | // return original dist values before vFade transform | ||
255 | vFade(excludeMask) = dist; | 255 | vFade(excludeMask) = dist; | ||
256 | vFade.store(bufferPointer, Vc::Aligned); | 256 | vFade.store(bufferPointer, Vc::Aligned); | ||
257 | 257 | | |||
258 | } else { | 258 | } else { | ||
259 | dist.store(bufferPointer, Vc::Aligned); | 259 | dist.store(bufferPointer, Vc::Aligned); | ||
▲ Show 20 Lines • Show All 74 Lines • ▼ Show 20 Line(s) | |||||
334 | // Vc::float_v vCurvedData1(curveDataPointer,vAlphaValue + 1); | 334 | // Vc::float_v vCurvedData1(curveDataPointer,vAlphaValue + 1); | ||
335 | 335 | | |||
336 | // vAlpha | 336 | // vAlpha | ||
337 | Vc::float_v fullFade = ( | 337 | Vc::float_v fullFade = ( | ||
338 | (vOne - alphaValueF) * vCurvedData + | 338 | (vOne - alphaValueF) * vCurvedData + | ||
339 | alphaValueF * vCurvedData1); | 339 | alphaValueF * vCurvedData1); | ||
340 | 340 | | |||
341 | Vc::float_m mask; | 341 | Vc::float_m mask; | ||
342 | // Mask in the inner circe of the mask | 342 | // Mask in the inner circle of the mask | ||
343 | mask = fullFade < vZero; | 343 | mask = fullFade < vZero; | ||
344 | fullFade.setZero(mask); | 344 | fullFade.setZero(mask); | ||
345 | 345 | | |||
346 | // Mask outer circle of mask | 346 | // Mask outer circle of mask | ||
347 | mask = fullFade >= vOne; | 347 | mask = fullFade >= vOne; | ||
348 | Vc::float_v vFade = (vOne - fullFade); | 348 | Vc::float_v vFade = (vOne - fullFade); | ||
349 | vFade.setZero(mask); | 349 | vFade.setZero(mask); | ||
350 | 350 | | |||
▲ Show 20 Lines • Show All 96 Lines • ▼ Show 20 Line(s) | 432 | if (!outsideMask.isFull()) { | |||
447 | Vc::float_v::IndexType fyrInt(fyr * vTolerance); | 447 | Vc::float_v::IndexType fyrInt(fyr * vTolerance); | ||
448 | 448 | | |||
449 | Vc::float_m fadeXMask = (fxr > vOne) && ((fxrInt >= fyrInt) || fyr < vOne); | 449 | Vc::float_m fadeXMask = (fxr > vOne) && ((fxrInt >= fyrInt) || fyr < vOne); | ||
450 | Vc::float_m fadeYMask = (fyr > vOne) && ((fyrInt > fxrInt) || fxr < vOne); | 450 | Vc::float_m fadeYMask = (fyr > vOne) && ((fyrInt > fxrInt) || fxr < vOne); | ||
451 | 451 | | |||
452 | vFade(fadeXMask) = fxrNorm; | 452 | vFade(fadeXMask) = fxrNorm; | ||
453 | vFade(!fadeXMask && fadeYMask) = fyrNorm; | 453 | vFade(!fadeXMask && fadeYMask) = fyrNorm; | ||
454 | 454 | | |||
455 | // Mask out the outer circe of the mask | 455 | // Mask out the outer circle of the mask | ||
456 | vFade(outsideMask) = vOne; | 456 | vFade(outsideMask) = vOne; | ||
457 | vFade.store(bufferPointer, Vc::Aligned); | 457 | vFade.store(bufferPointer, Vc::Aligned); | ||
458 | } else { | 458 | } else { | ||
459 | // Mask out everything outside the circle | 459 | // Mask out everything outside the circle | ||
460 | vOne.store(bufferPointer, Vc::Aligned); | 460 | vOne.store(bufferPointer, Vc::Aligned); | ||
461 | } | 461 | } | ||
462 | 462 | | |||
463 | currentIndices = currentIndices + increment; | 463 | currentIndices = currentIndices + increment; | ||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Line(s) | 514 | if (!excludeMask.isFull()) { | |||
515 | Vc::float_v fullFade = vValMax - (vAlphafactor * (VcExtraMath::erf((vhalfWidth + xr) * vXFade) + VcExtraMath::erf((vhalfWidth - xr) * vXFade)) | 515 | Vc::float_v fullFade = vValMax - (vAlphafactor * (VcExtraMath::erf((vhalfWidth + xr) * vXFade) + VcExtraMath::erf((vhalfWidth - xr) * vXFade)) | ||
516 | * (VcExtraMath::erf((vhalfHeight + yr) * vYFade) + VcExtraMath::erf((vhalfHeight - yr) * vYFade))); | 516 | * (VcExtraMath::erf((vhalfHeight + yr) * vYFade) + VcExtraMath::erf((vhalfHeight - yr) * vYFade))); | ||
517 | 517 | | |||
518 | // apply antialias fader | 518 | // apply antialias fader | ||
519 | d->fadeMaker.apply2DFader(fullFade,excludeMask,xr,yr); | 519 | d->fadeMaker.apply2DFader(fullFade,excludeMask,xr,yr); | ||
520 | 520 | | |||
521 | Vc::float_m mask; | 521 | Vc::float_m mask; | ||
522 | 522 | | |||
523 | // Mask in the inner circe of the mask | 523 | // Mask in the inner circle of the mask | ||
524 | mask = fullFade < vZero; | 524 | mask = fullFade < vZero; | ||
525 | fullFade.setZero(mask); | 525 | fullFade.setZero(mask); | ||
526 | 526 | | |||
527 | // Mask the outter circle | 527 | // Mask the outer circle | ||
528 | mask = fullFade > 254.974f; | 528 | mask = fullFade > 254.974f; | ||
529 | fullFade(mask) = vValMax; | 529 | fullFade(mask) = vValMax; | ||
530 | 530 | | |||
531 | // Mask (value - value), presicion errors. | 531 | // Mask (value - value), precision errors. | ||
532 | Vc::float_v vFade = fullFade / vValMax; | 532 | Vc::float_v vFade = fullFade / vValMax; | ||
533 | 533 | | |||
534 | // return original vValue values before vFade transform | 534 | // return original vValue values before vFade transform | ||
535 | vFade(excludeMask) = vValue; | 535 | vFade(excludeMask) = vValue; | ||
536 | vFade.store(bufferPointer, Vc::Aligned); | 536 | vFade.store(bufferPointer, Vc::Aligned); | ||
537 | 537 | | |||
538 | } else { | 538 | } else { | ||
539 | vValue.store(bufferPointer, Vc::Aligned); | 539 | vValue.store(bufferPointer, Vc::Aligned); | ||
▲ Show 20 Lines • Show All 82 Lines • ▼ Show 20 Line(s) | 602 | if (!excludeMask.isFull()) { | |||
622 | Vc::float_v fullFade = vValMax * (vOne - (vCurvedDataSIndex * (vOne - vCurvedDataSIndexInv) * | 622 | Vc::float_v fullFade = vValMax * (vOne - (vCurvedDataSIndex * (vOne - vCurvedDataSIndexInv) * | ||
623 | vCurvedDataTIndex * (vOne - vCurvedDataTIndexInv))); | 623 | vCurvedDataTIndex * (vOne - vCurvedDataTIndexInv))); | ||
624 | 624 | | |||
625 | // apply antialias fader | 625 | // apply antialias fader | ||
626 | d->fadeMaker.apply2DFader(fullFade,excludeMask,xr,yr); | 626 | d->fadeMaker.apply2DFader(fullFade,excludeMask,xr,yr); | ||
627 | 627 | | |||
628 | Vc::float_m mask; | 628 | Vc::float_m mask; | ||
629 | 629 | | |||
630 | // Mask in the inner circe of the mask | 630 | // Mask in the inner circle of the mask | ||
631 | mask = fullFade < vZero; | 631 | mask = fullFade < vZero; | ||
632 | fullFade.setZero(mask); | 632 | fullFade.setZero(mask); | ||
633 | 633 | | |||
634 | // Mask the outter circle | 634 | // Mask the outer circle | ||
635 | mask = fullFade > 254.974f; | 635 | mask = fullFade > 254.974f; | ||
636 | fullFade(mask) = vValMax; | 636 | fullFade(mask) = vValMax; | ||
637 | 637 | | |||
638 | // Mask (value - value), presicion errors. | 638 | // Mask (value - value), precision errors. | ||
639 | Vc::float_v vFade = fullFade / vValMax; | 639 | Vc::float_v vFade = fullFade / vValMax; | ||
640 | 640 | | |||
641 | // return original vValue values before vFade transform | 641 | // return original vValue values before vFade transform | ||
642 | vFade(excludeMask) = vValue; | 642 | vFade(excludeMask) = vValue; | ||
643 | vFade.store(bufferPointer, Vc::Aligned); | 643 | vFade.store(bufferPointer, Vc::Aligned); | ||
644 | 644 | | |||
645 | } else { | 645 | } else { | ||
646 | vValue.store(bufferPointer, Vc::Aligned); | 646 | vValue.store(bufferPointer, Vc::Aligned); | ||
647 | } | 647 | } | ||
648 | currentIndices = currentIndices + increment; | 648 | currentIndices = currentIndices + increment; | ||
649 | 649 | | |||
650 | bufferPointer += Vc::float_v::size(); | 650 | bufferPointer += Vc::float_v::size(); | ||
651 | } | 651 | } | ||
652 | } | 652 | } | ||
653 | 653 | | |||
654 | #endif /* defined HAVE_VC */ | 654 | #endif /* defined HAVE_VC */ |