52 const rcti &output_area,
60 r_input_area = output_area;
78 const rcti &input_rect =
input->get_rect();
81 int min_input_coord = -1;
82 int max_input_coord = -1;
84 std::function<int()> get_current_coord;
87 min_input_coord = input_rect.
xmin;
88 max_input_coord = input_rect.
xmax;
89 get_current_coord = [&] {
return it.x; };
90 elem_stride =
input->elem_stride;
93 min_input_coord = input_rect.
ymin;
94 max_input_coord = input_rect.
ymax;
95 get_current_coord = [&] {
return it.y; };
96 elem_stride =
input->row_stride;
100 for (; !it.is_end(); ++it) {
101 const int coord = get_current_coord();
107 float alpha_accum = 0.0f;
108 float multiplier_accum = 0.0f;
113 float value_max =
finv_test(*it.in(0), do_invert);
114 float distfacinv_max = 1.0f;
117 const float *in = it.in(0) + ((
intptr_t)coord_min - coord) * elem_stride;
118 const int in_stride = elem_stride * step;
120 const int index_end = index + (coord_max - coord_min);
121 for (; index < index_end; in += in_stride, index += step) {
126 alpha_accum += value * multiplier;
127 multiplier_accum += multiplier;
130 if (value > value_max) {
133 if (value > value_max) {
135 distfacinv_max = multiplier;
141 const float value_blur = alpha_accum / multiplier_accum;
142 const float value_final = (value_max * distfacinv_max) +
143 (value_blur * (1.0f - distfacinv_max));
144 *it.out =
finv_test(value_final, do_invert);
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE float min_ff(float a, float b)
MINLINE int max_ii(int a, int b)
#define MAX_GAUSSTAB_RADIUS
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a producing a negative Combine Generate a color from its and blue Hue Saturation Value
float * make_gausstab(float rad, int size)
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.
virtual void init_data() override
void deinit_execution() override
void init_execution() override
float * make_dist_fac_inverse(float rad, int size, int falloff)
static constexpr int IMAGE_INPUT_INDEX
BLI_INLINE float finv_test(const float f, const bool test)
virtual void init_execution() override
void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) final
Get input operation area being read by this operation on rendering given output area.
GaussianAlphaBlurBaseOperation(eDimension dim)
virtual void init_data() override
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) final
virtual void deinit_execution() override
a MemoryBuffer contains access to the data of a chunk
eExecutionModel execution_model_
DataType
possible data types for sockets
ccl_global KernelShaderEvalInput ccl_global float * output
ccl_global KernelShaderEvalInput * input
void(* MEM_freeN)(void *vmemh)
ccl_device_inline float3 ceil(const float3 &a)
static void area(int d1, int d2, int e1, int e2, float weights[2])
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator
static bNodeSocketTemplate inputs[]