Blender V4.3
COM_NodeConverter.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2013 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "BLI_utildefines.h"
6
7#include "COM_Node.h"
13
14#include "COM_NodeConverter.h" /* own include */
15
16namespace blender::compositor {
17
18NodeConverter::NodeConverter(NodeOperationBuilder *builder) : builder_(builder) {}
19
21{
22 builder_->add_operation(operation);
23}
24
26{
27 builder_->map_input_socket(node_socket, operation_socket);
28}
29
31 NodeOperationOutput *operation_socket)
32{
33 builder_->map_output_socket(node_socket, operation_socket);
34}
35
37{
38 builder_->add_link(from, to);
39}
40
42{
43 builder_->add_preview(output);
44}
45
50
52{
53 /* this is a really bad situation - bring on the pink! - so artists know this is bad */
54 const float warning_color[4] = {1.0f, 0.0f, 1.0f, 1.0f};
55
56 SetColorOperation *operation = new SetColorOperation();
57 operation->set_channels(warning_color);
58
59 builder_->add_operation(operation);
60 builder_->map_output_socket(output, operation->get_output_socket());
61
62 return operation;
63}
64
66{
67 SocketProxyOperation *proxy = new SocketProxyOperation(input->get_data_type(), use_conversion);
68 builder_->add_operation(proxy);
69
70 builder_->map_input_socket(input, proxy->get_input_socket(0));
71
72 return proxy->get_output_socket();
73}
74
76{
77 SocketProxyOperation *proxy = new SocketProxyOperation(output->get_data_type(), use_conversion);
78 builder_->add_operation(proxy);
79
80 builder_->map_output_socket(output, proxy->get_output_socket());
81
82 return proxy->get_input_socket(0);
83}
84
86{
87 SetValueOperation *operation = new SetValueOperation();
88 operation->set_value(value);
89
90 builder_->add_operation(operation);
91 builder_->add_link(operation->get_output_socket(), input);
92}
93
94void NodeConverter::add_input_color(NodeOperationInput *input, const float value[4])
95{
96 SetColorOperation *operation = new SetColorOperation();
97 operation->set_channels(value);
98
99 builder_->add_operation(operation);
100 builder_->add_link(operation->get_output_socket(), input);
101}
102
103void NodeConverter::add_input_vector(NodeOperationInput *input, const float value[3])
104{
105 SetVectorOperation *operation = new SetVectorOperation();
106 operation->set_vector(value);
107
108 builder_->add_operation(operation);
109 builder_->add_link(operation->get_output_socket(), input);
110}
111
113{
114 SetValueOperation *operation = new SetValueOperation();
115 operation->set_value(value);
116
117 builder_->add_operation(operation);
118 builder_->map_output_socket(output, operation->get_output_socket());
119}
120
121void NodeConverter::add_output_color(NodeOutput *output, const float value[4])
122{
123 SetColorOperation *operation = new SetColorOperation();
124 operation->set_channels(value);
125
126 builder_->add_operation(operation);
127 builder_->map_output_socket(output, operation->get_output_socket());
128}
129
130void NodeConverter::add_output_vector(NodeOutput *output, const float value[3])
131{
132 SetVectorOperation *operation = new SetVectorOperation();
133 operation->set_vector(value);
134
135 builder_->add_operation(operation);
136 builder_->map_output_socket(output, operation->get_output_socket());
137}
138
140{
141 builder_->register_viewer(viewer);
142}
143
145{
146 return builder_->active_viewer();
147}
148
149} // namespace blender::compositor
void add_link(NodeOperationOutput *from, NodeOperationInput *to)
void map_output_socket(NodeOutput *node_socket, NodeOperationOutput *operation_socket)
void add_input_color(NodeOperationInput *input, const float value[4])
NodeOperationOutput * add_input_proxy(NodeInput *input, bool use_conversion)
void add_preview(NodeOperationOutput *output)
void register_viewer(ViewerOperation *viewer)
NodeConverter(NodeOperationBuilder *builder)
void add_node_input_preview(NodeInput *input)
void add_input_value(NodeOperationInput *input, float value)
NodeOperationInput * add_output_proxy(NodeOutput *output, bool use_conversion)
void add_operation(NodeOperation *operation)
void add_output_value(NodeOutput *output, float value)
void add_output_vector(NodeOutput *output, const float value[3])
void add_output_color(NodeOutput *output, const float value[4])
NodeOperation * set_invalid_output(NodeOutput *output)
void map_input_socket(NodeInput *node_socket, NodeOperationInput *operation_socket)
void add_input_vector(NodeOperationInput *input, const float value[3])
ViewerOperation * active_viewer() const
NodeInput are sockets that can receive data/input.
Definition COM_Node.h:191
void map_input_socket(NodeInput *node_socket, NodeOperationInput *operation_socket)
void map_output_socket(NodeOutput *node_socket, NodeOperationOutput *operation_socket)
void add_link(NodeOperationOutput *from, NodeOperationInput *to)
NodeOperation contains calculation logic.
NodeOperationOutput * get_output_socket(unsigned int index=0)
NodeOperationInput * get_input_socket(unsigned int index)
NodeOutput are sockets that can send data/input.
Definition COM_Node.h:239