49 const rcti &output_area,
57 r_input_area = output_area;
78 int min_input_coord = -1;
79 int max_input_coord = -1;
81 std::function<
int()> get_current_coord;
84 min_input_coord = input_rect.
xmin;
85 max_input_coord = input_rect.
xmax;
86 get_current_coord = [&] {
return it.x; };
90 min_input_coord = input_rect.
ymin;
91 max_input_coord = input_rect.
ymax;
92 get_current_coord = [&] {
return it.y; };
97 for (; !it.is_end(); ++it) {
98 const int coord = get_current_coord();
104 float alpha_accum = 0.0f;
105 float multiplier_accum = 0.0f;
110 float value_max =
finv_test(*it.in(0), do_invert);
111 float distfacinv_max = 1.0f;
113 const float *in = it.in(0) + (
intptr_t(coord_min) - coord) * elem_stride;
114 const int in_stride = elem_stride;
116 const int index_end = index + (coord_max - coord_min);
117 for (; index < index_end; in += in_stride, ++index) {
122 alpha_accum += value * multiplier;
123 multiplier_accum += multiplier;
126 if (value > value_max) {
129 if (value > value_max) {
131 distfacinv_max = multiplier;
137 const float value_blur = alpha_accum / multiplier_accum;
138 const float value_final = (value_max * distfacinv_max) +
139 (value_blur * (1.0f - distfacinv_max));
140 *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
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
BlurBaseOperation(DataType data_type8)
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
const rcti & get_rect() const
get the rect of this MemoryBuffer
virtual void init_execution()
virtual void deinit_execution()
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
DataType
possible data types for sockets
void MEM_freeN(void *vmemh)
ccl_device_inline float3 ceil(const float3 a)
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator
static blender::bke::bNodeSocketTemplate inputs[]