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