13 flags_.can_be_constant =
true;
18 const float angle = data_->angle;
19 const float zoom = data_->zoom;
20 const float spin = data_->spin;
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));
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);
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;
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
void read_elem_bilinear(float x, float y, float *out) const
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
static blender::bke::bNodeSocketTemplate inputs[]
float distance(float a, float b)