Cleanup: remove non-existing function declarations
[blender.git] / source / blender / compositor / intern / COM_NodeConverter.h
1 /*
2  * Copyright 2013, Blender Foundation.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor:
19  *      Lukas Toenne
20  */
21
22 #ifndef __COM_NODECONVERTER_H__
23 #define __COM_NODECONVERTER_H__
24
25 #ifdef WITH_CXX_GUARDEDALLOC
26 #  include "MEM_guardedalloc.h"
27 #endif
28
29 class NodeInput;
30 class NodeOutput;
31
32 class NodeOperation;
33 class NodeOperationInput;
34 class NodeOperationOutput;
35 class NodeOperationBuilder;
36
37 class ViewerOperation;
38
39 /**
40  * Interface type for converting a \a Node into \a NodeOperation.
41  * This is passed to \a Node::convertToOperation methods and allows them
42  * to register any number of operations, create links between them,
43  * and map original node sockets to their inputs or outputs.
44  */
45 class NodeConverter {
46 public:
47         NodeConverter(NodeOperationBuilder *builder);
48
49         /**
50          * Insert a new operation into the operations graph.
51          * The operation must be created by the node.
52          */
53         void addOperation(NodeOperation *operation);
54
55         /**
56          * Map input socket of the node to an operation socket.
57          * Links between nodes will then generate equivalent links between
58          * the mapped operation sockets.
59          *
60          * \note A \a Node input can be mapped to multiple \a NodeOperation inputs.
61          */
62         void mapInputSocket(NodeInput *node_socket, NodeOperationInput *operation_socket);
63         /**
64          * Map output socket of the node to an operation socket.
65          * Links between nodes will then generate equivalent links between
66          * the mapped operation sockets.
67          *
68          * \note A \a Node output can only be mapped to one \a NodeOperation output.
69          * Any existing operation output mapping will be replaced.
70          */
71         void mapOutputSocket(NodeOutput *node_socket, NodeOperationOutput *operation_socket);
72
73         /**
74          * Create a proxy operation for a node input.
75          * This operation will be removed later and replaced
76          * by direct links between the connected operations.
77          */
78         NodeOperationOutput *addInputProxy(NodeInput *input, bool use_conversion);
79         /**
80          * Create a proxy operation for a node output.
81          * This operation will be removed later and replaced
82          * by direct links between the connected operations.
83          */
84         NodeOperationInput *addOutputProxy(NodeOutput *output, bool use_conversion);
85
86         /** Define a constant input value. */
87         void addInputValue(NodeOperationInput *input, float value);
88         /** Define a constant input color. */
89         void addInputColor(NodeOperationInput *input, const float value[4]);
90         /** Define a constant input vector. */
91         void addInputVector(NodeOperationInput *input, const float value[3]);
92
93         /** Define a constant output value. */
94         void addOutputValue(NodeOutput *output, float value);
95         /** Define a constant output color. */
96         void addOutputColor(NodeOutput *output, const float value[4]);
97         /** Define a constant output vector. */
98         void addOutputVector(NodeOutput *output, const float value[3]);
99
100         /** Add an explicit link between two operations. */
101         void addLink(NodeOperationOutput *from, NodeOperationInput *to);
102
103         /** Add a preview operation for a operation output. */
104         void addPreview(NodeOperationOutput *output);
105         /** Add a preview operation for a node input. */
106         void addNodeInputPreview(NodeInput *input);
107
108         /**
109          * When a node has no valid data
110          * \note missing image / group pointer, or missing renderlayer from EXR
111          */
112         NodeOperation *setInvalidOutput(NodeOutput *output);
113
114         /** Define a viewer operation as the active output, if possible */
115         void registerViewer(ViewerOperation *viewer);
116         /** The currently active viewer output operation */
117         ViewerOperation *active_viewer() const;
118
119 private:
120         /** The internal builder for storing the results of the graph construction. */
121         NodeOperationBuilder *m_builder;
122
123 #ifdef WITH_CXX_GUARDEDALLOC
124         MEM_CXX_CLASS_ALLOC_FUNCS("COM:NodeCompiler")
125 #endif
126 };
127
128 #endif /* __COM_NODECONVERTER_H__ */