20 canvas_input_index_ = 0;
46 is_hash_output_params_implemented_ =
true;
48 if (!is_hash_output_params_implemented_) {
53 if (outputs_.size() > 0) {
58 hash.params_hash_ = params_hash_;
60 hash.parents_hash_ = 0;
62 if (!socket.is_connected()) {
81 hash.type_hash_ =
typeid(*this).hash_code();
82 hash.operation_ =
this;
89 return &outputs_[index];
94 return &inputs_[index];
109 uint used_canvas_index = 0;
113 const bool determined = input.determine_canvas(preferred_area, any_area);
118 used_canvas_index += 1;
121 else if (canvas_input_index_ < inputs_.size()) {
123 input.determine_canvas(preferred_area, r_area);
124 used_canvas_index = canvas_input_index_;
127 if (modify_determined_canvas_fn_) {
128 modify_determined_canvas_fn_(r_area);
132 const rcti &local_preferred_area = r_area;
133 for (
uint index = 0; index < inputs_.size(); index++) {
134 if (index == used_canvas_index) {
138 if (input.is_connected()) {
139 input.determine_canvas(local_preferred_area, unused_area);
146 this->canvas_input_index_ = index;
188 if (input && input->is_connected()) {
189 return &input->get_link()->get_operation();
200 const rcti &output_area,
203 r_input_area = output_area;
207 const rcti &output_area,
223 render_full_frame(output_buf, areas, inputs_bufs);
226void NodeOperation::render_full_frame(
MemoryBuffer *output_buf,
231 for (
const rcti &area : areas) {
246 : operation_(op), datatype_(datatype), resize_mode_(resize_mode), link_(nullptr)
273 : operation_(op), datatype_(datatype)
294 os <<
"render_border,";
297 os <<
"view_border,";
312 os <<
"no_conversion,";
315 os <<
"contant_operation,";
318 os <<
"can_be_constant,";
327 os <<
"NodeOperation(";
328 os <<
"id=" << node_operation.
get_id();
329 if (!node_operation.
get_name().empty()) {
330 os <<
",name=" << node_operation.
get_name();
332 os <<
",flags={" << flags <<
"}";
#define BLI_assert_msg(a, msg)
bool BLI_rcti_is_empty(const struct rcti *rect)
a MemoryBuffer contains access to the data
NodeOperation & get_operation() const
NodeOperationOutput(NodeOperation *op, DataType datatype)
void determine_canvas(const rcti &preferred_area, rcti &r_area)
NodeOperation contains calculation logic.
static void combine_hashes(size_t &combined, size_t other)
virtual void init_execution()
void set_canvas(const rcti &canvas_area)
void add_output_socket(DataType datatype)
const NodeOperationFlags get_flags() const
SocketReader * get_input_socket_reader(unsigned int index)
virtual void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area)
Get input operation area being read by this operation on rendering given output area.
std::optional< NodeOperationHash > generate_hash()
float get_constant_value_default(float default_value)
unsigned int get_number_of_input_sockets() const
NodeOperationFlags flags_
NodeOperationOutput * get_output_socket(unsigned int index=0)
const rcti & get_canvas() const
NodeOperation * get_input_operation(int index)
const float * get_constant_elem_default(const float *default_elem)
virtual void deinit_execution()
NodeOperationInput * get_input_socket(unsigned int index)
virtual void hash_output_params()
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
virtual void update_memory_buffer(MemoryBuffer *, const rcti &, Span< MemoryBuffer * >)
const std::string get_name() const
void set_canvas_input_index(unsigned int index)
set the index of the input socket that will determine the canvas of this operation
void hash_params(T1 param1, T2 param2)
void render(MemoryBuffer *output_buf, Span< rcti > areas, Span< MemoryBuffer * > inputs_bufs)
virtual void determine_canvas(const rcti &preferred_area, rcti &r_area)
DataType
possible data types for sockets
ResizeMode
Resize modes of inputsockets How are the input and working resolutions matched.
static constexpr unsigned int RESOLUTION_INPUT_ANY
constexpr int COM_data_type_num_channels(const DataType datatype)
constexpr rcti COM_AREA_NONE
std::ostream & operator<<(std::ostream &os, const eCompositorPriority &priority)
uint64_t get_default_hash(const T &v)
bool use_datatype_conversion
bool is_preview_operation
bool is_constant_operation