26 #include <OpenCLFramework/Filter/clfFilter.hh>
27 #include <Base/Common/BIASpragma.hh>
33 template <
class InputStorageType,
class OutputStorageType>
40 filterMask_ = context_->CreateBuffer();
41 program_ = context_->CreateProgram();
42 program_->AddSource(
"/OpenCLFramework/Filter/cl/filteroperation.cl");
44 programName_ =
"Convolve";
45 program_->AddKernel(programName_);
46 program_->AddKernel(
"Clear");
49 template <
class InputStorageType,
class OutputStorageType>
57 template <
class InputStorageType,
class OutputStorageType>
62 filterMask_->Allocate( winSize_*winSize_ *
sizeof(
float),
true,
false );
63 filterMask_->WriteToBuffer( (
float*)mask );
71 template <
class InputStorageType,
class OutputStorageType>
76 filterMask_->Allocate( winSize_ *
sizeof(
float),
true,
false );
77 filterMask_->WriteToBuffer( (
float*)mask );
85 template <
class InputStorageType,
class OutputStorageType>
90 float *mask =
new float[winSize_*winSize_];
91 for (
unsigned int i=0;i<winSize_*winSize_;i++)
92 mask[i] = 1.0f /
float(winSize_*winSize_);
93 SetFilter_(winSize_, mask);
98 template <
class InputStorageType,
class OutputStorageType>
103 ret = Filter_(programName_, src, dst);
111 template <
class InputStorageType,
class OutputStorageType>
115 program_->KernelSetArgument(
"Clear", 0, color );
116 program_->KernelSetArgument(
"Clear", 1, *image );
119 unsigned int localX = 16;
120 unsigned int localY = 16;
121 if (w%16) localX = 1;
122 if (h%16) localY = 1;
123 context_->RunOn2DRange( *program_,
"Clear", w,h, localX,localY);
132 template <
class InputStorageType,
class OutputStorageType>
137 tmpImage_->AllocateFromTemplate( *src,
false,
false);
138 ret = Filter_(nameX, src, tmpImage_);
139 ret += Filter_(nameY, tmpImage_, dst);
147 template <
class InputStorageType,
class OutputStorageType>
151 program_->KernelSetArgument(
"Clear", 0, 0 );
152 program_->KernelSetArgument(
"Clear", 1, *dst );
155 context_->RunOn2DRange( *program_,
"Clear", w,h, 16,16);
156 program_->KernelSetArgument( name, 0, *src );
157 program_->KernelSetArgument( name, 1, *filterMask_ );
158 program_->KernelSetArgument( name, 2, (
int)winSize_ );
159 program_->KernelSetArgument( name, 3, *dst );
160 context_->RunOn2DRange( *program_, name, w, h, 16, 16);
void GetImageDim(unsigned int &width, unsigned int &height) const
const std::string & GetDetailedString() const
detailed combination of all info available
clf Exception wrapper, is thrown in case of most clf errors
clfImage2D * CreateImage2D()
create buffer object