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