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