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