22 extend_bounds_ =
false;
64 float *gausstab,
sum, val;
69 gausstab = (
float *)
MEM_mallocN(
sizeof(
float) * n, __func__);
72 float fac = (rad > 0.0f ? 1.0f / rad : 0.0f);
76 gausstab[i +
size] = val;
80 for (i = 0; i < n; i++) {
88 __m128 *BlurBaseOperation::convert_gausstab_sse(
const float *gausstab,
int size)
91 __m128 *gausstab_sse = (__m128 *)
MEM_mallocN_aligned(
sizeof(__m128) * n, 16,
"gausstab sse");
92 for (
int i = 0; i < n; i++) {
93 gausstab_sse[i] = _mm_set1_ps(gausstab[i]);
101 float *dist_fac_invert, val;
106 dist_fac_invert = (
float *)
MEM_mallocN(
sizeof(
float) * n, __func__);
108 float fac = (rad > 0.0f ? 1.0f / rad : 0.0f);
110 val = 1.0f -
fabsf((
float)i * fac);
116 val = (3.0f * val * val - 2.0f * val * val * val);
119 val =
sqrtf(2.0f * val - val * val);
128 val = val * (2.0f - val);
143 dist_fac_invert[i +
size] = val;
146 return dist_fac_invert;
197 if (!extend_bounds_) {
225 const rcti &output_area,
230 r_input_area = output_area;
MINLINE int round_fl_to_int(float a)
MINLINE float round_to_even(float f)
#define CMP_NODE_BLUR_ASPECT_X
#define CMP_NODE_BLUR_ASPECT_Y
#define CMP_NODE_BLUR_ASPECT_NONE
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static T sum(const btAlignedObjectArray< T > &items)
SocketReader * input_program_
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
void deinit_execution() override
BlurBaseOperation(DataType data_type8)
SocketReader * input_size_
void init_execution() override
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
SocketReader * get_input_socket_reader(unsigned int index)
unsigned int get_width() const
eExecutionModel execution_model_
NodeOperationFlags flags_
NodeOperation * get_input_operation(int index)
void read_sampled(float result[4], float x, float y, PixelSampler sampler)
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)
void init_execution(QualityHelper helper)
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