Merge branch 'master' into blender2.8
[blender.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 bNodeLink;
44 struct bNodeType;
45 struct bNodeTreeExec;
46 struct bNodePreview;
47 struct bNodeInstanceHash;
48 struct AnimData;
49 struct bGPdata;
50 struct uiBlock;
51 struct Image;
52
53 /* In writefile.c: write deprecated DNA data,
54  * to ensure forward compatibility in 2.6x versions.
55  * Will be removed eventually.
56  */
57 #define USE_NODE_COMPAT_CUSTOMNODES
58
59 #define NODE_MAXSTR 64
60
61 typedef struct bNodeStack {
62         float vec[4];
63         float min, max;
64         void *data;
65         short hasinput;                 /* when input has link, tagged before executing */
66         short hasoutput;                /* when output is linked, tagged before executing */
67         short datatype;                 /* type of data pointer */
68         short sockettype;               /* type of socket stack comes from, to remap linking different sockets */
69         short is_copy;                  /* data is a copy of external data (no freeing) */
70         short external;                 /* data is used by external nodes (no freeing) */
71         short pad[2];
72 } bNodeStack;
73
74 /* ns->datatype, shadetree only */
75 #define NS_OSA_VECTORS          1
76 #define NS_OSA_VALUES           2
77
78 /* node socket/node socket type -b conversion rules */
79 #define NS_CR_CENTER            0
80 #define NS_CR_NONE                      1
81 #define NS_CR_FIT_WIDTH         2
82 #define NS_CR_FIT_HEIGHT        3
83 #define NS_CR_FIT                       4
84 #define NS_CR_STRETCH           5
85
86 typedef struct bNodeSocket {
87         struct bNodeSocket *next, *prev, *new_sock;
88         
89         IDProperty *prop;                       /* user-defined properties */
90         
91         char identifier[64];            /* unique identifier for mapping */
92         
93         char name[64];  /* MAX_NAME */
94         
95         /* XXX deprecated, only used for the Image and OutputFile nodes,
96          * should be removed at some point.
97          */
98         void *storage;                          /* custom storage */
99         
100         short type, flag;
101         short limit;                            /* max. number of links */
102         short in_out;                           /* input/output type */
103         struct bNodeSocketType *typeinfo;       /* runtime type information */
104         char idname[64];                        /* runtime type identifier */
105         
106         float locx, locy;
107         
108         void *default_value;            /* default input value used for unlinked sockets */
109         
110         /* execution data */
111         short stack_index;                      /* local stack index */
112         /* XXX deprecated, kept for forward compatibility */
113         short stack_type  DNA_DEPRECATED;
114         int pad;
115         
116         void *cache;                            /* cached data from execution */
117         
118         /* internal data to retrieve relations and groups
119          * DEPRECATED, now uses the generic identifier string instead
120          */
121         int own_index  DNA_DEPRECATED;  /* group socket identifiers, to find matching pairs after reading files */
122         /* XXX deprecated, only used for restoring old group node links */
123         int to_index  DNA_DEPRECATED;
124         /* XXX deprecated, still forward compatible since verification restores pointer from matching own_index. */
125         struct bNodeSocket *groupsock  DNA_DEPRECATED;
126         
127         struct bNodeLink *link;         /* a link pointer, set in ntreeUpdateTree */
128
129         /* XXX deprecated, socket input values are stored in default_value now. kept for forward compatibility */
130         bNodeStack ns  DNA_DEPRECATED;  /* custom data for inputs, only UI writes in this */
131 } bNodeSocket;
132
133 /* sock->type */
134 typedef enum eNodeSocketDatatype {
135         SOCK_CUSTOM                     = -1,   /* socket has no integer type */
136         SOCK_FLOAT                      = 0,
137         SOCK_VECTOR                     = 1,
138         SOCK_RGBA                       = 2,
139         SOCK_SHADER                     = 3,
140         SOCK_BOOLEAN            = 4,
141         __SOCK_MESH                     = 5,    /* deprecated */
142         SOCK_INT                        = 6,
143         SOCK_STRING                     = 7
144 } eNodeSocketDatatype;
145
146 /* socket side (input/output) */
147 typedef enum eNodeSocketInOut {
148         SOCK_IN = 1,
149         SOCK_OUT = 2
150 } eNodeSocketInOut;
151
152 /* sock->flag, first bit is select */
153 typedef enum eNodeSocketFlag {
154         SOCK_HIDDEN = 2,                                        /* hidden is user defined, to hide unused */
155         SOCK_IN_USE = 4,                                        /* for quick check if socket is linked */
156         SOCK_UNAVAIL = 8,                                       /* unavailable is for dynamic sockets */
157         // SOCK_DYNAMIC = 16,                           /* DEPRECATED  dynamic socket (can be modified by user) */
158         // SOCK_INTERNAL = 32,                          /* DEPRECATED  group socket should not be exposed */
159         SOCK_COLLAPSED = 64,                            /* socket collapsed in UI */
160         SOCK_HIDE_VALUE = 128,                          /* hide socket value, if it gets auto default */
161         SOCK_AUTO_HIDDEN__DEPRECATED = 256,     /* socket hidden automatically, to distinguish from manually hidden */
162         SOCK_NO_INTERNAL_LINK = 512
163 } eNodeSocketFlag;
164
165 /* limit data in bNode to what we want to see saved? */
166 typedef struct bNode {
167         struct bNode *next, *prev, *new_node;
168
169         IDProperty *prop;               /* user-defined properties */
170         
171         struct bNodeType *typeinfo;     /* runtime type information */
172         char idname[64];                        /* runtime type identifier */
173         
174         char name[64];  /* MAX_NAME */
175         int flag;
176         short type, pad;
177         short done, level;              /* both for dependency and sorting */
178         short lasty, menunr;    /* lasty: check preview render status, menunr: browse ID blocks */
179         short stack_index;              /* for groupnode, offset in global caller stack */
180         short nr;                               /* number of this node in list, used for UI exec events */
181         float color[3];                 /* custom user-defined color */
182         
183         ListBase inputs, outputs;
184         struct bNode *parent;   /* parent node */
185         struct ID *id;                  /* optional link to libdata */
186         void *storage;                  /* custom data, must be struct, for storage in file */
187         struct bNode *original; /* the original node in the tree (for localized tree) */
188         ListBase internal_links; /* list of cached internal links (input to output), for muted nodes and operators */
189         
190         float locx, locy;               /* root offset for drawing (parent space) */
191         float width, height;    /* node custom width and height */
192         float miniwidth;                /* node width if hidden */
193         float offsetx, offsety; /* additional offset from loc */
194         float anim_init_locx;   /* initial locx for insert offset animation */
195         float anim_ofsx;                /* offset that will be added to locx for insert offset animation */
196         
197         int update;                             /* update flags */
198         
199         char label[64];                 /* custom user-defined label, MAX_NAME */
200         short custom1, custom2; /* to be abused for buttons */
201         float custom3, custom4;
202
203         short need_exec, exec;  /* need_exec is set as UI execution event, exec is flag during exec */
204         void *threaddata;               /* optional extra storage for use in thread (read only then!) */
205         rctf totr;                              /* entire boundbox (worldspace) */
206         rctf butr;                              /* optional buttons area */
207         rctf prvr;                              /* optional preview area */
208         /* XXX TODO
209          * Node totr size depends on the prvr size, which in turn is determined from preview size.
210          * In earlier versions bNodePreview was stored directly in nodes, but since now there can be
211          * multiple instances using different preview images it is possible that required node size varies between instances.
212          * preview_xsize, preview_ysize defines a common reserved size for preview rect for now,
213          * could be replaced by more accurate node instance drawing, but that requires removing totr from DNA
214          * and replacing all uses with per-instance data.
215          */
216         short preview_xsize, preview_ysize;     /* reserved size of the preview rect */
217         short pad2[2];
218         struct uiBlock *block;  /* runtime during drawing */
219
220         float ssr_id; /* XXX: eevee only, id of screen space reflection layer, needs to be a float to feed GPU_uniform. */
221         float pad3;
222 } bNode;
223
224 /* node->flag */
225 #define NODE_SELECT                     1
226 #define NODE_OPTIONS            2
227 #define NODE_PREVIEW            4
228 #define NODE_HIDDEN                     8
229 #define NODE_ACTIVE                     16
230 #define NODE_ACTIVE_ID          32
231 #define NODE_DO_OUTPUT          64
232 #define __NODE_GROUP_EDIT       128             /* DEPRECATED */
233         /* free test flag, undefined */
234 #define NODE_TEST                       256
235         /* node is disabled */
236 #define NODE_MUTED                      512
237 // #define NODE_CUSTOM_NAME     1024    /* deprecated! */
238         /* group node types: use const outputs by default */
239 #define NODE_CONST_OUTPUT       (1<<11)
240         /* node is always behind others */
241 #define NODE_BACKGROUND         (1<<12)
242         /* automatic flag for nodes included in transforms */
243 #define NODE_TRANSFORM          (1<<13)
244         /* node is active texture */
245
246         /* note: take care with this flag since its possible it gets
247          * `stuck` inside/outside the active group - which makes buttons
248          * window texture not update, we try to avoid it by clearing the
249          * flag when toggling group editing - Campbell */
250 #define NODE_ACTIVE_TEXTURE     (1<<14)
251         /* use a custom color for the node */
252 #define NODE_CUSTOM_COLOR       (1<<15)
253         /* Node has been initialized
254          * This flag indicates the node->typeinfo->init function has been called.
255          * In case of undefined type at creation time this can be delayed until
256          * until the node type is registered.
257          */
258 #define NODE_INIT                       (1<<16)
259
260         /* do recalc of output, used to skip recalculation of unwanted
261          * composite out nodes when editing tree
262          */
263 #define NODE_DO_OUTPUT_RECALC   (1<<17)
264
265 /* node->update */
266 /* XXX NODE_UPDATE is a generic update flag. More fine-grained updates
267  * might be used in the future, but currently all work the same way.
268  */
269 #define NODE_UPDATE                     0xFFFF  /* generic update flag (includes all others) */
270 #define NODE_UPDATE_ID          1               /* associated id data block has changed */
271 #define NODE_UPDATE_OPERATOR            2               /* node update triggered from update operator */
272
273 /* Unique hash key for identifying node instances
274  * Defined as a struct because DNA does not support other typedefs.
275  */
276 typedef struct bNodeInstanceKey {
277         unsigned int value;
278 } bNodeInstanceKey;
279
280 /* Base struct for entries in node instance hash.
281  * WARNING: pointers are cast to this struct internally,
282  * it must be first member in hash entry structs!
283  */
284 typedef struct bNodeInstanceHashEntry {
285         bNodeInstanceKey key;
286         
287         /* tags for cleaning the cache */
288         short tag;
289         short pad;
290 } bNodeInstanceHashEntry;
291
292
293 typedef struct bNodePreview {
294         bNodeInstanceHashEntry hash_entry;      /* must be first */
295         
296         unsigned char *rect;
297         short xsize, ysize;
298         int pad;
299 } bNodePreview;
300
301
302 typedef struct bNodeLink {
303         struct bNodeLink *next, *prev;
304         
305         bNode *fromnode, *tonode;
306         bNodeSocket *fromsock, *tosock;
307         
308         int flag;
309         int pad;
310 } bNodeLink;
311
312 /* link->flag */
313 #define NODE_LINKFLAG_HILITE    1               /* link has been successfully validated */
314 #define NODE_LINK_VALID                 2
315 #define NODE_LINK_TEST                  4               /* free test flag, undefined */
316
317 /* tree->edit_quality/tree->render_quality */
318 #define NTREE_QUALITY_HIGH    0
319 #define NTREE_QUALITY_MEDIUM  1
320 #define NTREE_QUALITY_LOW     2
321
322 /* tree->chunksize */
323 #define NTREE_CHUNCKSIZE_32 32
324 #define NTREE_CHUNCKSIZE_64 64
325 #define NTREE_CHUNCKSIZE_128 128
326 #define NTREE_CHUNCKSIZE_256 256
327 #define NTREE_CHUNCKSIZE_512 512
328 #define NTREE_CHUNCKSIZE_1024 1024
329
330 /* the basis for a Node tree, all links and nodes reside internal here */
331 /* only re-usable node trees are in the library though, materials and textures allocate own tree struct */
332 typedef struct bNodeTree {
333         ID id;
334         struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */ 
335         
336         struct bNodeTreeType *typeinfo; /* runtime type information */
337         char idname[64];                                /* runtime type identifier */
338         
339         struct StructRNA *interface_type;       /* runtime RNA type of the group interface */
340         
341         struct bGPdata *gpd;            /* grease pencil data */
342         float view_center[2];           /* node tree stores own offset for consistent editor view */
343         
344         ListBase nodes, links;
345         
346         int type, init;                                 /* set init on fileread */
347         int cur_index;                                  /* sockets in groups have unique identifiers, adding new sockets always 
348                                                                          * will increase this counter */
349         int flag;
350         int update;                                             /* update flags */
351         short is_updating;                              /* flag to prevent reentrant update calls */
352         short done;                                             /* generic temporary flag for recursion check (DFS/BFS) */
353         int pad2;
354         
355         int nodetype DNA_DEPRECATED;    /* specific node type this tree is used for */
356
357         short edit_quality;                             /* Quality setting when editing */
358         short render_quality;                           /* Quality setting when rendering */
359         int chunksize;                                  /* tile size for compositor engine */
360         
361         rctf viewer_border;
362         
363         /* Lists of bNodeSocket to hold default values and own_index.
364          * Warning! Don't make links to these sockets, input/output nodes are used for that.
365          * These sockets are used only for generating external interfaces.
366          */
367         ListBase inputs, outputs;
368         
369         /* Node preview hash table
370          * Only available in base node trees (e.g. scene->node_tree)
371          */
372         struct bNodeInstanceHash *previews;
373         /* Defines the node tree instance to use for the "active" context,
374          * in case multiple different editors are used and make context ambiguous.
375          */
376         bNodeInstanceKey active_viewer_key;
377         int pad;
378         
379         /* execution data */
380         /* XXX It would be preferable to completely move this data out of the underlying node tree,
381          * so node tree execution could finally run independent of the tree itself. This would allow node trees
382          * to be merely linked by other data (materials, textures, etc.), as ID data is supposed to.
383          * Execution data is generated from the tree once at execution start and can then be used
384          * as long as necessary, even while the tree is being modified.
385          */
386         struct bNodeTreeExec *execdata;
387         
388         /* callbacks */
389         void (*progress)(void *, float progress);
390         /** \warning may be called by different threads */
391         void (*stats_draw)(void *, const char *str);
392         int (*test_break)(void *);
393         void (*update_draw)(void *);
394         void *tbh, *prh, *sdh, *udh;
395
396         void *duplilock;
397         
398 } bNodeTree;
399
400 /* ntree->type, index */
401 #define NTREE_CUSTOM            -1              /* for dynamically registered custom types */
402 #define NTREE_SHADER            0
403 #define NTREE_COMPOSIT          1
404 #define NTREE_TEXTURE           2
405
406 /* ntree->init, flag */
407 #define NTREE_TYPE_INIT         1
408
409 /* ntree->flag */
410 #define NTREE_DS_EXPAND                         1       /* for animation editors */
411 #define NTREE_COM_OPENCL                        2       /* use opencl */
412 #define NTREE_TWO_PASS                          4       /* two pass */
413 #define NTREE_COM_GROUPNODE_BUFFER      8       /* use groupnode buffers */
414 #define NTREE_VIEWER_BORDER                     16      /* use a border for viewer nodes */
415 #define NTREE_IS_LOCALIZED                      32      /* tree is localized copy, free when deleting node groups */
416
417 /* XXX not nice, but needed as a temporary flags
418  * for group updates after library linking.
419  */
420 #define NTREE_DO_VERSIONS_GROUP_EXPOSE_2_56_2   1024    /* changes from r35033 */
421 #define NTREE_DO_VERSIONS_CUSTOMNODES_GROUP             2048    /* custom_nodes branch: remove links to node tree sockets */
422 #define NTREE_DO_VERSIONS_CUSTOMNODES_GROUP_CREATE_INTERFACE    4096    /* custom_nodes branch: create group input/output nodes */
423
424 /* ntree->update */
425 typedef enum eNodeTreeUpdate {
426         NTREE_UPDATE            = 0xFFFF,       /* generic update flag (includes all others) */
427         NTREE_UPDATE_LINKS      = 1,            /* links have been added or removed */
428         NTREE_UPDATE_NODES      = 2,            /* nodes or sockets have been added or removed */
429         NTREE_UPDATE_GROUP_IN   = 16,           /* group inputs have changed */
430         NTREE_UPDATE_GROUP_OUT  = 32,           /* group outputs have changed */
431         NTREE_UPDATE_GROUP      = 48            /* group has changed (generic flag including all other group flags) */
432 } eNodeTreeUpdate;
433
434
435 /* socket value structs for input buttons
436  * DEPRECATED now using ID properties
437  */
438
439 typedef struct bNodeSocketValueInt {
440         int subtype;                            /* RNA subtype */
441         int value;
442         int min, max;
443 } bNodeSocketValueInt;
444
445 typedef struct bNodeSocketValueFloat {
446         int subtype;                            /* RNA subtype */
447         float value;
448         float min, max;
449 } bNodeSocketValueFloat;
450
451 typedef struct bNodeSocketValueBoolean {
452         char value;
453         char pad[3];
454 } bNodeSocketValueBoolean;
455
456 typedef struct bNodeSocketValueVector {
457         int subtype;                            /* RNA subtype */
458         float value[3];
459         float min, max;
460 } bNodeSocketValueVector;
461
462 typedef struct bNodeSocketValueRGBA {
463         float value[4];
464 } bNodeSocketValueRGBA;
465
466 typedef struct bNodeSocketValueString {
467         int subtype;
468         int pad;
469         char value[1024];       /* 1024 = FILEMAX */
470 } bNodeSocketValueString;
471
472 /* data structs, for node->storage */
473 enum {
474         CMP_NODE_MASKTYPE_ADD         = 0,
475         CMP_NODE_MASKTYPE_SUBTRACT    = 1,
476         CMP_NODE_MASKTYPE_MULTIPLY    = 2,
477         CMP_NODE_MASKTYPE_NOT         = 3
478 };
479
480 enum {
481         CMP_NODE_LENSFLARE_GHOST   = 1,
482         CMP_NODE_LENSFLARE_GLOW    = 2,
483         CMP_NODE_LENSFLARE_CIRCLE  = 4,
484         CMP_NODE_LENSFLARE_STREAKS = 8
485 };
486
487 enum {
488         CMP_NODE_DILATEERODE_STEP             = 0,
489         CMP_NODE_DILATEERODE_DISTANCE_THRESH  = 1,
490         CMP_NODE_DILATEERODE_DISTANCE         = 2,
491         CMP_NODE_DILATEERODE_DISTANCE_FEATHER = 3
492 };
493
494 enum {
495         CMP_NODE_INPAINT_SIMPLE               = 0
496 };
497
498 enum {
499         CMP_NODEFLAG_MASK_AA          = (1 << 0),
500         CMP_NODEFLAG_MASK_NO_FEATHER  = (1 << 1),
501         CMP_NODEFLAG_MASK_MOTION_BLUR = (1 << 2),
502
503         /* we may want multiple aspect options, exposed as an rna enum */
504         CMP_NODEFLAG_MASK_FIXED       = (1 << 8),
505         CMP_NODEFLAG_MASK_FIXED_SCENE = (1 << 9)
506 };
507
508 enum {
509         CMP_NODEFLAG_BLUR_VARIABLE_SIZE = (1 << 0),
510         CMP_NODEFLAG_BLUR_EXTEND_BOUNDS = (1 << 1),
511 };
512
513 typedef struct NodeFrame {
514         short flag;
515         short label_size;
516 } NodeFrame;
517
518 /* this one has been replaced with ImageUser, keep it for do_versions() */
519 typedef struct NodeImageAnim {
520         int frames   DNA_DEPRECATED;
521         int sfra     DNA_DEPRECATED;
522         int nr       DNA_DEPRECATED;
523         char cyclic  DNA_DEPRECATED;
524         char movie   DNA_DEPRECATED;
525         short pad;
526 } NodeImageAnim;
527
528 typedef struct ColorCorrectionData {
529         float saturation;
530         float contrast;
531         float gamma;
532         float gain;
533         float lift;
534         int pad;
535 } ColorCorrectionData;
536
537 typedef struct NodeColorCorrection {
538         ColorCorrectionData master;
539         ColorCorrectionData shadows;
540         ColorCorrectionData midtones;
541         ColorCorrectionData highlights;
542         float startmidtones;
543         float endmidtones;
544 } NodeColorCorrection;
545
546 typedef struct NodeBokehImage {
547         float angle;
548         int flaps;
549         float rounding;
550         float catadioptric;
551         float lensshift;
552 } NodeBokehImage;
553
554 typedef struct NodeBoxMask {
555         float x;
556         float y;
557         float rotation;
558         float height;
559         float width;
560         int pad;
561 } NodeBoxMask;
562
563 typedef struct NodeEllipseMask {
564         float x;
565         float y;
566         float rotation;
567         float height;
568         float width;
569         int pad;
570 } NodeEllipseMask;
571
572 /* layer info for image node outputs */
573 typedef struct NodeImageLayer {
574         /* index in the Image->layers->passes lists */
575         int pass_index  DNA_DEPRECATED;
576         /* render pass name */
577         char pass_name[64]; /* amount defined in openexr_multi.h */
578 } NodeImageLayer;
579
580 typedef struct NodeBlurData {
581         short sizex, sizey;
582         short samples, maxspeed, minspeed, relative, aspect;
583         short curved;
584         float fac, percentx, percenty;
585         short filtertype;
586         char bokeh, gamma;
587         int image_in_width, image_in_height; /* needed for absolute/relative conversions */
588 } NodeBlurData;
589
590 typedef struct NodeDBlurData {
591         float center_x, center_y, distance, angle, spin, zoom;
592         short iter;
593         char wrap, pad;
594 } NodeDBlurData;
595
596 typedef struct NodeBilateralBlurData {
597         float sigma_color, sigma_space;
598         short iter, pad;
599 } NodeBilateralBlurData;
600
601 /* NOTE: Only for do-version code. */
602 typedef struct NodeHueSat {
603         float hue, sat, val;
604 } NodeHueSat;
605
606 typedef struct NodeImageFile {
607         char name[1024]; /* 1024 = FILE_MAX */
608         struct ImageFormatData im_format;
609         int sfra, efra;
610 } NodeImageFile;
611
612 /* XXX first struct fields should match NodeImageFile to ensure forward compatibility */
613 typedef struct NodeImageMultiFile {
614         char base_path[1024];   /* 1024 = FILE_MAX */
615         ImageFormatData format;
616         int sfra DNA_DEPRECATED, efra DNA_DEPRECATED;   /* XXX old frame rand values from NodeImageFile for forward compatibility */
617         int active_input;               /* selected input in details view list */
618         int pad;
619 } NodeImageMultiFile;
620 typedef struct NodeImageMultiFileSocket {
621         /* single layer file output */
622         short use_render_format  DNA_DEPRECATED;
623         short use_node_format;  /* use overall node image format */
624         int pad1;
625         char path[1024];                /* 1024 = FILE_MAX */
626         ImageFormatData format;
627         
628         /* multilayer output */
629         char layer[30];         /* EXR_TOT_MAXNAME-2 ('.' and channel char are appended) */
630         char pad2[2];
631 } NodeImageMultiFileSocket;
632
633 typedef struct NodeChroma {
634         float t1, t2, t3;
635         float fsize, fstrength, falpha;
636         float key[4];
637         short algorithm, channel;
638 } NodeChroma;
639
640 typedef struct NodeTwoXYs {
641         short x1, x2, y1, y2;
642         float fac_x1, fac_x2, fac_y1, fac_y2;
643 } NodeTwoXYs;
644
645 typedef struct NodeTwoFloats {
646         float x, y;
647 } NodeTwoFloats;
648
649 typedef struct NodeGeometry {
650         char uvname[64];        /* MAX_CUSTOMDATA_LAYER_NAME */
651         char colname[64];
652 } NodeGeometry;
653
654 typedef struct NodeVertexCol {
655         char name[64];
656 } NodeVertexCol;
657
658 /* qdn: Defocus blur node */
659 typedef struct NodeDefocus {
660         char bktype, pad_c1, preview, gamco;
661         short samples, no_zbuf;
662         float fstop, maxblur, bthresh, scale;
663         float rotation, pad_f1;
664 } NodeDefocus;
665
666 typedef struct NodeScriptDict {
667         void *dict; /* for PyObject *dict */
668         void *node; /* for BPy_Node *node */
669 } NodeScriptDict;
670
671 /* qdn: glare node */
672 typedef struct NodeGlare {
673         char quality, type, iter;
674         /* XXX angle is only kept for backward/forward compatibility, was used for two different things, see T50736. */
675         char angle DNA_DEPRECATED, pad_c1, size, star_45, streaks;
676         float colmod, mix, threshold, fade;
677         float angle_ofs, pad_f1;
678 } NodeGlare;
679
680 /* qdn: tonemap node */
681 typedef struct NodeTonemap {
682         float key, offset, gamma;
683         float f, m, a, c;
684         int type;
685 } NodeTonemap;
686
687 /* qdn: lens distortion node */
688 typedef struct NodeLensDist {
689         short jit, proj, fit, pad;
690 } NodeLensDist;
691
692 typedef struct NodeColorBalance {
693         /* ASC CDL parameters */
694         float slope[3];
695         float offset[3];
696         float power[3];
697         float offset_basis;
698         char _pad[4];
699         
700         /* LGG parameters */
701         float lift[3];
702         float gamma[3];
703         float gain[3];
704 } NodeColorBalance;
705
706 typedef struct NodeColorspill {
707         short limchan, unspill;
708         float limscale;
709         float uspillr, uspillg, uspillb;
710 } NodeColorspill;
711
712 typedef struct NodeDilateErode {
713         char falloff;
714         char pad[7];
715 } NodeDilateErode;
716
717 typedef struct NodeMask {
718         int size_x, size_y;
719 } NodeMask;
720
721 typedef struct NodeTexBase {
722         TexMapping tex_mapping;
723         ColorMapping color_mapping;
724 } NodeTexBase;
725
726 typedef struct NodeTexSky {
727         NodeTexBase base;
728         int sky_model;
729         float sun_direction[3];
730         float turbidity;
731         float ground_albedo;
732 } NodeTexSky;
733
734 typedef struct NodeTexImage {
735         NodeTexBase base;
736         ImageUser iuser;
737         int color_space;
738         int projection;
739         float projection_blend;
740         int interpolation;
741         int extension;
742         int pad;
743 } NodeTexImage;
744
745 typedef struct NodeTexChecker {
746         NodeTexBase base;
747 } NodeTexChecker;
748
749 typedef struct NodeTexBrick {
750         NodeTexBase base;
751         int offset_freq, squash_freq;
752         float offset, squash;
753 } NodeTexBrick;
754
755 typedef struct NodeTexEnvironment {
756         NodeTexBase base;
757         ImageUser iuser;
758         int color_space;
759         int projection;
760         int interpolation;
761         int pad;
762 } NodeTexEnvironment;
763
764 typedef struct NodeTexGradient {
765         NodeTexBase base;
766         int gradient_type;
767         int pad;
768 } NodeTexGradient;
769
770 typedef struct NodeTexNoise {
771         NodeTexBase base;
772 } NodeTexNoise;
773
774 typedef struct NodeTexVoronoi {
775         NodeTexBase base;
776         int coloring;
777         int pad;
778 } NodeTexVoronoi;
779
780 typedef struct NodeTexMusgrave {
781         NodeTexBase base;
782         int musgrave_type;
783         int pad;
784 } NodeTexMusgrave;
785
786 typedef struct NodeTexWave {
787         NodeTexBase base;
788         int wave_type;
789         int wave_profile;
790 } NodeTexWave;
791
792 typedef struct NodeTexMagic {
793         NodeTexBase base;
794         int depth;
795         int pad;
796 } NodeTexMagic;
797
798 typedef struct NodeShaderAttribute {
799         char name[64];
800 } NodeShaderAttribute;
801
802 typedef struct NodeShaderVectTransform {
803         int type;
804         int convert_from, convert_to;
805         int pad;
806 } NodeShaderVectTransform;
807
808 typedef struct NodeShaderTexPointDensity {
809         NodeTexBase base;
810         short point_source, pad;
811         int particle_system;
812         float radius;
813         int resolution;
814         short space;
815         short interpolation;
816         short color_source;
817         short ob_color_source;
818         char vertex_attribute_name[64]; /* vertex attribute layer for color source, MAX_CUSTOMDATA_LAYER_NAME */
819         /* Used at runtime only by sampling RNA API. */
820         PointDensity pd;
821         int cached_resolution;
822         int pad2;
823 } NodeShaderTexPointDensity;
824
825 /* TEX_output */
826 typedef struct TexNodeOutput {
827         char name[64];
828 } TexNodeOutput;
829
830 typedef struct NodeKeyingScreenData {
831         char tracking_object[64];
832 } NodeKeyingScreenData;
833
834 typedef struct NodeKeyingData {
835         float screen_balance;
836         float despill_factor;
837         float despill_balance;
838         int edge_kernel_radius;
839         float edge_kernel_tolerance;
840         float clip_black, clip_white;
841         int dilate_distance;
842         int feather_distance;
843         int feather_falloff;
844         int blur_pre, blur_post;
845 } NodeKeyingData;
846
847 typedef struct NodeTrackPosData {
848         char tracking_object[64];
849         char track_name[64];
850 } NodeTrackPosData;
851
852 typedef struct NodeTranslateData {
853         char wrap_axis;
854         char relative;
855         char pad[6];
856 } NodeTranslateData;
857
858 typedef struct NodePlaneTrackDeformData {
859         char tracking_object[64];
860         char plane_track_name[64];
861         char flag;
862         char motion_blur_samples;
863         char pad[2];
864         float motion_blur_shutter;
865 } NodePlaneTrackDeformData;
866
867 typedef struct NodeShaderScript {
868         int mode;
869         int flag;
870
871         char filepath[1024]; /* 1024 = FILE_MAX */
872
873         char bytecode_hash[64];
874         char *bytecode;
875 } NodeShaderScript;
876
877 typedef struct NodeShaderTangent {
878         int direction_type;
879         int axis;
880         char uv_map[64];
881 } NodeShaderTangent;
882
883 typedef struct NodeShaderNormalMap {
884         int space;
885         char uv_map[64];
886 } NodeShaderNormalMap;
887
888 typedef struct NodeShaderUVMap {
889         char uv_map[64];
890 } NodeShaderUVMap;
891
892 typedef struct NodeSunBeams {
893         float source[2];
894
895         float ray_length;
896 } NodeSunBeams;
897
898 /* script node mode */
899 #define NODE_SCRIPT_INTERNAL            0
900 #define NODE_SCRIPT_EXTERNAL            1
901
902 /* script node flag */
903 #define NODE_SCRIPT_AUTO_UPDATE         1
904
905
906 /* frame node flags */
907 #define NODE_FRAME_SHRINK               1       /* keep the bounding box minimal */
908 #define NODE_FRAME_RESIZEABLE   2       /* test flag, if frame can be resized by user */
909
910 /* proxy node flags */
911 #define NODE_PROXY_AUTOTYPE                     1       /* automatically change output type based on link */
912
913 /* comp channel matte */
914 #define CMP_NODE_CHANNEL_MATTE_CS_RGB   1
915 #define CMP_NODE_CHANNEL_MATTE_CS_HSV   2
916 #define CMP_NODE_CHANNEL_MATTE_CS_YUV   3
917 #define CMP_NODE_CHANNEL_MATTE_CS_YCC   4
918
919 /* glossy distributions */
920 #define SHD_GLOSSY_BECKMANN                             0
921 #define SHD_GLOSSY_SHARP                                1
922 #define SHD_GLOSSY_GGX                                  2
923 #define SHD_GLOSSY_ASHIKHMIN_SHIRLEY                    3
924 #define SHD_GLOSSY_MULTI_GGX                            4
925
926 /* vector transform */
927 #define SHD_VECT_TRANSFORM_TYPE_VECTOR  0
928 #define SHD_VECT_TRANSFORM_TYPE_POINT   1
929 #define SHD_VECT_TRANSFORM_TYPE_NORMAL  2
930
931 #define SHD_VECT_TRANSFORM_SPACE_WORLD  0
932 #define SHD_VECT_TRANSFORM_SPACE_OBJECT 1
933 #define SHD_VECT_TRANSFORM_SPACE_CAMERA 2
934
935 /* toon modes */
936 #define SHD_TOON_DIFFUSE        0
937 #define SHD_TOON_GLOSSY         1
938
939 /* hair components */
940 #define SHD_HAIR_REFLECTION             0
941 #define SHD_HAIR_TRANSMISSION           1
942
943 /* blend texture */
944 #define SHD_BLEND_LINEAR                        0
945 #define SHD_BLEND_QUADRATIC                     1
946 #define SHD_BLEND_EASING                        2
947 #define SHD_BLEND_DIAGONAL                      3
948 #define SHD_BLEND_RADIAL                        4
949 #define SHD_BLEND_QUADRATIC_SPHERE      5
950 #define SHD_BLEND_SPHERICAL                     6
951
952 /* noise basis for textures */
953 #define SHD_NOISE_PERLIN                        0
954 #define SHD_NOISE_VORONOI_F1            1
955 #define SHD_NOISE_VORONOI_F2            2
956 #define SHD_NOISE_VORONOI_F3            3
957 #define SHD_NOISE_VORONOI_F4            4
958 #define SHD_NOISE_VORONOI_F2_F1         5
959 #define SHD_NOISE_VORONOI_CRACKLE       6
960 #define SHD_NOISE_CELL_NOISE            7
961
962 #define SHD_NOISE_SOFT  0
963 #define SHD_NOISE_HARD  1
964
965 /* voronoi texture */
966 #define SHD_VORONOI_DISTANCE_SQUARED    0
967 #define SHD_VORONOI_ACTUAL_DISTANCE             1
968 #define SHD_VORONOI_MANHATTAN                   2
969 #define SHD_VORONOI_CHEBYCHEV                   3
970 #define SHD_VORONOI_MINKOVSKY_H                 4
971 #define SHD_VORONOI_MINKOVSKY_4                 5
972 #define SHD_VORONOI_MINKOVSKY                   6
973
974 #define SHD_VORONOI_INTENSITY   0
975 #define SHD_VORONOI_CELLS               1
976
977 /* musgrave texture */
978 #define SHD_MUSGRAVE_MULTIFRACTAL                       0
979 #define SHD_MUSGRAVE_FBM                                        1
980 #define SHD_MUSGRAVE_HYBRID_MULTIFRACTAL        2
981 #define SHD_MUSGRAVE_RIDGED_MULTIFRACTAL        3
982 #define SHD_MUSGRAVE_HETERO_TERRAIN                     4
983
984 /* wave texture */
985 #define SHD_WAVE_BANDS          0
986 #define SHD_WAVE_RINGS          1
987
988 #define SHD_WAVE_PROFILE_SIN    0
989 #define SHD_WAVE_PROFILE_SAW    1
990
991 /* sky texture */
992 #define SHD_SKY_OLD             0
993 #define SHD_SKY_NEW             1
994
995 /* image/environment texture */
996 #define SHD_COLORSPACE_NONE             0
997 #define SHD_COLORSPACE_COLOR    1
998
999 /* environment texture */
1000 #define SHD_PROJ_EQUIRECTANGULAR        0
1001 #define SHD_PROJ_MIRROR_BALL            1
1002
1003 #define SHD_IMAGE_EXTENSION_REPEAT      0
1004 #define SHD_IMAGE_EXTENSION_EXTEND      1
1005 #define SHD_IMAGE_EXTENSION_CLIP        2
1006
1007 /* image texture */
1008 #define SHD_PROJ_FLAT                           0
1009 #define SHD_PROJ_BOX                            1
1010 #define SHD_PROJ_SPHERE                         2
1011 #define SHD_PROJ_TUBE                           3
1012
1013 /* image texture interpolation */
1014 #define SHD_INTERP_LINEAR               0
1015 #define SHD_INTERP_CLOSEST              1
1016 #define SHD_INTERP_CUBIC                        2
1017 #define SHD_INTERP_SMART                        3
1018
1019 /* tangent */
1020 #define SHD_TANGENT_RADIAL                      0
1021 #define SHD_TANGENT_UVMAP                       1
1022
1023 /* tangent */
1024 #define SHD_TANGENT_AXIS_X                      0
1025 #define SHD_TANGENT_AXIS_Y                      1
1026 #define SHD_TANGENT_AXIS_Z                      2
1027
1028 /* normal map space */
1029 #define SHD_NORMAL_MAP_TANGENT                  0
1030 #define SHD_NORMAL_MAP_OBJECT                   1
1031 #define SHD_NORMAL_MAP_WORLD                    2
1032 #define SHD_NORMAL_MAP_BLENDER_OBJECT   3
1033 #define SHD_NORMAL_MAP_BLENDER_WORLD    4
1034
1035 /* math node clamp */
1036 #define SHD_MATH_CLAMP          1
1037
1038 /* Math node operation/ */
1039 enum {
1040         NODE_MATH_ADD     = 0,
1041         NODE_MATH_SUB     = 1,
1042         NODE_MATH_MUL     = 2,
1043         NODE_MATH_DIVIDE  = 3,
1044         NODE_MATH_SIN     = 4,
1045         NODE_MATH_COS     = 5,
1046         NODE_MATH_TAN     = 6,
1047         NODE_MATH_ASIN    = 7,
1048         NODE_MATH_ACOS    = 8,
1049         NODE_MATH_ATAN    = 9,
1050         NODE_MATH_POW     = 10,
1051         NODE_MATH_LOG     = 11,
1052         NODE_MATH_MIN     = 12,
1053         NODE_MATH_MAX     = 13,
1054         NODE_MATH_ROUND   = 14,
1055         NODE_MATH_LESS    = 15,
1056         NODE_MATH_GREATER = 16,
1057         NODE_MATH_MOD     = 17,
1058         NODE_MATH_ABS     = 18,
1059 };
1060
1061 /* mix rgb node flags */
1062 #define SHD_MIXRGB_USE_ALPHA    1
1063 #define SHD_MIXRGB_CLAMP        2
1064
1065 /* subsurface */
1066 enum {
1067 #ifdef DNA_DEPRECATED
1068         SHD_SUBSURFACE_COMPATIBLE               = 0, // Deprecated
1069 #endif
1070         SHD_SUBSURFACE_CUBIC                    = 1,
1071         SHD_SUBSURFACE_GAUSSIAN                 = 2,
1072         SHD_SUBSURFACE_BURLEY                   = 3,
1073 };
1074
1075 /* blur node */
1076 #define CMP_NODE_BLUR_ASPECT_NONE               0
1077 #define CMP_NODE_BLUR_ASPECT_Y                  1
1078 #define CMP_NODE_BLUR_ASPECT_X                  2
1079
1080 /* wrapping */
1081 #define CMP_NODE_WRAP_NONE              0
1082 #define CMP_NODE_WRAP_X                 1
1083 #define CMP_NODE_WRAP_Y                 2
1084 #define CMP_NODE_WRAP_XY                3
1085
1086 #define CMP_NODE_MASK_MBLUR_SAMPLES_MAX 64
1087
1088 /* geometry output socket defines */
1089 #define GEOM_OUT_GLOB   0
1090 #define GEOM_OUT_LOCAL  1
1091 #define GEOM_OUT_VIEW   2
1092 #define GEOM_OUT_ORCO   3
1093 #define GEOM_OUT_UV             4
1094 #define GEOM_OUT_NORMAL 5
1095 #define GEOM_OUT_VCOL   6
1096 #define GEOM_OUT_VCOL_ALPHA     7
1097 #define GEOM_OUT_FRONTBACK      8
1098
1099 /* material input socket defines */
1100 #define MAT_IN_COLOR    0
1101 #define MAT_IN_SPEC             1
1102 #define MAT_IN_REFL             2
1103 #define MAT_IN_NORMAL   3
1104 #define MAT_IN_MIR              4
1105 #define MAT_IN_AMB              5
1106 #define MAT_IN_EMIT     6
1107 #define MAT_IN_SPECTRA  7
1108 #define MAT_IN_RAY_MIRROR       8
1109 #define MAT_IN_ALPHA    9
1110 #define MAT_IN_TRANSLUCENCY     10
1111 #define NUM_MAT_IN              11      /* for array size */
1112
1113 /* material output socket defines */
1114 #define MAT_OUT_COLOR           0
1115 #define MAT_OUT_ALPHA           1
1116 #define MAT_OUT_NORMAL  2
1117 #define MAT_OUT_DIFFUSE 3
1118 #define MAT_OUT_SPEC            4
1119 #define MAT_OUT_AO              5
1120
1121 /* image */
1122 #define CMP_NODE_IMAGE_USE_STRAIGHT_OUTPUT      1
1123
1124 /* viewer and cmposite output */
1125 #define CMP_NODE_OUTPUT_IGNORE_ALPHA            1
1126
1127 /* Plane track deform node */
1128 enum {
1129         CMP_NODEFLAG_PLANETRACKDEFORM_MOTION_BLUR = 1,
1130 };
1131
1132 /* Stabilization node */
1133 enum {
1134         CMP_NODEFLAG_STABILIZE_INVERSE = 1,
1135 };
1136
1137 #define CMP_NODE_PLANETRACKDEFORM_MBLUR_SAMPLES_MAX 64
1138
1139 /* Point Density shader node */
1140
1141 enum {
1142         SHD_POINTDENSITY_SOURCE_PSYS = 0,
1143         SHD_POINTDENSITY_SOURCE_OBJECT = 1,
1144 };
1145
1146 enum {
1147         SHD_POINTDENSITY_SPACE_OBJECT = 0,
1148         SHD_POINTDENSITY_SPACE_WORLD  = 1,
1149 };
1150
1151 enum {
1152         SHD_POINTDENSITY_COLOR_PARTAGE   = 1,
1153         SHD_POINTDENSITY_COLOR_PARTSPEED = 2,
1154         SHD_POINTDENSITY_COLOR_PARTVEL   = 3,
1155 };
1156
1157 enum {
1158         SHD_POINTDENSITY_COLOR_VERTCOL      = 0,
1159         SHD_POINTDENSITY_COLOR_VERTWEIGHT   = 1,
1160         SHD_POINTDENSITY_COLOR_VERTNOR      = 2,
1161 };
1162
1163 #endif