f11f34778e30fd5f94c88a6d7349e281816992d5
[blender.git] / intern / cycles / render / nodes.h
1 /*
2  * Copyright 2011, 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
19 #ifndef __NODES_H__
20 #define __NODES_H__
21
22 #include "graph.h"
23
24 #include "util_string.h"
25
26 CCL_NAMESPACE_BEGIN
27
28 class ImageManager;
29 class Shadr;
30
31 /* Nodes */
32
33 class ImageTextureNode : public ShaderNode {
34 public:
35         SHADER_NODE_NO_CLONE_CLASS(ImageTextureNode)
36         ~ImageTextureNode();
37         ShaderNode *clone() const;
38
39         ImageManager *image_manager;
40         int slot;
41         string filename;
42         ustring color_space;
43
44         static ShaderEnum color_space_enum;
45 };
46
47 class EnvironmentTextureNode : public ShaderNode {
48 public:
49         SHADER_NODE_NO_CLONE_CLASS(EnvironmentTextureNode)
50         ~EnvironmentTextureNode();
51         ShaderNode *clone() const;
52
53         ImageManager *image_manager;
54         int slot;
55         string filename;
56         ustring color_space;
57
58         static ShaderEnum color_space_enum;
59 };
60
61 class SkyTextureNode : public ShaderNode {
62 public:
63         SHADER_NODE_CLASS(SkyTextureNode)
64
65         float3 sun_direction;
66         float turbidity;
67 };
68
69 class OutputNode : public ShaderNode {
70 public:
71         SHADER_NODE_CLASS(OutputNode)
72 };
73
74 class NoiseTextureNode : public ShaderNode {
75 public:
76         SHADER_NODE_CLASS(NoiseTextureNode)
77 };
78
79 class BlendTextureNode : public ShaderNode {
80 public:
81         SHADER_NODE_CLASS(BlendTextureNode)
82
83         ustring progression;
84         ustring axis;
85
86         static ShaderEnum progression_enum;
87         static ShaderEnum axis_enum;
88 };
89
90 class CloudsTextureNode : public ShaderNode {
91 public:
92         SHADER_NODE_CLASS(CloudsTextureNode)
93
94         bool hard;
95         int depth;
96         ustring basis;
97
98         static ShaderEnum basis_enum;
99 };
100
101 class VoronoiTextureNode : public ShaderNode {
102 public:
103         SHADER_NODE_CLASS(VoronoiTextureNode)
104
105         ustring distance_metric;
106         ustring coloring;
107
108         static ShaderEnum distance_metric_enum;
109         static ShaderEnum coloring_enum;
110 };
111
112 class MusgraveTextureNode : public ShaderNode {
113 public:
114         SHADER_NODE_CLASS(MusgraveTextureNode)
115
116         ustring type;
117         ustring basis;
118
119         static ShaderEnum type_enum;
120         static ShaderEnum basis_enum;
121 };
122
123 class MarbleTextureNode : public ShaderNode {
124 public:
125         SHADER_NODE_CLASS(MarbleTextureNode)
126
127         ustring type;
128         ustring wave;
129         ustring basis;
130         bool hard;
131         int depth;
132
133         static ShaderEnum type_enum;
134         static ShaderEnum wave_enum;
135         static ShaderEnum basis_enum;
136 };
137
138 class MagicTextureNode : public ShaderNode {
139 public:
140         SHADER_NODE_CLASS(MagicTextureNode)
141
142         int depth;
143 };
144
145 class StucciTextureNode : public ShaderNode {
146 public:
147         SHADER_NODE_CLASS(StucciTextureNode)
148
149         ustring type;
150         ustring basis;
151         bool hard;
152
153         static ShaderEnum type_enum;
154         static ShaderEnum basis_enum;
155 };
156
157 class DistortedNoiseTextureNode : public ShaderNode {
158 public:
159         SHADER_NODE_CLASS(DistortedNoiseTextureNode)
160
161         ustring basis;
162         ustring distortion_basis;
163         static ShaderEnum basis_enum;
164 };
165
166 class WoodTextureNode : public ShaderNode {
167 public:
168         SHADER_NODE_CLASS(WoodTextureNode)
169
170         ustring type;
171         ustring wave;
172         ustring basis;
173         bool hard;
174
175         static ShaderEnum type_enum;
176         static ShaderEnum wave_enum;
177         static ShaderEnum basis_enum;
178 };
179
180 class MappingNode : public ShaderNode {
181 public:
182         SHADER_NODE_CLASS(MappingNode)
183
184         Transform compute_transform();
185         float3 translation;
186         float3 rotation;
187         float3 scale;
188 };
189
190 class ConvertNode : public ShaderNode {
191 public:
192         ConvertNode(ShaderSocketType from, ShaderSocketType to);
193         SHADER_NODE_BASE_CLASS(ConvertNode)
194
195         ShaderSocketType from, to;
196 };
197
198 class BsdfNode : public ShaderNode {
199 public:
200         SHADER_NODE_CLASS(BsdfNode)
201
202         void compile(SVMCompiler& compiler, ShaderInput *param1, ShaderInput *param2);
203
204         ClosureType closure;
205 };
206
207 class WardBsdfNode : public BsdfNode {
208 public:
209         SHADER_NODE_CLASS(WardBsdfNode)
210 };
211
212 class DiffuseBsdfNode : public BsdfNode {
213 public:
214         SHADER_NODE_CLASS(DiffuseBsdfNode)
215 };
216
217 class TranslucentBsdfNode : public BsdfNode {
218 public:
219         SHADER_NODE_CLASS(TranslucentBsdfNode)
220 };
221
222 class TransparentBsdfNode : public BsdfNode {
223 public:
224         SHADER_NODE_CLASS(TransparentBsdfNode)
225 };
226
227 class VelvetBsdfNode : public BsdfNode {
228 public:
229         SHADER_NODE_CLASS(VelvetBsdfNode)
230 };
231
232 class GlossyBsdfNode : public BsdfNode {
233 public:
234         SHADER_NODE_CLASS(GlossyBsdfNode)
235
236         ustring distribution;
237         static ShaderEnum distribution_enum;
238 };
239
240 class GlassBsdfNode : public BsdfNode {
241 public:
242         SHADER_NODE_CLASS(GlassBsdfNode)
243
244         ustring distribution;
245         static ShaderEnum distribution_enum;
246 };
247
248 class EmissionNode : public ShaderNode {
249 public:
250         SHADER_NODE_CLASS(EmissionNode)
251
252         bool total_power;
253 };
254
255 class BackgroundNode : public ShaderNode {
256 public:
257         SHADER_NODE_CLASS(BackgroundNode)
258 };
259
260 class HoldoutNode : public ShaderNode {
261 public:
262         SHADER_NODE_CLASS(HoldoutNode)
263 };
264
265 class GeometryNode : public ShaderNode {
266 public:
267         SHADER_NODE_CLASS(GeometryNode)
268 };
269
270 class TextureCoordinateNode : public ShaderNode {
271 public:
272         SHADER_NODE_CLASS(TextureCoordinateNode)
273         void attributes(AttributeRequestSet *attributes);
274 };
275
276 class LightPathNode : public ShaderNode {
277 public:
278         SHADER_NODE_CLASS(LightPathNode)
279 };
280
281 class ValueNode : public ShaderNode {
282 public:
283         SHADER_NODE_CLASS(ValueNode)
284
285         float value;
286 };
287
288 class ColorNode : public ShaderNode {
289 public:
290         SHADER_NODE_CLASS(ColorNode)
291
292         float3 value;
293 };
294
295 class AddClosureNode : public ShaderNode {
296 public:
297         SHADER_NODE_CLASS(AddClosureNode)
298 };
299
300 class MixClosureNode : public ShaderNode {
301 public:
302         SHADER_NODE_CLASS(MixClosureNode)
303 };
304
305 class MixNode : public ShaderNode {
306 public:
307         SHADER_NODE_CLASS(MixNode)
308
309         ustring type;
310         static ShaderEnum type_enum;
311 };
312
313 class AttributeNode : public ShaderNode {
314 public:
315         SHADER_NODE_CLASS(AttributeNode)
316         void attributes(AttributeRequestSet *attributes);
317
318         ustring attribute;
319 };
320
321 class FresnelNode : public ShaderNode {
322 public:
323         SHADER_NODE_CLASS(FresnelNode)
324 };
325
326 class BlendWeightNode : public ShaderNode {
327 public:
328         SHADER_NODE_CLASS(BlendWeightNode)
329 };
330
331 class MathNode : public ShaderNode {
332 public:
333         SHADER_NODE_CLASS(MathNode)
334
335         ustring type;
336         static ShaderEnum type_enum;
337 };
338
339 class VectorMathNode : public ShaderNode {
340 public:
341         SHADER_NODE_CLASS(VectorMathNode)
342
343         ustring type;
344         static ShaderEnum type_enum;
345 };
346
347 class BumpNode : public ShaderNode {
348 public:
349         SHADER_NODE_CLASS(BumpNode)
350 };
351
352 CCL_NAMESPACE_END
353
354 #endif /* __NODES_H__ */
355