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