45 const T *
in(
int input_index)
const
48 return ins_[input_index].in;
61 return out >= out_end_;
69 out += out_elem_stride_;
71 in.in +=
in.elem_stride;
105 const rcti &buffer_area,
106 const rcti &iterated_area,
108 : area_(iterated_area), is_built_(false)
111 iterator_.x = iterated_area.
xmin;
112 iterator_.y = iterated_area.
ymin;
113 iterator_.x_start_ = iterated_area.
xmin;
114 iterator_.x_end_ = iterated_area.
xmax;
116 iterator_.out_elem_stride_ = elem_stride;
118 intptr_t out_row_stride = buffer_width * elem_stride;
119 iterator_.out_rows_gap_ = out_row_stride -
BLI_rcti_size_x(&iterated_area) * elem_stride;
120 const int out_start_x = iterated_area.
xmin - buffer_area.
xmin;
121 const int out_start_y = iterated_area.
ymin - buffer_area.
ymin;
123 (
intptr_t)out_start_x * elem_stride;
124 const T *out_row_end_ = iterator_.out +
126 iterator_.out_end_ = out_row_end_ +
135 {0, buffer_width, 0, buffer_height},
136 {0, buffer_width, 0, buffer_height},
148 typename Iterator::In in;
149 in.elem_stride = elem_stride;
151 in.rows_gap = buffer_width * elem_stride -
BLI_rcti_size_x(&area_) * elem_stride;
152 const int in_start_x = area_.
xmin - buffer_area.
xmin;
153 const int in_start_y = area_.
ymin - buffer_area.
ymin;
154 in.in =
input + in_start_y * buffer_width * elem_stride + in_start_x * elem_stride;
155 iterator_.ins_.append(std::move(in));
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
void BLI_rcti_init(struct rcti *rect, int xmin, int xmax, int ymin, int ymax)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
bool BLI_rcti_inside_rcti(const rcti *rct_a, const rcti *rct_b)
int get_num_inputs() const
const T * in(int input_index) const
BuffersIteratorBuilder(T *output, const rcti &buffer_area, const rcti &iterated_area, int elem_stride=1)
void add_input(const T *input, const rcti &buffer_area, int elem_stride=1)
BuffersIteratorBuilder(T *output, int buffer_width, int buffer_height, int elem_stride=1)
void add_input(const T *input, int buffer_width, int elem_stride=1)
BuffersIteratorBuilder::Iterator build()
ccl_global KernelShaderEvalInput ccl_global float * output
ccl_global KernelShaderEvalInput * input
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator