Krita Source Code Documentation
Loading...
Searching...
No Matches
KisConvolutionWorkerSpatial< _IteratorFactory_ > Class Template Reference

#include <kis_convolution_worker_spatial.h>

+ Inheritance diagram for KisConvolutionWorkerSpatial< _IteratorFactory_ >:

Public Member Functions

void cleanUp ()
 
void convolveCache (quint8 *dstPtr)
 
template<bool additionalMultiplierActive>
qreal convolveOneChannelFromCache (quint8 *dstPtr, quint32 channel, qreal additionalMultiplier=0.0)
 
void execute (const KisConvolutionKernelSP kernel, const KisPaintDeviceSP src, QPoint srcPos, QPoint dstPos, QSize areaSize, const QRect &dataRect) override
 
 KisConvolutionWorkerSpatial (KisPainter *painter, KoUpdater *progress)
 
void limitValue (qreal *value, qreal lowBound, qreal highBound)
 
void loadPixelToCache (qreal **cache, const quint8 *data, int index)
 
void moveKernelDown (typename _IteratorFactory_::HLineConstIterator &kitSrc, qreal **pixelPtrCache)
 
void moveKernelRight (typename _IteratorFactory_::VLineConstIterator &kitSrc, qreal **pixelPtrCache)
 
 ~KisConvolutionWorkerSpatial () override
 
- Public Member Functions inherited from KisConvolutionWorker< _IteratorFactory_ >
 KisConvolutionWorker (KisPainter *painter, KoUpdater *progress)
 
virtual ~KisConvolutionWorker ()
 

Private Attributes

qreal * m_absoluteOffset
 
int m_alphaCachePos
 
int m_alphaRealPos
 
quint32 m_cacheSize
 
QList< KoChannelInfo * > m_convChannelList
 
quint32 m_convolveChannelsNo
 
QVector< PtrFromDoublem_fromDoubleFuncPtr
 
qreal * m_kernelData
 
qreal m_kernelFactor
 
quint32 m_kh
 
quint32 m_khalfHeight
 
quint32 m_khalfWidth
 
quint32 m_kw
 
qreal * m_maxClamp
 
qreal * m_minClamp
 
qreal ** m_pixelPtrCache
 
qreal ** m_pixelPtrCacheCopy
 
quint32 m_pixelSize
 
QVector< PtrToDoublem_toDoubleFuncPtr
 

Additional Inherited Members

- Protected Member Functions inherited from KisConvolutionWorker< _IteratorFactory_ >
QList< KoChannelInfo * > convolvableChannelList (const KisPaintDeviceSP src)
 
- Protected Attributes inherited from KisConvolutionWorker< _IteratorFactory_ >
KisPainterm_painter
 
KoUpdaterm_progress
 

Detailed Description

template<class _IteratorFactory_>
class KisConvolutionWorkerSpatial< _IteratorFactory_ >

Definition at line 15 of file kis_convolution_worker_spatial.h.

Constructor & Destructor Documentation

◆ KisConvolutionWorkerSpatial()

◆ ~KisConvolutionWorkerSpatial()

template<class _IteratorFactory_ >
KisConvolutionWorkerSpatial< _IteratorFactory_ >::~KisConvolutionWorkerSpatial ( )
inlineoverride

Definition at line 30 of file kis_convolution_worker_spatial.h.

30 {
31 }

Member Function Documentation

◆ cleanUp()

◆ convolveCache()

template<class _IteratorFactory_ >
void KisConvolutionWorkerSpatial< _IteratorFactory_ >::convolveCache ( quint8 * dstPtr)
inline

Definition at line 274 of file kis_convolution_worker_spatial.h.

274 {
275 if (m_alphaCachePos >= 0) {
276 qreal alphaValue = convolveOneChannelFromCache<false>(dstPtr, m_alphaCachePos);
277
278 // TODO: we need a special case for applying LoG filter,
279 // when the alpha i suniform and therefore should not be
280 // filtered!
281 //alphaValue = 255.0;
282
283 if (alphaValue != 0.0) {
284 qreal alphaValueInv = 1.0 / alphaValue;
285
286 for (quint32 k = 0; k < m_convolveChannelsNo; ++k) {
287 if (k == (quint32)m_alphaCachePos) continue;
288 convolveOneChannelFromCache<true>(dstPtr, k, alphaValueInv);
289 }
290 } else {
291 for (quint32 k = 0; k < m_convolveChannelsNo; ++k) {
292 if (k == (quint32)m_alphaCachePos) continue;
293
294 const qreal zeroValue = 0.0;
295 const quint32 channelPos = m_convChannelList[k]->pos();
296 m_fromDoubleFuncPtr[k](dstPtr, channelPos, zeroValue);
297 }
298 }
299 } else {
300 for (quint32 k = 0; k < m_convolveChannelsNo; ++k) {
301 convolveOneChannelFromCache<false>(dstPtr, k);
302 }
303 }
304 }

References KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_alphaCachePos, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_convChannelList, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_convolveChannelsNo, and KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_fromDoubleFuncPtr.

◆ convolveOneChannelFromCache()

template<class _IteratorFactory_ >
template<bool additionalMultiplierActive>
qreal KisConvolutionWorkerSpatial< _IteratorFactory_ >::convolveOneChannelFromCache ( quint8 * dstPtr,
quint32 channel,
qreal additionalMultiplier = 0.0 )
inline

Definition at line 251 of file kis_convolution_worker_spatial.h.

251 {
252 qreal interimConvoResult = 0;
253
254 for (quint32 pIndex = 0; pIndex < m_cacheSize; ++pIndex) {
255 qreal cacheValue = m_pixelPtrCache[pIndex][channel];
256 interimConvoResult += m_kernelData[m_cacheSize - pIndex - 1] * cacheValue;
257 }
258
259 qreal channelPixelValue;
260 if (additionalMultiplierActive) {
261 channelPixelValue = interimConvoResult * m_kernelFactor * additionalMultiplier + m_absoluteOffset[channel];
262 } else {
263 channelPixelValue = interimConvoResult * m_kernelFactor + m_absoluteOffset[channel];
264 }
265
266 limitValue(&channelPixelValue, m_minClamp[channel], m_maxClamp[channel]);
267
268 const quint32 channelPos = m_convChannelList[channel]->pos();
269 m_fromDoubleFuncPtr[channel](dstPtr, channelPos, channelPixelValue);
270
271 return channelPixelValue;
272 }
void limitValue(qreal *value, qreal lowBound, qreal highBound)

References KisConvolutionWorkerSpatial< _IteratorFactory_ >::limitValue(), KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_absoluteOffset, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_cacheSize, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_convChannelList, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_fromDoubleFuncPtr, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kernelData, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kernelFactor, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_maxClamp, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_minClamp, and KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_pixelPtrCache.

◆ execute()

template<class _IteratorFactory_ >
void KisConvolutionWorkerSpatial< _IteratorFactory_ >::execute ( const KisConvolutionKernelSP kernel,
const KisPaintDeviceSP src,
QPoint srcPos,
QPoint dstPos,
QSize areaSize,
const QRect & dataRect )
inlineoverridevirtual

Implements KisConvolutionWorker< _IteratorFactory_ >.

Definition at line 49 of file kis_convolution_worker_spatial.h.

49 {
50 // store some kernel characteristics
51 m_kw = kernel->width();
52 m_kh = kernel->height();
53 m_khalfWidth = (m_kw > 0) ? (m_kw - 1) / 2 : m_kw;
54 m_khalfHeight = (m_kh > 0) ? (m_kh - 1) / 2 : m_kh;
56 m_pixelSize = src->colorSpace()->pixelSize();
57 quint32 channelCount = src->colorSpace()->channelCount();
58
59 m_kernelData = new qreal[m_cacheSize];
60 qreal *kernelDataPtr = m_kernelData;
61
62 // fill in data
63 for (quint32 r = 0; r < kernel->height(); r++) {
64 for (quint32 c = 0; c < kernel->width(); c++) {
65 *kernelDataPtr = (*(kernel->data()))(r, c);
66 kernelDataPtr++;
67 }
68 }
69
70 // Make the area we cover as small as possible
71 if (this->m_painter->selection()) {
72 QRect r = this->m_painter->selection()->selectedRect().intersected(QRect(srcPos, areaSize));
73 dstPos += r.topLeft() - srcPos;
74 srcPos = r.topLeft();
75 areaSize = r.size();
76 }
77
78 if (areaSize.width() == 0 || areaSize.height() == 0)
79 return;
80
81 // Don't convolve with an even sized kernel
82 Q_ASSERT((m_kw & 0x01) == 1 || (m_kh & 0x01) == 1 || kernel->factor() != 0);
83
84 // find out which channels need be convolved
87
88 for (int i = 0; i < m_convChannelList.size(); i++) {
89 if (m_convChannelList[i]->channelType() == KoChannelInfo::ALPHA) {
92 }
93 }
94
95 bool hasProgressUpdater = this->m_progress;
96 if (hasProgressUpdater)
97 this->m_progress->setProgress(0);
98
99 // Iterate over all pixels in our rect, create a cache of pixels around the current pixel and convolve them.
100 m_pixelPtrCache = new qreal*[m_cacheSize];
101 m_pixelPtrCacheCopy = new qreal*[m_cacheSize];
102 for (quint32 c = 0; c < m_cacheSize; ++c) {
103 m_pixelPtrCache[c] = new qreal[channelCount];
104 m_pixelPtrCacheCopy[c] = new qreal[channelCount];
105 }
106
107 // decide caching strategy
108 enum TraversingDirection { Horizontal, Vertical };
109 TraversingDirection traversingDirection = Vertical;
110 if (m_kw > m_kh) {
111 traversingDirection = Horizontal;
112 }
113
114 KisMathToolbox mathToolbox;
117 return;
118
121 return;
122
123 m_kernelFactor = kernel->factor() ? 1.0 / kernel->factor() : 1;
124 m_maxClamp = new qreal[m_convChannelList.count()];
125 m_minClamp = new qreal[m_convChannelList.count()];
126 m_absoluteOffset = new qreal[m_convChannelList.count()];
127 for (quint16 i = 0; i < m_convChannelList.count(); ++i) {
128 m_minClamp[i] = mathToolbox.minChannelValue(m_convChannelList[i]);
129 m_maxClamp[i] = mathToolbox.maxChannelValue(m_convChannelList[i]);
130 m_absoluteOffset[i] = (m_maxClamp[i] - m_minClamp[i]) * kernel->offset();
131 }
132
133 qint32 row = srcPos.y();
134 qint32 col = srcPos.x();
135
136 // populate pixelPtrCacheCopy for starting position (0, 0)
137 qint32 i = 0;
138 typename _IteratorFactory_::HLineConstIterator hitInitSrc = _IteratorFactory_::createHLineConstIterator(src, col - m_khalfWidth, row - m_khalfHeight, m_kw, dataRect);
139
140 for (quint32 krow = 0; krow < m_kh; ++krow) {
141 do {
142 const quint8* data = hitInitSrc->oldRawData();
144 ++i;
145 } while (hitInitSrc->nextPixel());
146 hitInitSrc->nextRow();
147 }
148
149
150 if (traversingDirection == Horizontal) {
151 if(hasProgressUpdater) {
152 this->m_progress->setRange(0, areaSize.height());
153 }
154 typename _IteratorFactory_::HLineIterator hitDst = _IteratorFactory_::createHLineIterator(this->m_painter->device(), dstPos.x(), dstPos.y(), areaSize.width(), dataRect);
155 typename _IteratorFactory_::HLineConstIterator hitSrc = _IteratorFactory_::createHLineConstIterator(src, srcPos.x(), srcPos.y(), areaSize.width(), dataRect);
156
157 typename _IteratorFactory_::HLineConstIterator khitSrc = _IteratorFactory_::createHLineConstIterator(src, col - m_khalfWidth, row + m_khalfHeight, m_kw, dataRect);
158 for (int prow = 0; prow < areaSize.height(); ++prow) {
159 // reload cache from copy
160 for (quint32 i = 0; i < m_cacheSize; ++i)
161 memcpy(m_pixelPtrCache[i], m_pixelPtrCacheCopy[i], channelCount * sizeof(qreal));
162
163 typename _IteratorFactory_::VLineConstIterator kitSrc = _IteratorFactory_::createVLineConstIterator(src, col + m_khalfWidth, row - m_khalfHeight, m_kh, dataRect);
164 for (int pcol = 0; pcol < areaSize.width(); ++pcol) {
165 // write original channel values
166 memcpy(hitDst->rawData(), hitSrc->oldRawData(), m_pixelSize);
167 convolveCache(hitDst->rawData());
168
169 ++col;
170 kitSrc->nextColumn();
171 hitDst->nextPixel();
172 hitSrc->nextPixel();
174 }
175
176 row++;
177 khitSrc->nextRow();
178 hitDst->nextRow();
179 hitSrc->nextRow();
180 col = srcPos.x();
181
183
184 if (hasProgressUpdater) {
185 this->m_progress->setValue(prow);
186
187 if (this->m_progress->interrupted()) {
188 cleanUp();
189 return;
190 }
191 }
192
193 }
194 } else /* if (traversingDirection == Vertical) */ {
195 if(hasProgressUpdater) {
196 this->m_progress->setRange(0, areaSize.width());
197 }
198 typename _IteratorFactory_::VLineIterator vitDst = _IteratorFactory_::createVLineIterator(this->m_painter->device(), dstPos.x(), dstPos.y(), areaSize.height(), dataRect);
199 typename _IteratorFactory_::VLineConstIterator vitSrc = _IteratorFactory_::createVLineConstIterator(src, srcPos.x(), srcPos.y(), areaSize.height(), dataRect);
200
201 typename _IteratorFactory_::VLineConstIterator kitSrc = _IteratorFactory_::createVLineConstIterator(src, col + m_khalfWidth, row - m_khalfHeight, m_kh, dataRect);
202 for (int pcol = 0; pcol < areaSize.width(); pcol++) {
203 // reload cache from copy
204 for (quint32 i = 0; i < m_cacheSize; ++i)
205 memcpy(m_pixelPtrCache[i], m_pixelPtrCacheCopy[i], channelCount * sizeof(qreal));
206
207 typename _IteratorFactory_::HLineConstIterator khitSrc = _IteratorFactory_::createHLineConstIterator(src, col - m_khalfWidth, row + m_khalfHeight, m_kw, dataRect);
208 for (int prow = 0; prow < areaSize.height(); prow++) {
209 // write original channel values
210 memcpy(vitDst->rawData(), vitSrc->oldRawData(), m_pixelSize);
211 convolveCache(vitDst->rawData());
212
213 ++row;
214 khitSrc->nextRow();
215 vitDst->nextPixel();
216 vitSrc->nextPixel();
218 }
219
220 ++col;
221 kitSrc->nextColumn();
222 vitDst->nextColumn();
223 vitSrc->nextColumn();
224 row = srcPos.y();
225
227
228 if (hasProgressUpdater) {
229 this->m_progress->setValue(pcol);
230
231 if (this->m_progress->interrupted()) {
232 cleanUp();
233 return;
234 }
235 }
236 }
237 }
238 cleanUp();
239 }
void loadPixelToCache(qreal **cache, const quint8 *data, int index)
void moveKernelRight(typename _IteratorFactory_::VLineConstIterator &kitSrc, qreal **pixelPtrCache)
void moveKernelDown(typename _IteratorFactory_::HLineConstIterator &kitSrc, qreal **pixelPtrCache)
QList< KoChannelInfo * > convolvableChannelList(const KisPaintDeviceSP src)
bool getToDoubleChannelPtr(QList< KoChannelInfo * > cis, QVector< PtrToDouble > &f)
bool getFromDoubleChannelPtr(QList< KoChannelInfo * > cis, QVector< PtrFromDouble > &f)
double minChannelValue(KoChannelInfo *)
double maxChannelValue(KoChannelInfo *)
KisSelectionSP selection
KisPaintDeviceSP device
@ ALPHA
The channel represents the opacity of a pixel.
bool interrupted() const
Definition KoUpdater.cpp:54
void setProgress(int percent)
Definition KoUpdater.cpp:38
void setValue(int value) override
Definition KoUpdater.cpp:64
void setRange(int minimum, int maximum) override
Definition KoUpdater.cpp:79
Eigen::Matrix< qreal, Eigen::Dynamic, Eigen::Dynamic > data
QRect selectedRect() const

References KoChannelInfo::ALPHA, KisConvolutionWorkerSpatial< _IteratorFactory_ >::cleanUp(), KisConvolutionWorker< _IteratorFactory_ >::convolvableChannelList(), KisConvolutionWorkerSpatial< _IteratorFactory_ >::convolveCache(), KisConvolutionKernel::data, KisPainter::device, KisConvolutionKernel::factor, KisMathToolbox::getFromDoubleChannelPtr(), KisMathToolbox::getToDoubleChannelPtr(), KisConvolutionKernel::height(), KoUpdater::interrupted(), KisConvolutionWorkerSpatial< _IteratorFactory_ >::loadPixelToCache(), KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_absoluteOffset, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_alphaCachePos, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_alphaRealPos, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_cacheSize, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_convChannelList, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_convolveChannelsNo, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_fromDoubleFuncPtr, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kernelData, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kernelFactor, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kh, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_khalfHeight, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_khalfWidth, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kw, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_maxClamp, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_minClamp, KisConvolutionWorker< _IteratorFactory_ >::m_painter, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_pixelPtrCache, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_pixelPtrCacheCopy, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_pixelSize, KisConvolutionWorker< _IteratorFactory_ >::m_progress, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_toDoubleFuncPtr, KisMathToolbox::maxChannelValue(), KisMathToolbox::minChannelValue(), KisConvolutionWorkerSpatial< _IteratorFactory_ >::moveKernelDown(), KisConvolutionWorkerSpatial< _IteratorFactory_ >::moveKernelRight(), KisConvolutionKernel::offset, KisSelection::selectedRect(), KisPainter::selection, KoUpdater::setProgress(), KoUpdater::setRange(), KoUpdater::setValue(), and KisConvolutionKernel::width().

◆ limitValue()

template<class _IteratorFactory_ >
void KisConvolutionWorkerSpatial< _IteratorFactory_ >::limitValue ( qreal * value,
qreal lowBound,
qreal highBound )
inline

Definition at line 241 of file kis_convolution_worker_spatial.h.

241 {
242 if (*value > highBound) {
243 *value = highBound;
244 } else if (!(*value >= lowBound)) { // value < lowBound or value == NaN
245 // IEEE compliant comparisons with NaN are always false
246 *value = lowBound;
247 }
248 }
float value(const T *src, size_t ch)

References value().

◆ loadPixelToCache()

template<class _IteratorFactory_ >
void KisConvolutionWorkerSpatial< _IteratorFactory_ >::loadPixelToCache ( qreal ** cache,
const quint8 * data,
int index )
inline

Definition at line 33 of file kis_convolution_worker_spatial.h.

33 {
34 // no alpha is rare case, so just multiply by 1.0 in that case
35 qreal alphaValue = m_alphaRealPos >= 0 ?
37
38 for (quint32 k = 0; k < m_convolveChannelsNo; ++k) {
39 if (k != (quint32)m_alphaCachePos) {
40 const quint32 channelPos = m_convChannelList[k]->pos();
41 cache[index][k] = m_toDoubleFuncPtr[k](data, channelPos) * alphaValue;
42 } else {
43 cache[index][k] = alphaValue;
44 }
45 }
46
47 }

References KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_alphaCachePos, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_alphaRealPos, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_convChannelList, KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_convolveChannelsNo, and KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_toDoubleFuncPtr.

◆ moveKernelDown()

template<class _IteratorFactory_ >
void KisConvolutionWorkerSpatial< _IteratorFactory_ >::moveKernelDown ( typename _IteratorFactory_::HLineConstIterator & kitSrc,
qreal ** pixelPtrCache )
inline

Definition at line 324 of file kis_convolution_worker_spatial.h.

324 {
325 quint8 **tmp = new quint8*[m_kw];
326 memcpy(tmp, pixelPtrCache, m_kw * sizeof(qreal *));
327 memmove(pixelPtrCache, pixelPtrCache + m_kw, (m_kw * m_kh - m_kw) * sizeof(quint8 *));
328 memcpy(pixelPtrCache + m_kw *(m_kh - 1), tmp, m_kw * sizeof(quint8 *));
329 delete[] tmp;
330
331 qint32 i = m_kw * (m_kh - 1);
332 do {
333 const quint8* data = kitSrc->oldRawData();
334 loadPixelToCache(pixelPtrCache, data, i);
335 i++;
336 } while (kitSrc->nextPixel());
337 }

References KisConvolutionWorkerSpatial< _IteratorFactory_ >::loadPixelToCache(), KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kh, and KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kw.

◆ moveKernelRight()

template<class _IteratorFactory_ >
void KisConvolutionWorkerSpatial< _IteratorFactory_ >::moveKernelRight ( typename _IteratorFactory_::VLineConstIterator & kitSrc,
qreal ** pixelPtrCache )
inline

Definition at line 306 of file kis_convolution_worker_spatial.h.

306 {
307 qreal** d = pixelPtrCache;
308
309 for (quint32 krow = 0; krow < m_kh; ++krow) {
310 qreal* first = *d;
311 memmove(d, d + 1, (m_kw - 1) * sizeof(qreal *));
312 *(d + m_kw - 1) = first;
313 d += m_kw;
314 }
315
316 qint32 i = m_kw - 1;
317 do {
318 const quint8* data = kitSrc->oldRawData();
319 loadPixelToCache(pixelPtrCache, data, i);
320 i += m_kw;
321 } while (kitSrc->nextPixel());
322 }

References KisConvolutionWorkerSpatial< _IteratorFactory_ >::loadPixelToCache(), KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kh, and KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kw.

Member Data Documentation

◆ m_absoluteOffset

template<class _IteratorFactory_ >
qreal * KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_absoluteOffset
private

Definition at line 365 of file kis_convolution_worker_spatial.h.

◆ m_alphaCachePos

template<class _IteratorFactory_ >
int KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_alphaCachePos
private

Definition at line 360 of file kis_convolution_worker_spatial.h.

◆ m_alphaRealPos

template<class _IteratorFactory_ >
int KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_alphaRealPos
private

Definition at line 361 of file kis_convolution_worker_spatial.h.

◆ m_cacheSize

template<class _IteratorFactory_ >
quint32 KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_cacheSize
private

Definition at line 358 of file kis_convolution_worker_spatial.h.

◆ m_convChannelList

template<class _IteratorFactory_ >
QList<KoChannelInfo *> KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_convChannelList
private

Definition at line 368 of file kis_convolution_worker_spatial.h.

◆ m_convolveChannelsNo

template<class _IteratorFactory_ >
quint32 KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_convolveChannelsNo
private

Definition at line 357 of file kis_convolution_worker_spatial.h.

◆ m_fromDoubleFuncPtr

template<class _IteratorFactory_ >
QVector<PtrFromDouble> KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_fromDoubleFuncPtr
private

Definition at line 370 of file kis_convolution_worker_spatial.h.

◆ m_kernelData

template<class _IteratorFactory_ >
qreal* KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kernelData
private

Definition at line 363 of file kis_convolution_worker_spatial.h.

◆ m_kernelFactor

template<class _IteratorFactory_ >
qreal KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kernelFactor
private

Definition at line 367 of file kis_convolution_worker_spatial.h.

◆ m_kh

template<class _IteratorFactory_ >
quint32 KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kh
private

Definition at line 355 of file kis_convolution_worker_spatial.h.

◆ m_khalfHeight

template<class _IteratorFactory_ >
quint32 KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_khalfHeight
private

Definition at line 356 of file kis_convolution_worker_spatial.h.

◆ m_khalfWidth

template<class _IteratorFactory_ >
quint32 KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_khalfWidth
private

Definition at line 356 of file kis_convolution_worker_spatial.h.

◆ m_kw

template<class _IteratorFactory_ >
quint32 KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_kw
private

Definition at line 355 of file kis_convolution_worker_spatial.h.

◆ m_maxClamp

template<class _IteratorFactory_ >
qreal * KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_maxClamp
private

Definition at line 365 of file kis_convolution_worker_spatial.h.

◆ m_minClamp

template<class _IteratorFactory_ >
qreal* KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_minClamp
private

Definition at line 365 of file kis_convolution_worker_spatial.h.

◆ m_pixelPtrCache

template<class _IteratorFactory_ >
qreal** KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_pixelPtrCache
private

Definition at line 364 of file kis_convolution_worker_spatial.h.

◆ m_pixelPtrCacheCopy

template<class _IteratorFactory_ >
qreal ** KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_pixelPtrCacheCopy
private

Definition at line 364 of file kis_convolution_worker_spatial.h.

◆ m_pixelSize

template<class _IteratorFactory_ >
quint32 KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_pixelSize
private

Definition at line 358 of file kis_convolution_worker_spatial.h.

◆ m_toDoubleFuncPtr

template<class _IteratorFactory_ >
QVector<PtrToDouble> KisConvolutionWorkerSpatial< _IteratorFactory_ >::m_toDoubleFuncPtr
private

Definition at line 369 of file kis_convolution_worker_spatial.h.


The documentation for this class was generated from the following file: