206 xsimd::batch_bool<float, A>
needFade(xsimd::batch<float, A> &xr, xsimd::batch<float, A> &yr)
const
208 using float_v = xsimd::batch<float, A>;
209 using float_m =
typename float_v::batch_bool_type;
214 const float_m outXMask = xsimd::abs(xr) > vXLimit;
215 const float_m outYMask = xsimd::abs(yr) > vYLimit;
217 return (outXMask | outYMask);
222 void apply2DFader(xsimd::batch<float, A> &vValue, xsimd::batch_bool<float, A> &excludeMask, xsimd::batch<float, A> &xr, xsimd::batch<float, A> &yr)
const
224 using float_v = xsimd::batch<float, A>;
225 using float_m =
typename float_v::batch_bool_type;
227 const float_v vValMax(255.f);
235 const float_v xra = xsimd::abs(xr);
236 float_m fadeXStartMask(
false);
237 float_m fadeYStartMask(
false);
239 float_v fadeValue(0);
240 const float_v vBaseValue =
241 xsimd::truncate_to_type<uint16_t>(vValue);
243 fadeXStartMask = xra > vXFadeLimitStart;
244 fadeXStartMask = (fadeXStartMask ^ excludeMask) & fadeXStartMask;
245 if (!xsimd::all(fadeXStartMask)) {
246 fadeValue = vBaseValue + (vValMax - vBaseValue) * (xra - vXFadeLimitStart) * vXFadeCoeff;
247 fadeValue = xsimd::select(fadeXStartMask & ((yr > vYFadeLimitStart) & (fadeValue < vValMax)),
248 fadeValue + (vValMax - fadeValue) * (yr - vYFadeLimitStart) * vYFadeCoeff,
250 vValue = xsimd::select(fadeXStartMask, fadeValue, vValue);
253 fadeYStartMask = yr > vYFadeLimitStart;
254 fadeYStartMask = (fadeYStartMask ^ fadeXStartMask) & fadeYStartMask;
255 if (!xsimd::all(fadeYStartMask)) {
256 fadeValue = vBaseValue + (vValMax - vBaseValue) * (yr - vYFadeLimitStart) * vYFadeCoeff;
257 fadeValue = xsimd::select(fadeYStartMask & ((xra > vXFadeLimitStart) & (fadeValue < vValMax)),
258 fadeValue + (vValMax - fadeValue) * (xra - vXFadeLimitStart) * vXFadeCoeff,
260 vValue = xsimd::select(fadeYStartMask, fadeValue, vValue);