2 * Copyright 2011, Blender Foundation.
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.
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.
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.
24 #include "util_string.h"
33 class TextureMapping {
36 Transform compute_transform();
38 void compile(SVMCompiler& compiler, int offset_in, int offset_out);
44 enum Mapping { NONE=0, X=1, Y=2, Z=3 };
45 Mapping x_mapping, y_mapping, z_mapping;
47 enum Projection { FLAT, CUBE, TUBE, SPHERE };
48 Projection projection;
53 class TextureNode : public ShaderNode {
55 TextureNode(const char *name) : ShaderNode(name) {}
56 TextureMapping tex_mapping;
59 class ImageTextureNode : public TextureNode {
61 SHADER_NODE_NO_CLONE_CLASS(ImageTextureNode)
63 ShaderNode *clone() const;
65 ImageManager *image_manager;
70 static ShaderEnum color_space_enum;
73 class EnvironmentTextureNode : public TextureNode {
75 SHADER_NODE_NO_CLONE_CLASS(EnvironmentTextureNode)
76 ~EnvironmentTextureNode();
77 ShaderNode *clone() const;
79 ImageManager *image_manager;
84 static ShaderEnum color_space_enum;
87 class SkyTextureNode : public TextureNode {
89 SHADER_NODE_CLASS(SkyTextureNode)
95 class OutputNode : public ShaderNode {
97 SHADER_NODE_CLASS(OutputNode)
100 class GradientTextureNode : public TextureNode {
102 SHADER_NODE_CLASS(GradientTextureNode)
105 static ShaderEnum type_enum;
108 class NoiseTextureNode : public TextureNode {
110 SHADER_NODE_CLASS(NoiseTextureNode)
113 class VoronoiTextureNode : public TextureNode {
115 SHADER_NODE_CLASS(VoronoiTextureNode)
119 static ShaderEnum coloring_enum;
122 class MusgraveTextureNode : public TextureNode {
124 SHADER_NODE_CLASS(MusgraveTextureNode)
128 static ShaderEnum type_enum;
131 class WaveTextureNode : public TextureNode {
133 SHADER_NODE_CLASS(WaveTextureNode)
136 static ShaderEnum type_enum;
139 class MagicTextureNode : public TextureNode {
141 SHADER_NODE_CLASS(MagicTextureNode)
146 class MappingNode : public ShaderNode {
148 SHADER_NODE_CLASS(MappingNode)
150 TextureMapping tex_mapping;
153 class ConvertNode : public ShaderNode {
155 ConvertNode(ShaderSocketType from, ShaderSocketType to);
156 SHADER_NODE_BASE_CLASS(ConvertNode)
158 ShaderSocketType from, to;
161 class BsdfNode : public ShaderNode {
163 SHADER_NODE_CLASS(BsdfNode)
165 void compile(SVMCompiler& compiler, ShaderInput *param1, ShaderInput *param2);
170 class WardBsdfNode : public BsdfNode {
172 SHADER_NODE_CLASS(WardBsdfNode)
175 class DiffuseBsdfNode : public BsdfNode {
177 SHADER_NODE_CLASS(DiffuseBsdfNode)
180 class TranslucentBsdfNode : public BsdfNode {
182 SHADER_NODE_CLASS(TranslucentBsdfNode)
185 class TransparentBsdfNode : public BsdfNode {
187 SHADER_NODE_CLASS(TransparentBsdfNode)
190 class VelvetBsdfNode : public BsdfNode {
192 SHADER_NODE_CLASS(VelvetBsdfNode)
195 class GlossyBsdfNode : public BsdfNode {
197 SHADER_NODE_CLASS(GlossyBsdfNode)
199 ustring distribution;
200 static ShaderEnum distribution_enum;
203 class GlassBsdfNode : public BsdfNode {
205 SHADER_NODE_CLASS(GlassBsdfNode)
207 ustring distribution;
208 static ShaderEnum distribution_enum;
211 class EmissionNode : public ShaderNode {
213 SHADER_NODE_CLASS(EmissionNode)
218 class BackgroundNode : public ShaderNode {
220 SHADER_NODE_CLASS(BackgroundNode)
223 class HoldoutNode : public ShaderNode {
225 SHADER_NODE_CLASS(HoldoutNode)
228 class VolumeNode : public ShaderNode {
230 SHADER_NODE_CLASS(VolumeNode)
232 void compile(SVMCompiler& compiler, ShaderInput *param1, ShaderInput *param2);
237 class TransparentVolumeNode : public VolumeNode {
239 SHADER_NODE_CLASS(TransparentVolumeNode)
242 class IsotropicVolumeNode : public VolumeNode {
244 SHADER_NODE_CLASS(IsotropicVolumeNode)
247 class GeometryNode : public ShaderNode {
249 SHADER_NODE_CLASS(GeometryNode)
252 class TextureCoordinateNode : public ShaderNode {
254 SHADER_NODE_CLASS(TextureCoordinateNode)
255 void attributes(AttributeRequestSet *attributes);
258 class LightPathNode : public ShaderNode {
260 SHADER_NODE_CLASS(LightPathNode)
263 class ValueNode : public ShaderNode {
265 SHADER_NODE_CLASS(ValueNode)
270 class ColorNode : public ShaderNode {
272 SHADER_NODE_CLASS(ColorNode)
277 class AddClosureNode : public ShaderNode {
279 SHADER_NODE_CLASS(AddClosureNode)
282 class MixClosureNode : public ShaderNode {
284 SHADER_NODE_CLASS(MixClosureNode)
287 class InvertNode : public ShaderNode {
289 SHADER_NODE_CLASS(InvertNode)
292 class MixNode : public ShaderNode {
294 SHADER_NODE_CLASS(MixNode)
297 static ShaderEnum type_enum;
300 class CombineRGBNode : public ShaderNode {
302 SHADER_NODE_CLASS(CombineRGBNode)
305 class SeparateRGBNode : public ShaderNode {
307 SHADER_NODE_CLASS(SeparateRGBNode)
310 class HSVNode : public ShaderNode {
312 SHADER_NODE_CLASS(HSVNode)
315 class AttributeNode : public ShaderNode {
317 SHADER_NODE_CLASS(AttributeNode)
318 void attributes(AttributeRequestSet *attributes);
323 class CameraNode : public ShaderNode {
325 SHADER_NODE_CLASS(CameraNode)
328 class FresnelNode : public ShaderNode {
330 SHADER_NODE_CLASS(FresnelNode)
333 class LayerWeightNode : public ShaderNode {
335 SHADER_NODE_CLASS(LayerWeightNode)
338 class MathNode : public ShaderNode {
340 SHADER_NODE_CLASS(MathNode)
343 static ShaderEnum type_enum;
346 class VectorMathNode : public ShaderNode {
348 SHADER_NODE_CLASS(VectorMathNode)
351 static ShaderEnum type_enum;
354 class BumpNode : public ShaderNode {
356 SHADER_NODE_CLASS(BumpNode)
361 #endif /* __NODES_H__ */