Changeset View
Changeset View
Standalone View
Standalone View
libs/image/kis_antialiasing_fade_maker.h
Context not available. | |||||
83 | return false; | 83 | return false; | ||
---|---|---|---|---|---|
84 | } | 84 | } | ||
85 | 85 | | |||
86 | qreal getRadius(){ | 86 | #if defined HAVE_VC | ||
87 | return m_radius; | 87 | Vc::float_m needFade(Vc::float_v &dist) { | ||
88 | } | 88 | const Vc::float_v vOne(Vc::One); | ||
89 | const Vc::float_v vValMax(255.f); | ||||
89 | 90 | | |||
90 | qreal getAntialiasingFadeStart(){ | 91 | Vc::float_v vRadius(m_radius); | ||
91 | return m_antialiasingFadeStart; | 92 | Vc::float_v vFadeStartValue(m_fadeStartValue); | ||
92 | } | 93 | Vc::float_v vAntialiasingFadeStart(m_antialiasingFadeStart); | ||
94 | Vc::float_v vAntialiasingFadeCoeff(m_antialiasingFadeCoeff); | ||||
93 | 95 | | |||
94 | qreal getFadeStartValue() { | 96 | Vc::float_m outsideMask = dist > vRadius; | ||
95 | return m_fadeStartValue; | 97 | dist(outsideMask) = vOne; | ||
96 | } | | |||
97 | 98 | | |||
98 | qreal getAntialiasingFadeCoeff(){ | 99 | Vc::float_m fadeStartMask(false); | ||
99 | return m_antialiasingFadeCoeff; | | |||
100 | } | | |||
101 | 100 | | |||
102 | bool getAliasingEnabled(){ | 101 | if(m_enableAntialiasing){ | ||
103 | return m_enableAntialiasing; | 102 | fadeStartMask = dist > vAntialiasingFadeStart; | ||
103 | dist((outsideMask ^ fadeStartMask) & fadeStartMask) = (vFadeStartValue + | ||||
104 | (dist - vAntialiasingFadeStart) * vAntialiasingFadeCoeff) / vValMax; | ||||
105 | } | ||||
106 | return (outsideMask | fadeStartMask); | ||||
104 | } | 107 | } | ||
105 | 108 | | |||
109 | #endif /* defined HAVE_VC */ | ||||
110 | | ||||
106 | private: | 111 | private: | ||
107 | qreal m_radius; | 112 | qreal m_radius; | ||
108 | quint8 m_fadeStartValue; | 113 | quint8 m_fadeStartValue; | ||
Context not available. | |||||
194 | return false; | 199 | return false; | ||
195 | } | 200 | } | ||
196 | 201 | | |||
202 | #if defined HAVE_VC | ||||
203 | Vc::float_m needFade(Vc::float_v &xr, Vc::float_v &yr) const { | ||||
204 | | ||||
205 | Vc::float_v vXLimit(m_xLimit); | ||||
206 | Vc::float_v vYLimit(m_yLimit); | ||||
207 | | ||||
208 | | ||||
209 | Vc::float_m outXMask = xr > vXLimit; | ||||
210 | Vc::float_m outYMask = yr > vYLimit; | ||||
211 | | ||||
212 | return (outXMask | outYMask); | ||||
213 | } | ||||
214 | | ||||
215 | // Apply fader separatedly to avoid calculating vValue twice. | ||||
216 | void apply2DFader(Vc::float_v &vValue, Vc::float_m &excludeMask, Vc::float_v &xr, Vc::float_v &yr) const { | ||||
217 | const Vc::float_v vValMax(255.f); | ||||
218 | | ||||
219 | if(m_enableAntialiasing){ | ||||
220 | Vc::float_v vXFadeLimitStart(m_xFadeLimitStart); | ||||
221 | Vc::float_v vYFadeLimitStart(m_yFadeLimitStart); | ||||
222 | Vc::float_v vXFadeCoeff(m_xFadeCoeff); | ||||
223 | Vc::float_v vYFadeCoeff(m_yFadeCoeff); | ||||
224 | | ||||
225 | Vc::float_v xra = abs(xr); | ||||
226 | Vc::float_m fadeXStartMask(false); | ||||
227 | Vc::float_m fadeYStartMask(false); | ||||
228 | | ||||
229 | Vc::float_v fadeValue; | ||||
230 | Vc::SimdArray<quint16,Vc::float_v::size()> vBaseValue(vValue); | ||||
231 | | ||||
232 | fadeXStartMask = xra > vXFadeLimitStart; | ||||
233 | fadeXStartMask = (fadeXStartMask ^ excludeMask) & fadeXStartMask; | ||||
234 | if (!fadeXStartMask.isFull()) { | ||||
235 | fadeValue = vBaseValue + (vValMax - vBaseValue) * (xra - vXFadeLimitStart) * vXFadeCoeff; | ||||
236 | fadeValue(fadeXStartMask & ((yr > vYFadeLimitStart) & (fadeValue < vValMax)) ) = | ||||
237 | fadeValue + (vValMax - fadeValue) * (yr - vYFadeLimitStart) * vYFadeCoeff; | ||||
238 | vValue(fadeXStartMask) = fadeValue; | ||||
239 | } | ||||
240 | | ||||
241 | fadeYStartMask = yr > vYFadeLimitStart; | ||||
242 | fadeYStartMask = (fadeYStartMask ^ fadeXStartMask) & fadeYStartMask; | ||||
243 | if (!fadeYStartMask.isFull()) { | ||||
244 | fadeValue = vBaseValue + (vValMax - vBaseValue) * (yr - vYFadeLimitStart) * vYFadeCoeff; | ||||
245 | fadeValue(fadeYStartMask & ((xra > vXFadeLimitStart) & (fadeValue < vValMax)) ) = | ||||
246 | fadeValue + (vValMax - fadeValue) * (xra - vXFadeLimitStart) * vXFadeCoeff; | ||||
247 | vValue(fadeYStartMask) = fadeValue; | ||||
248 | } | ||||
249 | } | ||||
250 | return; | ||||
251 | } | ||||
252 | | ||||
253 | #endif /* defined HAVE_VC */ | ||||
254 | | ||||
197 | private: | 255 | private: | ||
198 | qreal m_xLimit; | 256 | qreal m_xLimit; | ||
199 | qreal m_yLimit; | 257 | qreal m_yLimit; | ||
Context not available. |