75 const rcti &input_rect = input->get_rect();
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; };
87 elem_stride = input->elem_stride;
90 min_input_coord = input_rect.
ymin;
91 max_input_coord = input_rect.
ymax;
92 get_current_coord = [&] {
return it.y; };
93 elem_stride = input->row_stride;
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);
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