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