Cycles: add some volume nodes, they don't actually do anything, this is just
[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 VolumeNode : public ShaderNode {
266 public:
267         SHADER_NODE_CLASS(VolumeNode)
268
269         void compile(SVMCompiler& compiler, ShaderInput *param1, ShaderInput *param2);
270
271         ClosureType closure;
272 };
273
274 class TransparentVolumeNode : public VolumeNode {
275 public:
276         SHADER_NODE_CLASS(TransparentVolumeNode)
277 };
278
279 class IsotropicVolumeNode : public VolumeNode {
280 public:
281         SHADER_NODE_CLASS(IsotropicVolumeNode)
282 };
283
284 class GeometryNode : public ShaderNode {
285 public:
286         SHADER_NODE_CLASS(GeometryNode)
287 };
288
289 class TextureCoordinateNode : public ShaderNode {
290 public:
291         SHADER_NODE_CLASS(TextureCoordinateNode)
292         void attributes(AttributeRequestSet *attributes);
293 };
294
295 class LightPathNode : public ShaderNode {
296 public:
297         SHADER_NODE_CLASS(LightPathNode)
298 };
299
300 class ValueNode : public ShaderNode {
301 public:
302         SHADER_NODE_CLASS(ValueNode)
303
304         float value;
305 };
306
307 class ColorNode : public ShaderNode {
308 public:
309         SHADER_NODE_CLASS(ColorNode)
310
311         float3 value;
312 };
313
314 class AddClosureNode : public ShaderNode {
315 public:
316         SHADER_NODE_CLASS(AddClosureNode)
317 };
318
319 class MixClosureNode : public ShaderNode {
320 public:
321         SHADER_NODE_CLASS(MixClosureNode)
322 };
323
324 class MixNode : public ShaderNode {
325 public:
326         SHADER_NODE_CLASS(MixNode)
327
328         ustring type;
329         static ShaderEnum type_enum;
330 };
331
332 class AttributeNode : public ShaderNode {
333 public:
334         SHADER_NODE_CLASS(AttributeNode)
335         void attributes(AttributeRequestSet *attributes);
336
337         ustring attribute;
338 };
339
340 class FresnelNode : public ShaderNode {
341 public:
342         SHADER_NODE_CLASS(FresnelNode)
343 };
344
345 class BlendWeightNode : public ShaderNode {
346 public:
347         SHADER_NODE_CLASS(BlendWeightNode)
348 };
349
350 class MathNode : public ShaderNode {
351 public:
352         SHADER_NODE_CLASS(MathNode)
353
354         ustring type;
355         static ShaderEnum type_enum;
356 };
357
358 class VectorMathNode : public ShaderNode {
359 public:
360         SHADER_NODE_CLASS(VectorMathNode)
361
362         ustring type;
363         static ShaderEnum type_enum;
364 };
365
366 class BumpNode : public ShaderNode {
367 public:
368         SHADER_NODE_CLASS(BumpNode)
369 };
370
371 CCL_NAMESPACE_END
372
373 #endif /* __NODES_H__ */
374