Blender V4.3
COM_SplitOperation.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
6
7namespace blender::compositor {
8
17
18void SplitOperation::determine_canvas(const rcti &preferred_area, rcti &r_area)
19{
20 rcti unused_area = COM_AREA_NONE;
21
22 const bool determined = this->get_input_socket(0)->determine_canvas(COM_AREA_NONE, unused_area);
23 this->set_canvas_input_index(determined ? 0 : 1);
24
25 NodeOperation::determine_canvas(preferred_area, r_area);
26}
27
29 const rcti &area,
31{
32 const int percent = x_split_ ? split_percentage_ * this->get_width() / 100.0f :
33 split_percentage_ * this->get_height() / 100.0f;
34 const size_t elem_bytes = COM_data_type_bytes_len(get_output_socket()->get_data_type());
35 for (BuffersIterator<float> it = output->iterate_with(inputs, area); !it.is_end(); ++it) {
36 const bool is_image1 = x_split_ ? it.x >= percent : it.y >= percent;
37 memcpy(it.out, it.in(is_image1 ? 0 : 1), elem_bytes);
38 }
39}
40
41} // namespace blender::compositor
a MemoryBuffer contains access to the data
bool determine_canvas(const rcti &preferred_area, rcti &r_area)
void add_output_socket(DataType datatype)
NodeOperationOutput * get_output_socket(unsigned int index=0)
NodeOperationInput * get_input_socket(unsigned int index)
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
void set_canvas_input_index(unsigned int index)
set the index of the input socket that will determine the canvas of this operation
virtual void determine_canvas(const rcti &preferred_area, rcti &r_area)
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
void determine_canvas(const rcti &preferred_area, rcti &r_area) override
constexpr int COM_data_type_bytes_len(DataType data_type)
Definition COM_defines.h:50
constexpr rcti COM_AREA_NONE
Definition COM_defines.h:89
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator