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.
19 #ifndef __SVM_TYPES_H__
20 #define __SVM_TYPES_H__
26 /* SVM stack has a fixed size */
27 #define SVM_STACK_SIZE 255
28 /* SVM stack offsets with this value indicate that it's not on the stack */
29 #define SVM_STACK_INVALID 255
33 typedef enum NodeType {
36 NODE_CLOSURE_EMISSION,
37 NODE_CLOSURE_BACKGROUND,
38 NODE_CLOSURE_SET_WEIGHT,
60 NODE_SET_DISPLACEMENT,
61 NODE_GEOMETRY_BUMP_DX,
62 NODE_GEOMETRY_BUMP_DY,
68 NODE_TEX_COORD_BUMP_DX,
69 NODE_TEX_COORD_BUMP_DY,
71 NODE_EMISSION_SET_WEIGHT_TOTAL,
95 typedef enum NodeAttributeType {
100 typedef enum NodeGeometry {
109 typedef enum NodeObjectInfo {
110 NODE_INFO_OB_LOCATION,
116 typedef enum NodeParticleInfo {
118 NODE_INFO_PAR_LIFETIME
121 typedef enum NodeLightPath {
128 NODE_LP_transmission,
133 typedef enum NodeLightFalloff {
134 NODE_LIGHT_FALLOFF_QUADRATIC,
135 NODE_LIGHT_FALLOFF_LINEAR,
136 NODE_LIGHT_FALLOFF_CONSTANT
139 typedef enum NodeTexCoord {
144 NODE_TEXCO_REFLECTION
147 typedef enum NodeMix {
168 typedef enum NodeMath {
178 NODE_MATH_ARCTANGENT,
185 NODE_MATH_GREATER_THAN
188 typedef enum NodeVectorMath {
189 NODE_VECTOR_MATH_ADD,
190 NODE_VECTOR_MATH_SUBTRACT,
191 NODE_VECTOR_MATH_AVERAGE,
192 NODE_VECTOR_MATH_DOT_PRODUCT,
193 NODE_VECTOR_MATH_CROSS_PRODUCT,
194 NODE_VECTOR_MATH_NORMALIZE
197 typedef enum NodeConvert {
203 typedef enum NodeDistanceMetric {
204 NODE_VORONOI_DISTANCE_SQUARED,
205 NODE_VORONOI_ACTUAL_DISTANCE,
206 NODE_VORONOI_MANHATTAN,
207 NODE_VORONOI_CHEBYCHEV,
208 NODE_VORONOI_MINKOVSKY_H,
209 NODE_VORONOI_MINKOVSKY_4,
210 NODE_VORONOI_MINKOVSKY
211 } NodeDistanceMetric;
213 typedef enum NodeNoiseBasis {
215 NODE_NOISE_VORONOI_F1,
216 NODE_NOISE_VORONOI_F2,
217 NODE_NOISE_VORONOI_F3,
218 NODE_NOISE_VORONOI_F4,
219 NODE_NOISE_VORONOI_F2_F1,
220 NODE_NOISE_VORONOI_CRACKLE,
221 NODE_NOISE_CELL_NOISE
224 typedef enum NodeWaveBasis {
230 typedef enum NodeMusgraveType {
231 NODE_MUSGRAVE_MULTIFRACTAL,
233 NODE_MUSGRAVE_HYBRID_MULTIFRACTAL,
234 NODE_MUSGRAVE_RIDGED_MULTIFRACTAL,
235 NODE_MUSGRAVE_HETERO_TERRAIN
238 typedef enum NodeWaveType {
243 typedef enum NodeGradientType {
245 NODE_BLEND_QUADRATIC,
249 NODE_BLEND_QUADRATIC_SPHERE,
253 typedef enum NodeVoronoiColoring {
254 NODE_VORONOI_INTENSITY,
256 } NodeVoronoiColoring;
258 typedef enum NodeBlendWeightType {
259 NODE_LAYER_WEIGHT_FRESNEL,
260 NODE_LAYER_WEIGHT_FACING
261 } NodeBlendWeightType;
263 typedef enum ShaderType {
266 SHADER_TYPE_DISPLACEMENT
271 typedef enum ClosureType {
274 CLOSURE_BSDF_DIFFUSE_ID,
275 CLOSURE_BSDF_OREN_NAYAR_ID,
277 CLOSURE_BSDF_REFLECTION_ID,
278 CLOSURE_BSDF_MICROFACET_GGX_ID,
279 CLOSURE_BSDF_MICROFACET_BECKMANN_ID,
280 CLOSURE_BSDF_WARD_ID,
281 CLOSURE_BSDF_WESTIN_SHEEN_ID,
283 CLOSURE_BSDF_TRANSLUCENT_ID,
284 CLOSURE_BSDF_REFRACTION_ID,
285 CLOSURE_BSDF_WESTIN_BACKSCATTER_ID,
286 CLOSURE_BSDF_ASHIKHMIN_VELVET_ID,
287 CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID,
288 CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID,
289 CLOSURE_BSDF_GLASS_ID,
291 CLOSURE_BSDF_TRANSPARENT_ID,
293 CLOSURE_BSSRDF_CUBIC_ID,
296 CLOSURE_BACKGROUND_ID,
298 CLOSURE_SUBSURFACE_ID,
301 CLOSURE_VOLUME_TRANSPARENT_ID,
302 CLOSURE_VOLUME_ISOTROPIC_ID,
307 /* watch this, being lazy with memory usage */
308 #define CLOSURE_IS_BSDF(type) (type <= CLOSURE_BSDF_TRANSPARENT_ID)
309 #define CLOSURE_IS_BSDF_DIFFUSE(type) (type >= CLOSURE_BSDF_DIFFUSE_ID && type <= CLOSURE_BSDF_OREN_NAYAR_ID)
310 #define CLOSURE_IS_BSDF_GLOSSY(type) (type >= CLOSURE_BSDF_REFLECTION_ID && type <= CLOSURE_BSDF_WESTIN_SHEEN_ID)
311 #define CLOSURE_IS_BSDF_TRANSMISSION(type) (type >= CLOSURE_BSDF_TRANSLUCENT_ID && type <= CLOSURE_BSDF_GLASS_ID)
312 #define CLOSURE_IS_VOLUME(type) (type >= CLOSURE_VOLUME_ID && type <= CLOSURE_VOLUME_ISOTROPIC_ID)
313 #define CLOSURE_IS_EMISSION(type) (type == CLOSURE_EMISSION_ID)
314 #define CLOSURE_IS_HOLDOUT(type) (type == CLOSURE_HOLDOUT_ID)
315 #define CLOSURE_IS_BACKGROUND(type) (type == CLOSURE_BACKGROUND_ID)
319 #endif /* __SVM_TYPES_H__ */