22 extend_bounds_ =
false;
54 float *gausstab,
sum, val;
59 gausstab = (
float *)
MEM_mallocN(
sizeof(
float) * n, __func__);
62 float fac = (rad > 0.0f ? 1.0f / rad : 0.0f);
63 for (i = -size; i <=
size; i++) {
66 gausstab[i +
size] = val;
70 for (i = 0; i < n; i++) {
78__m128 *BlurBaseOperation::convert_gausstab_sse(
const float *gausstab,
int size)
81 __m128 *gausstab_sse = (__m128 *)
MEM_mallocN_aligned(
sizeof(__m128) * n, 16,
"gausstab sse");
82 for (
int i = 0; i < n; i++) {
83 gausstab_sse[i] = _mm_set1_ps(gausstab[i]);
91 float *dist_fac_invert, val;
96 dist_fac_invert = (
float *)
MEM_mallocN(
sizeof(
float) * n, __func__);
98 float fac = (rad > 0.0f ? 1.0f / rad : 0.0f);
99 for (i = -size; i <=
size; i++) {
100 val = 1.0f -
fabsf(
float(i) * fac);
106 val = (3.0f * val * val - 2.0f * val * val * val);
109 val =
sqrtf(2.0f * val - val * val);
118 val = val * (2.0f - val);
133 dist_fac_invert[i +
size] = val;
136 return dist_fac_invert;
170 if (!extend_bounds_) {
187 const rcti &output_area,
192 r_input_area = output_area;
MINLINE int round_fl_to_int(float a)
MINLINE float round_to_even(float f)
@ CMP_NODE_BLUR_ASPECT_NONE
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static T sum(const btAlignedObjectArray< T > &items)
void set_data(const NodeBlurData *data)
float * make_gausstab(float rad, int size)
void determine_canvas(const rcti &preferred_area, rcti &r_area) override
int get_blur_size(eDimension dim) const
virtual 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.
static constexpr int SIZE_INPUT_INDEX
virtual void init_data() override
BlurBaseOperation(DataType data_type8)
float * make_dist_fac_inverse(float rad, int size, int falloff)
NodeOperation contains calculation logic.
unsigned int get_height() const
void add_output_socket(DataType datatype)
const NodeOperationFlags get_flags() const
unsigned int get_width() const
NodeOperationFlags flags_
NodeOperation * get_input_operation(int index)
void set_determined_canvas_modifier(std::function< void(rcti &canvas)> fn)
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
virtual void determine_canvas(const rcti &preferred_area, rcti &r_area)
DataType
possible data types for sockets
float RE_filter_value(int type, float x)
void * MEM_mallocN_aligned(size_t len, size_t alignment, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
constexpr rcti COM_CONSTANT_INPUT_AREA_OF_INTEREST
bool is_constant_operation