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