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