18 const float angle = data_->
angle;
19 const float zoom = data_->
zoom;
21 const float iterations = data_->
iter;
22 const float distance = data_->
distance;
23 const float center_x = data_->
center_x;
24 const float center_y = data_->
center_y;
28 const float a =
angle;
29 const float itsc = 1.0f /
powf(2.0f,
float(iterations));
32 D = distance *
sqrtf(width * width + height * height);
33 center_x_pix_ = center_x * width;
34 center_y_pix_ = center_y * height;
36 tx_ = itsc * D *
cosf(a);
37 ty_ = -itsc * D *
sinf(a);
56 const int iterations =
pow(2.0f, data_->
iter);
61 input->read_elem_bilinear(x, y, color_accum);
70 for (
int i = 0; i < iterations; i++) {
71 const float cs =
cosf(lrot), ss =
sinf(lrot);
72 const float isc = 1.0f / (1.0f + lsc);
74 const float v = isc * (y + 0.5f - center_y_pix_) + lty;
75 const float u = isc * (x + 0.5f - center_x_pix_) + ltx;
78 input->read_elem_bilinear(
79 cs * u + ss *
v + center_x_pix_ - 0.5f, cs *
v - ss * u + center_y_pix_ - 0.5f, color);
89 mul_v4_v4fl(it.out, color_accum, 1.0f / (iterations + 1));
MINLINE void add_v4_v4(float r[4], const float a[4])
MINLINE void mul_v4_v4fl(float r[4], const float a[4], float f)
#define UNUSED_VARS_NDEBUG(...)
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
ATTR_WARN_UNUSED_RESULT const BMVert * v
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
DirectionalBlurOperation()
void init_execution() override
void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override
Get input operation area being read by this operation on rendering given output area.
a MemoryBuffer contains access to the data
unsigned int get_height() const
void add_output_socket(DataType datatype)
unsigned int get_width() const
NodeOperationFlags flags_
const rcti & get_canvas() const
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
pow(value.r - subtrahend, 2.0)") .do_static_compilation(true)
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator