ffb16b96b5539e644204f79ce0d29b57e037fcc9
[blender-staging.git] / source / blender / makesdna / DNA_node_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
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  * The Original Code is Copyright (C) 2005 Blender Foundation.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): Bob Holcomb, Xavier Thomas
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file DNA_node_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_NODE_TYPES_H__
33 #define __DNA_NODE_TYPES_H__
34
35 #include "DNA_ID.h"
36 #include "DNA_vec_types.h"
37 #include "DNA_listBase.h"
38 #include "DNA_texture_types.h"
39 #include "DNA_scene_types.h"
40
41 struct ID;
42 struct ListBase;
43 struct SpaceNode;
44 struct bNodeLink;
45 struct bNodeType;
46 struct bNodeTreeExec;
47 struct AnimData;
48 struct bGPdata;
49 struct uiBlock;
50 struct Image;
51
52 #define NODE_MAXSTR 64
53
54 typedef struct bNodeStack {
55         float vec[4];
56         float min, max;
57         void *data;
58         short hasinput;                 /* when input has link, tagged before executing */
59         short hasoutput;                /* when output is linked, tagged before executing */
60         short datatype;                 /* type of data pointer */
61         short sockettype;               /* type of socket stack comes from, to remap linking different sockets */
62         short is_copy;                  /* data is a copy of external data (no freeing) */
63         short external;                 /* data is used by external nodes (no freeing) */
64         short pad[2];
65 } bNodeStack;
66
67 /* ns->datatype, shadetree only */
68 #define NS_OSA_VECTORS          1
69 #define NS_OSA_VALUES           2
70
71 /* node socket/node socket type -b conversion rules */
72 #define NS_CR_CENTER            0
73 #define NS_CR_NONE                      1
74 #define NS_CR_FIT_WIDTH         2
75 #define NS_CR_FIT_HEIGHT        3
76 #define NS_CR_FIT                       4
77 #define NS_CR_STRETCH           5
78
79 typedef struct bNodeSocket {
80         struct bNodeSocket *next, *prev, *new_sock;
81         
82         char name[64];  /* MAX_NAME */
83         
84         void *storage;                          /* custom storage */
85         
86         short type, flag;
87         short limit;                            /* max. number of links */
88         short pad1;
89         
90         float locx, locy;
91         
92         void *default_value;            /* default input value used for unlinked sockets */
93         
94         /* execution data */
95         short stack_index;                      /* local stack index */
96         /* XXX deprecated, kept for forward compatibility */
97         short stack_type  DNA_DEPRECATED;
98         int resizemode;                         /* compositor resize mode of the socket */
99         void *cache;                            /* cached data from execution */
100         
101         /* internal data to retrieve relations and groups */
102         int own_index;                          /* group socket identifiers, to find matching pairs after reading files */
103         /* XXX deprecated, only used for restoring old group node links */
104         int to_index  DNA_DEPRECATED;
105         struct bNodeSocket *groupsock;
106         
107         struct bNodeLink *link;         /* a link pointer, set in ntreeUpdateTree */
108
109         /* XXX deprecated, socket input values are stored in default_value now. kept for forward compatibility */
110         bNodeStack ns  DNA_DEPRECATED;  /* custom data for inputs, only UI writes in this */
111 } bNodeSocket;
112
113 /* sock->type */
114 #define SOCK_FLOAT                      0
115 #define SOCK_VECTOR                     1
116 #define SOCK_RGBA                       2
117 #define SOCK_SHADER                     3
118 #define SOCK_BOOLEAN            4
119 #define SOCK_MESH                       5
120 #define SOCK_INT                        6
121 #define NUM_SOCKET_TYPES        7       /* must be last! */
122
123 /* socket side (input/output) */
124 #define SOCK_IN         1
125 #define SOCK_OUT        2
126
127 /* sock->flag, first bit is select */
128         /* hidden is user defined, to hide unused */
129 #define SOCK_HIDDEN                             2
130         /* for quick check if socket is linked */
131 #define SOCK_IN_USE                             4       /* XXX deprecated */
132         /* unavailable is for dynamic sockets */
133 #define SOCK_UNAVAIL                    8
134         /* dynamic socket (can be modified by user) */
135 #define SOCK_DYNAMIC                    16
136         /* group socket should not be exposed */
137 #define SOCK_INTERNAL                   32
138         /* socket collapsed in UI */
139 #define SOCK_COLLAPSED                  64
140         /* hide socket value, if it gets auto default */
141 #define SOCK_HIDE_VALUE                 128
142         /* socket hidden automatically, to distinguish from manually hidden */
143         /* DEPRECATED, only kept here to avoid reusing the flag */
144 #define SOCK_AUTO_HIDDEN__DEPRECATED    256
145
146 typedef struct bNodePreview {
147         unsigned char *rect;
148         short xsize, ysize;
149         int pad;
150 } bNodePreview;
151
152 /* limit data in bNode to what we want to see saved? */
153 typedef struct bNode {
154         struct bNode *next, *prev, *new_node;
155         
156         char name[64];  /* MAX_NAME */
157         int flag;
158         short type, pad2;
159         short done, level;              /* both for dependency and sorting */
160         short lasty, menunr;    /* lasty: check preview render status, menunr: browse ID blocks */
161         short stack_index;              /* for groupnode, offset in global caller stack */
162         short nr;                               /* number of this node in list, used for UI exec events */
163         float color[3];                 /* custom user-defined color */
164         
165         ListBase inputs, outputs;
166         struct bNode *parent;   /* parent node */
167         struct ID *id;                  /* optional link to libdata */
168         void *storage;                  /* custom data, must be struct, for storage in file */
169         struct bNode *original; /* the original node in the tree (for localized tree) */
170         
171         float locx, locy;               /* root offset for drawing (parent space) */
172         float width, height;    /* node custom width and height */
173         float miniwidth;                /* node width if hidden */
174         float offsetx, offsety; /* additional offset from loc */
175         
176         int update;                             /* update flags */
177         
178         char label[64];                 /* custom user-defined label, MAX_NAME */
179         short custom1, custom2; /* to be abused for buttons */
180         float custom3, custom4;
181
182         short need_exec, exec;  /* need_exec is set as UI execution event, exec is flag during exec */
183         void *threaddata;               /* optional extra storage for use in thread (read only then!) */
184         rctf totr;                              /* entire boundbox (worldspace) */
185         rctf butr;                              /* optional buttons area */
186         rctf prvr;                              /* optional preview area */
187         bNodePreview *preview;  /* optional preview image */
188         struct uiBlock *block;  /* runtime during drawing */
189         
190         struct bNodeType *typeinfo;     /* lookup of callbacks and defaults */
191 } bNode;
192
193 /* node->flag */
194 #define NODE_SELECT                     1
195 #define NODE_OPTIONS            2
196 #define NODE_PREVIEW            4
197 #define NODE_HIDDEN                     8
198 #define NODE_ACTIVE                     16
199 #define NODE_ACTIVE_ID          32
200 #define NODE_DO_OUTPUT          64
201 #define NODE_GROUP_EDIT         128
202         /* free test flag, undefined */
203 #define NODE_TEST                       256
204         /* node is disabled */
205 #define NODE_MUTED                      512
206 #define NODE_CUSTOM_NAME        1024    /* deprecated! */
207         /* group node types: use const outputs by default */
208 #define NODE_CONST_OUTPUT       (1<<11)
209         /* node is always behind others */
210 #define NODE_BACKGROUND         (1<<12)
211         /* automatic flag for nodes included in transforms */
212 #define NODE_TRANSFORM          (1<<13)
213         /* node is active texture */
214
215         /* note: take care with this flag since its possible it gets
216          * `stuck` inside/outside the active group - which makes buttons
217          * window texture not update, we try to avoid it by clearing the
218          * flag when toggling group editing - Campbell */
219 #define NODE_ACTIVE_TEXTURE     (1<<14)
220         /* use a custom color for the node */
221 #define NODE_CUSTOM_COLOR       (1<<15)
222
223 /* node->update */
224 /* XXX NODE_UPDATE is a generic update flag. More fine-grained updates
225  * might be used in the future, but currently all work the same way.
226  */
227 #define NODE_UPDATE                     0xFFFF  /* generic update flag (includes all others) */
228 #define NODE_UPDATE_ID          1               /* associated id data block has changed */
229
230 typedef struct bNodeLink {
231         struct bNodeLink *next, *prev;
232         
233         bNode *fromnode, *tonode;
234         bNodeSocket *fromsock, *tosock;
235         
236         int flag;
237         int pad;
238 } bNodeLink;
239
240 /* link->flag */
241 #define NODE_LINKFLAG_HILITE    1               /* link has been successfully validated */
242 #define NODE_LINK_VALID                 2
243
244 /* tree->edit_quality/tree->render_quality */
245 #define NTREE_QUALITY_HIGH    0
246 #define NTREE_QUALITY_MEDIUM  1
247 #define NTREE_QUALITY_LOW     2
248
249 /* tree->chunksize */
250 #define NTREE_CHUNCKSIZE_32 32
251 #define NTREE_CHUNCKSIZE_64 64
252 #define NTREE_CHUNCKSIZE_128 128
253 #define NTREE_CHUNCKSIZE_256 256
254 #define NTREE_CHUNCKSIZE_512 512
255 #define NTREE_CHUNCKSIZE_1024 1024
256
257 /* the basis for a Node tree, all links and nodes reside internal here */
258 /* only re-usable node trees are in the library though, materials and textures allocate own tree struct */
259 typedef struct bNodeTree {
260         ID id;
261         struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */ 
262         
263         struct bGPdata *gpd;            /* grease pencil data */
264         
265         ListBase nodes, links;
266         
267         int type, init;                                 /* set init on fileread */
268         int cur_index;                                  /* sockets in groups have unique identifiers, adding new sockets always 
269                                                                          * will increase this counter */
270         int flag;
271         int update;                                             /* update flags */
272         
273         int nodetype;                                   /* specific node type this tree is used for */
274
275         short edit_quality;                             /* Quality setting when editing */
276         short render_quality;                           /* Quality setting when rendering */
277         int chunksize;                                  /* tile size for compositor engine */
278         
279         ListBase inputs, outputs;               /* external sockets for group nodes */
280         
281         /* execution data */
282         /* XXX It would be preferable to completely move this data out of the underlying node tree,
283          * so node tree execution could finally run independent of the tree itself. This would allow node trees
284          * to be merely linked by other data (materials, textures, etc.), as ID data is supposed to.
285          * Execution data is generated from the tree once at execution start and can then be used
286          * as long as necessary, even while the tree is being modified.
287          */
288         struct bNodeTreeExec *execdata;
289         
290         /* callbacks */
291         void (*progress)(void *, float progress);
292         void (*stats_draw)(void *, char *str);
293         int (*test_break)(void *);
294         void *tbh, *prh, *sdh;
295         
296 } bNodeTree;
297
298 /* ntree->type, index */
299 #define NTREE_SHADER            0
300 #define NTREE_COMPOSIT          1
301 #define NTREE_TEXTURE           2
302 #define NUM_NTREE_TYPES         3
303
304 /* ntree->init, flag */
305 #define NTREE_TYPE_INIT         1
306
307 /* ntree->flag */
308 #define NTREE_DS_EXPAND         1       /* for animation editors */
309 #define NTREE_COM_OPENCL        2       /* use opencl */
310 #define NTREE_TWO_PASS          4       /* two pass */
311 /* XXX not nice, but needed as a temporary flags
312  * for group updates after library linking.
313  */
314 #define NTREE_DO_VERSIONS_GROUP_EXPOSE  1024
315
316 /* ntree->update */
317 #define NTREE_UPDATE                    0xFFFF  /* generic update flag (includes all others) */
318 #define NTREE_UPDATE_LINKS              1               /* links have been added or removed */
319 #define NTREE_UPDATE_NODES              2               /* nodes or sockets have been added or removed */
320 #define NTREE_UPDATE_GROUP_IN   16              /* group inputs have changed */
321 #define NTREE_UPDATE_GROUP_OUT  32              /* group outputs have changed */
322 #define NTREE_UPDATE_GROUP              48              /* group has changed (generic flag including all other group flags) */
323
324
325 /* socket value structs for input buttons */
326
327 typedef struct bNodeSocketValueInt {
328         int subtype;                            /* RNA subtype */
329         int value;
330         int min, max;
331 } bNodeSocketValueInt;
332
333 typedef struct bNodeSocketValueFloat {
334         int subtype;                            /* RNA subtype */
335         float value;
336         float min, max;
337 } bNodeSocketValueFloat;
338
339 typedef struct bNodeSocketValueBoolean {
340         char value;
341         char pad[3];
342 } bNodeSocketValueBoolean;
343
344 typedef struct bNodeSocketValueVector {
345         int subtype;                            /* RNA subtype */
346         float value[3];
347         float min, max;
348 } bNodeSocketValueVector;
349
350 typedef struct bNodeSocketValueRGBA {
351         float value[4];
352 } bNodeSocketValueRGBA;
353
354
355 /* data structs, for node->storage */
356 enum {
357         CMP_NODE_MASKTYPE_ADD         = 0,
358         CMP_NODE_MASKTYPE_SUBTRACT    = 1,
359         CMP_NODE_MASKTYPE_MULTIPLY    = 2,
360         CMP_NODE_MASKTYPE_NOT         = 3
361 };
362
363 enum {
364         CMP_NODE_LENSFLARE_GHOST   = 1,
365         CMP_NODE_LENSFLARE_GLOW    = 2,
366         CMP_NODE_LENSFLARE_CIRCLE  = 4,
367         CMP_NODE_LENSFLARE_STREAKS = 8
368 };
369
370 enum {
371         CMP_NODE_DILATEERODE_STEP             = 0,
372         CMP_NODE_DILATEERODE_DISTANCE_THRESH  = 1,
373         CMP_NODE_DILATEERODE_DISTANCE         = 2,
374         CMP_NODE_DILATEERODE_DISTANCE_FEATHER = 3
375 };
376
377 enum {
378         CMP_NODE_INPAINT_SIMPLE               = 0
379 };
380
381 enum {
382         CMP_NODEFLAG_MASK_AA          = (1 << 0),
383         CMP_NODEFLAG_MASK_NO_FEATHER  = (1 << 1),
384         CMP_NODEFLAG_MASK_MOTION_BLUR = (1 << 2),
385
386         /* we may want multiple aspect options, exposed as an rna enum */
387         CMP_NODEFLAG_MASK_FIXED       = (1 << 8),
388         CMP_NODEFLAG_MASK_FIXED_SCENE = (1 << 9)
389 };
390
391 enum {
392         CMP_NODEFLAG_BLUR_VARIABLE_SIZE = (1 << 0)
393 };
394
395 typedef struct NodeFrame {
396         short flag;
397         short label_size;
398 } NodeFrame;
399
400 /* this one has been replaced with ImageUser, keep it for do_versions() */
401 typedef struct NodeImageAnim {
402         int frames   DNA_DEPRECATED;
403         int sfra     DNA_DEPRECATED;
404         int nr       DNA_DEPRECATED;
405         char cyclic  DNA_DEPRECATED;
406         char movie   DNA_DEPRECATED;
407         short pad;
408 } NodeImageAnim;
409
410 typedef struct ColorCorrectionData {
411         float saturation;
412         float contrast;
413         float gamma;
414         float gain;
415         float lift;
416         int pad;
417 } ColorCorrectionData;
418
419 typedef struct NodeColorCorrection {
420         ColorCorrectionData master;
421         ColorCorrectionData shadows;
422         ColorCorrectionData midtones;
423         ColorCorrectionData highlights;
424         float startmidtones;
425         float endmidtones;
426 } NodeColorCorrection;
427
428 typedef struct NodeBokehImage {
429         float angle;
430         int flaps;
431         float rounding;
432         float catadioptric;
433         float lensshift;
434 } NodeBokehImage;
435
436 typedef struct NodeBoxMask {
437         float x;
438         float y;
439         float rotation;
440         float height;
441         float width;
442         int pad;
443 } NodeBoxMask;
444
445 typedef struct NodeEllipseMask {
446         float x;
447         float y;
448         float rotation;
449         float height;
450         float width;
451         int pad;
452 } NodeEllipseMask;
453
454 /* layer info for image node outputs */
455 typedef struct NodeImageLayer {
456         /* index in the Image->layers->passes lists */
457         int pass_index;
458         /* render pass flag, in case this is an original render pass */
459         int pass_flag;
460 } NodeImageLayer;
461
462 typedef struct NodeBlurData {
463         short sizex, sizey;
464         short samples, maxspeed, minspeed, relative, aspect;
465         short curved;
466         float fac, percentx, percenty;
467         short filtertype;
468         char bokeh, gamma;
469         int image_in_width, image_in_height; /* needed for absolute/relative conversions */
470 } NodeBlurData;
471
472 typedef struct NodeDBlurData {
473         float center_x, center_y, distance, angle, spin, zoom;
474         short iter;
475         char wrap, pad;
476 } NodeDBlurData;
477
478 typedef struct NodeBilateralBlurData {
479         float sigma_color, sigma_space;
480         short iter, pad;
481 } NodeBilateralBlurData;
482
483 typedef struct NodeHueSat {
484         float hue, sat, val;
485 } NodeHueSat;
486
487 typedef struct NodeImageFile {
488         char name[1024]; /* 1024 = FILE_MAX */
489         struct ImageFormatData im_format;
490         int sfra, efra;
491 } NodeImageFile;
492
493 /* XXX first struct fields should match NodeImageFile to ensure forward compatibility */
494 typedef struct NodeImageMultiFile {
495         char base_path[1024];   /* 1024 = FILE_MAX */
496         ImageFormatData format;
497         int sfra DNA_DEPRECATED, efra DNA_DEPRECATED;   /* XXX old frame rand values from NodeImageFile for forward compatibility */
498         int active_input;               /* selected input in details view list */
499         int pad;
500 } NodeImageMultiFile;
501 typedef struct NodeImageMultiFileSocket {
502         /* single layer file output */
503         short use_render_format  DNA_DEPRECATED;
504         short use_node_format;  /* use overall node image format */
505         int pad1;
506         char path[1024];                /* 1024 = FILE_MAX */
507         ImageFormatData format;
508         
509         /* multilayer output */
510         char layer[30];         /* EXR_TOT_MAXNAME-2 ('.' and channel char are appended) */
511         char pad2[2];
512 } NodeImageMultiFileSocket;
513
514 typedef struct NodeChroma {
515         float t1, t2, t3;
516         float fsize, fstrength, falpha;
517         float key[4];
518         short algorithm, channel;
519 } NodeChroma;
520
521 typedef struct NodeTwoXYs {
522         short x1, x2, y1, y2;
523         float fac_x1, fac_x2, fac_y1, fac_y2;
524 } NodeTwoXYs;
525
526 typedef struct NodeTwoFloats {
527         float x, y;
528 } NodeTwoFloats;
529
530 typedef struct NodeGeometry {
531         char uvname[64];        /* MAX_CUSTOMDATA_LAYER_NAME */
532         char colname[64];
533 } NodeGeometry;
534
535 typedef struct NodeVertexCol {
536         char name[64];
537 } NodeVertexCol;
538
539 /* qdn: Defocus blur node */
540 typedef struct NodeDefocus {
541         char bktype, pad_c1, preview, gamco;
542         short samples, no_zbuf;
543         float fstop, maxblur, bthresh, scale;
544         float rotation, pad_f1;
545 } NodeDefocus;
546
547 typedef struct NodeScriptDict {
548         void *dict; /* for PyObject *dict */
549         void *node; /* for BPy_Node *node */
550 } NodeScriptDict;
551
552 /* qdn: glare node */
553 typedef struct NodeGlare {
554         char quality, type, iter;
555         char angle, pad_c1, size, pad[2];
556         float colmod, mix, threshold, fade;
557         float angle_ofs, pad_f1;
558 } NodeGlare;
559
560 /* qdn: tonemap node */
561 typedef struct NodeTonemap {
562         float key, offset, gamma;
563         float f, m, a, c;
564         int type;
565 } NodeTonemap;
566
567 /* qdn: lens distortion node */
568 typedef struct NodeLensDist {
569         short jit, proj, fit, pad;
570 } NodeLensDist;
571
572 typedef struct NodeColorBalance {
573         /* for processing */
574         float slope[3];
575         float offset[3];
576         float power[3];
577         
578         /* for ui representation */
579         float lift[3];
580         float gamma[3];
581         float gain[3];
582
583         /* temp storage for inverted lift */
584         float lift_lgg[3];
585         float gamma_inv[3];
586 } NodeColorBalance;
587
588 typedef struct NodeColorspill {
589         short limchan, unspill;
590         float limscale;
591         float uspillr, uspillg, uspillb;
592 } NodeColorspill;
593
594 typedef struct NodeDilateErode {
595         char falloff;
596         char pad[7];
597 } NodeDilateErode;
598
599 typedef struct NodeMask {
600         int size_x, size_y;
601 } NodeMask;
602
603 typedef struct NodeTexBase {
604         TexMapping tex_mapping;
605         ColorMapping color_mapping;
606 } NodeTexBase;
607
608 typedef struct NodeTexSky {
609         NodeTexBase base;
610         float sun_direction[3];
611         float turbidity;
612 } NodeTexSky;
613
614 typedef struct NodeTexImage {
615         NodeTexBase base;
616         ImageUser iuser;
617         int color_space, pad;
618 } NodeTexImage;
619
620 typedef struct NodeTexChecker {
621         NodeTexBase base;
622 } NodeTexChecker;
623
624 typedef struct NodeTexEnvironment {
625         NodeTexBase base;
626         ImageUser iuser;
627         int color_space, projection;
628 } NodeTexEnvironment;
629
630 typedef struct NodeTexGradient {
631         NodeTexBase base;
632         int gradient_type;
633         int pad;
634 } NodeTexGradient;
635
636 typedef struct NodeTexNoise {
637         NodeTexBase base;
638 } NodeTexNoise;
639
640 typedef struct NodeTexVoronoi {
641         NodeTexBase base;
642         int coloring;
643         int pad;
644 } NodeTexVoronoi;
645
646 typedef struct NodeTexMusgrave {
647         NodeTexBase base;
648         int musgrave_type;
649         int pad;
650 } NodeTexMusgrave;
651
652 typedef struct NodeTexWave {
653         NodeTexBase base;
654         int wave_type;
655         int pad;
656 } NodeTexWave;
657
658 typedef struct NodeTexMagic {
659         NodeTexBase base;
660         int depth;
661         int pad;
662 } NodeTexMagic;
663
664 typedef struct NodeShaderAttribute {
665         char name[64];
666 } NodeShaderAttribute;
667
668 /* TEX_output */
669 typedef struct TexNodeOutput {
670         char name[64];
671 } TexNodeOutput;
672
673 typedef struct NodeKeyingScreenData {
674         char tracking_object[64];
675 } NodeKeyingScreenData;
676
677 typedef struct NodeKeyingData {
678         float screen_balance;
679         float despill_factor;
680         float despill_balance;
681         int edge_kernel_radius;
682         float edge_kernel_tolerance;
683         float clip_black, clip_white;
684         int dilate_distance;
685         int feather_distance;
686         int feather_falloff;
687         int blur_pre, blur_post;
688 } NodeKeyingData;
689
690 typedef struct NodeTrackPosData {
691         char tracking_object[64];
692         char track_name[64];
693 } NodeTrackPosData;
694
695 /* frame node flags */
696 #define NODE_FRAME_SHRINK               1       /* keep the bounding box minimal */
697 #define NODE_FRAME_RESIZEABLE   2       /* test flag, if frame can be resized by user */
698
699 /* comp channel matte */
700 #define CMP_NODE_CHANNEL_MATTE_CS_RGB   1
701 #define CMP_NODE_CHANNEL_MATTE_CS_HSV   2
702 #define CMP_NODE_CHANNEL_MATTE_CS_YUV   3
703 #define CMP_NODE_CHANNEL_MATTE_CS_YCC   4
704
705 /* glossy distributions */
706 #define SHD_GLOSSY_BECKMANN     0
707 #define SHD_GLOSSY_SHARP        1
708 #define SHD_GLOSSY_GGX          2
709
710 /* blend texture */
711 #define SHD_BLEND_LINEAR                        0
712 #define SHD_BLEND_QUADRATIC                     1
713 #define SHD_BLEND_EASING                        2
714 #define SHD_BLEND_DIAGONAL                      3
715 #define SHD_BLEND_RADIAL                        4
716 #define SHD_BLEND_QUADRATIC_SPHERE      5
717 #define SHD_BLEND_SPHERICAL                     6
718
719 /* noise basis for textures */
720 #define SHD_NOISE_PERLIN                        0
721 #define SHD_NOISE_VORONOI_F1            1
722 #define SHD_NOISE_VORONOI_F2            2
723 #define SHD_NOISE_VORONOI_F3            3
724 #define SHD_NOISE_VORONOI_F4            4
725 #define SHD_NOISE_VORONOI_F2_F1         5
726 #define SHD_NOISE_VORONOI_CRACKLE       6
727 #define SHD_NOISE_CELL_NOISE            7
728
729 #define SHD_NOISE_SOFT  0
730 #define SHD_NOISE_HARD  1
731
732 /* voronoi texture */
733 #define SHD_VORONOI_DISTANCE_SQUARED    0
734 #define SHD_VORONOI_ACTUAL_DISTANCE             1
735 #define SHD_VORONOI_MANHATTAN                   2
736 #define SHD_VORONOI_CHEBYCHEV                   3
737 #define SHD_VORONOI_MINKOVSKY_H                 4
738 #define SHD_VORONOI_MINKOVSKY_4                 5
739 #define SHD_VORONOI_MINKOVSKY                   6
740
741 #define SHD_VORONOI_INTENSITY   0
742 #define SHD_VORONOI_CELLS               1
743
744 /* musgrave texture */
745 #define SHD_MUSGRAVE_MULTIFRACTAL                       0
746 #define SHD_MUSGRAVE_FBM                                        1
747 #define SHD_MUSGRAVE_HYBRID_MULTIFRACTAL        2
748 #define SHD_MUSGRAVE_RIDGED_MULTIFRACTAL        3
749 #define SHD_MUSGRAVE_HETERO_TERRAIN                     4
750
751 /* wave texture */
752 #define SHD_WAVE_BANDS          0
753 #define SHD_WAVE_RINGS          1
754
755 #define SHD_WAVE_SINE   0
756 #define SHD_WAVE_SAW    1
757 #define SHD_WAVE_TRI    2
758
759 /* image/environment texture */
760 #define SHD_COLORSPACE_NONE             0
761 #define SHD_COLORSPACE_COLOR    1
762
763 /* environment texture */
764 #define SHD_PROJ_EQUIRECTANGULAR        0
765 #define SHD_PROJ_MIRROR_BALL            1
766
767 /* blur node */
768 #define CMP_NODE_BLUR_ASPECT_NONE               0
769 #define CMP_NODE_BLUR_ASPECT_Y                  1
770 #define CMP_NODE_BLUR_ASPECT_X                  2
771
772 #define CMP_NODE_MASK_MBLUR_SAMPLES_MAX 64
773
774 #endif