34 this->m_inputProgram =
nullptr;
42 const float zoom = this->m_data->
zoom;
43 const float spin = this->m_data->
spin;
44 const float iterations = this->m_data->
iter;
46 const float center_x = this->m_data->
center_x;
47 const float center_y = this->m_data->
center_y;
52 const float itsc = 1.0f /
powf(2.0f, (
float)iterations);
56 this->m_center_x_pix = center_x *
width;
57 this->m_center_y_pix = center_y *
height;
59 this->m_tx = itsc *
D *
cosf(
a);
60 this->m_ty = -itsc *
D *
sinf(
a);
61 this->m_sc = itsc * zoom;
62 this->m_rot = itsc *
spin;
67 const int iterations =
pow(2.0f, this->m_data->
iter);
68 float col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
69 float col2[4] = {0.0f, 0.0f, 0.0f, 0.0f};
71 float ltx = this->m_tx;
72 float lty = this->m_ty;
73 float lsc = this->m_sc;
74 float lrot = this->m_rot;
76 for (
int i = 0; i < iterations; i++) {
77 const float cs =
cosf(lrot), ss =
sinf(lrot);
78 const float isc = 1.0f / (1.0f + lsc);
80 const float v = isc * (
y - this->m_center_y_pix) + lty;
81 const float u = isc * (
x - this->m_center_x_pix) + ltx;
84 cs * u + ss *
v + this->m_center_x_pix,
85 cs *
v - ss * u + this->m_center_y_pix,
102 cl_mem clOutputBuffer,
104 std::list<cl_mem> *clMemToCleanUp,
105 std::list<cl_kernel> * )
107 cl_kernel directionalBlurKernel = device->
COM_clCreateKernel(
"directionalBlurKernel",
nullptr);
109 cl_int iterations =
pow(2.0f, this->m_data->
iter);
110 cl_float2 ltxy = {{this->m_tx, this->m_ty}};
111 cl_float2 centerpix = {{this->m_center_x_pix, this->m_center_y_pix}};
112 cl_float lsc = this->m_sc;
113 cl_float lrot = this->m_rot;
116 directionalBlurKernel, 0, -1, clMemToCleanUp, inputMemoryBuffers, this->m_inputProgram);
118 directionalBlurKernel, 1, clOutputBuffer);
120 directionalBlurKernel, 2, outputMemoryBuffer);
121 clSetKernelArg(directionalBlurKernel, 3,
sizeof(cl_int), &iterations);
122 clSetKernelArg(directionalBlurKernel, 4,
sizeof(cl_float), &lsc);
123 clSetKernelArg(directionalBlurKernel, 5,
sizeof(cl_float), &lrot);
124 clSetKernelArg(directionalBlurKernel, 6,
sizeof(cl_float2), <xy);
125 clSetKernelArg(directionalBlurKernel, 7,
sizeof(cl_float2), ¢erpix);
132 this->m_inputProgram =
nullptr;
MINLINE void mul_v4_v4fl(float r[3], const float a[4], float f)
MINLINE void add_v4_v4(float r[4], const float a[4])
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
DirectionalBlurOperation()
void initExecution() override
void executePixel(float output[4], int x, int y, void *data) override
bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output) override
void deinitExecution() override
void executeOpenCL(OpenCLDevice *device, MemoryBuffer *outputMemoryBuffer, cl_mem clOutputBuffer, MemoryBuffer **inputMemoryBuffers, std::list< cl_mem > *clMemToCleanUp, std::list< cl_kernel > *clKernelsToCleanUp) override
custom handle to add new tasks to the OpenCL command queue in order to execute a chunk on an GPUDevic...
a MemoryBuffer contains access to the data of a chunk
void readSampled(float result[4], float x, float y, PixelSampler sampler)
unsigned int getHeight() const
void addInputSocket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
void addOutputSocket(DataType datatype)
unsigned int getWidth() const
SocketReader * getInputSocketReader(unsigned int inputSocketindex)
virtual bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
device representing an GPU OpenCL device. an instance of this class represents a single cl_device
void COM_clAttachMemoryBufferOffsetToKernelParameter(cl_kernel kernel, int offsetIndex, MemoryBuffer *memoryBuffers)
cl_mem COM_clAttachMemoryBufferToKernelParameter(cl_kernel kernel, int parameterIndex, int offsetIndex, std::list< cl_mem > *cleanup, MemoryBuffer **inputMemoryBuffers, SocketReader *reader)
void COM_clEnqueueRange(cl_kernel kernel, MemoryBuffer *outputMemoryBuffer)
void COM_clAttachOutputMemoryBufferToKernelParameter(cl_kernel kernel, int parameterIndex, cl_mem clOutputMemoryBuffer)
cl_kernel COM_clCreateKernel(const char *kernelname, std::list< cl_kernel > *clKernelsToCleanUp)
void initExecution(QualityHelper helper)
INLINE Rall1d< T, V, S > pow(const Rall1d< T, V, S > &arg, double m)
ccl_device_inline float distance(const float2 &a, const float2 &b)