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