Added switch in dilate/erode between old (Step) and new (Distance)
[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 AnimData;
48 struct bGPdata;
49 struct uiBlock;
50 struct Image;
51
52 #define NODE_MAXSTR 64
53
54 typedef struct bNodeStack {
55         float vec[4];
56         float min, max;
57         void *data;
58         short hasinput;                 /* when input has link, tagged before executing */
59         short hasoutput;                /* when output is linked, tagged before executing */
60         short datatype;                 /* type of data pointer */
61         short sockettype;               /* type of socket stack comes from, to remap linking different sockets */
62         short is_copy;                  /* data is a copy of external data (no freeing) */
63         short external;                 /* data is used by external nodes (no freeing) */
64         short pad[2];
65 } bNodeStack;
66
67 /* ns->datatype, shadetree only */
68 #define NS_OSA_VECTORS          1
69 #define NS_OSA_VALUES           2
70
71 /* node socket/node socket type -b conversion rules */
72 #define NS_CR_CENTER            0
73 #define NS_CR_NONE                      1
74 #define NS_CR_FIT_WIDTH         2
75 #define NS_CR_FIT_HEIGHT        3
76 #define NS_CR_FIT                       4
77 #define NS_CR_STRETCH           5
78
79 typedef struct bNodeSocket {
80         struct bNodeSocket *next, *prev, *new_sock;
81         
82         char name[64];  /* MAX_NAME */
83         
84         void *storage;                          /* custom storage */
85         
86         short type, flag;
87         short limit;                            /* max. number of links */
88         short pad1;
89         
90         float locx, locy;
91         
92         void *default_value;            /* default input value used for unlinked sockets */
93         
94         /* execution data */
95         short stack_index;                      /* local stack index */
96         /* XXX deprecated, kept for forward compatibility */
97         short stack_type  DNA_DEPRECATED;
98         int resizemode;                         /* compositor resize mode of the socket */
99         void *cache;                            /* cached data from execution */
100         
101         /* internal data to retrieve relations and groups */
102         int own_index;                          /* group socket identifiers, to find matching pairs after reading files */
103         /* XXX deprecated, only used for restoring old group node links */
104         int to_index  DNA_DEPRECATED;
105         struct bNodeSocket *groupsock;
106         
107         struct bNodeLink *link;         /* a link pointer, set in ntreeUpdateTree */
108
109         /* XXX deprecated, socket input values are stored in default_value now. kept for forward compatibility */
110         bNodeStack ns  DNA_DEPRECATED;  /* custom data for inputs, only UI writes in this */
111 } bNodeSocket;
112
113 /* sock->type */
114 #define SOCK_FLOAT                      0
115 #define SOCK_VECTOR                     1
116 #define SOCK_RGBA                       2
117 #define SOCK_SHADER                     3
118 #define SOCK_BOOLEAN            4
119 #define SOCK_MESH                       5
120 #define SOCK_INT                        6
121 #define NUM_SOCKET_TYPES        7       /* must be last! */
122
123 /* socket side (input/output) */
124 #define SOCK_IN         1
125 #define SOCK_OUT        2
126
127 /* sock->flag, first bit is select */
128         /* hidden is user defined, to hide unused */
129 #define SOCK_HIDDEN                             2
130         /* only used now for groups... */
131 #define SOCK_IN_USE                             4       /* XXX deprecated */
132         /* unavailable is for dynamic sockets */
133 #define SOCK_UNAVAIL                    8
134         /* dynamic socket (can be modified by user) */
135 #define SOCK_DYNAMIC                    16
136         /* group socket should not be exposed */
137 #define SOCK_INTERNAL                   32
138         /* socket collapsed in UI */
139 #define SOCK_COLLAPSED                  64
140         /* hide socket value, if it gets auto default */
141 #define SOCK_HIDE_VALUE                 128
142         /* socket hidden automatically, to distinguish from manually hidden */
143         /* DEPRECATED, only kept here to avoid reusing the flag */
144 #define SOCK_AUTO_HIDDEN__DEPRECATED    256
145
146 typedef struct bNodePreview {
147         unsigned char *rect;
148         short xsize, ysize;
149         int pad;
150 } bNodePreview;
151
152 /* limit data in bNode to what we want to see saved? */
153 typedef struct bNode {
154         struct bNode *next, *prev, *new_node;
155         
156         char name[64];  /* MAX_NAME */
157         short type, flag;
158         short done, level;              /* both for dependency and sorting */
159         short lasty, menunr;    /* lasty: check preview render status, menunr: browse ID blocks */
160         short stack_index;              /* for groupnode, offset in global caller stack */
161         short nr;                               /* number of this node in list, used for UI exec events */
162         
163         ListBase inputs, outputs;
164         struct bNode *parent;   /* parent node */
165         struct ID *id;                  /* optional link to libdata */
166         void *storage;                  /* custom data, must be struct, for storage in file */
167         
168         float locx, locy;               /* root offset for drawing */
169         float width, height;    /* node custom width and height */
170         float miniwidth;                /* node width if hidden */
171         
172         int update;                             /* update flags */
173         
174         char label[64];                 /* custom user-defined label, MAX_NAME */
175         short custom1, custom2; /* to be abused for buttons */
176         float custom3, custom4;
177         
178         short need_exec, exec;  /* need_exec is set as UI execution event, exec is flag during exec */
179         void *threaddata;               /* optional extra storage for use in thread (read only then!) */
180         
181         rctf totr;                              /* entire boundbox */
182         rctf butr;                              /* optional buttons area */
183         rctf prvr;                              /* optional preview area */
184         bNodePreview *preview;  /* optional preview image */
185         struct uiBlock *block;  /* runtime during drawing */
186         
187         struct bNodeType *typeinfo;     /* lookup of callbacks and defaults */
188 } bNode;
189
190 /* node->flag */
191 #define NODE_SELECT                     1
192 #define NODE_OPTIONS            2
193 #define NODE_PREVIEW            4
194 #define NODE_HIDDEN                     8
195 #define NODE_ACTIVE                     16
196 #define NODE_ACTIVE_ID          32
197 #define NODE_DO_OUTPUT          64
198 #define NODE_GROUP_EDIT         128
199         /* free test flag, undefined */
200 #define NODE_TEST                       256
201         /* node is disabled */
202 #define NODE_MUTED                      512
203 #define NODE_CUSTOM_NAME        1024    /* deprecated! */
204         /* group node types: use const outputs by default */
205 #define NODE_CONST_OUTPUT       (1<<11)
206         /* node is always behind others */
207 #define NODE_BACKGROUND         (1<<12)
208         /* automatic flag for nodes included in transforms */
209 #define NODE_TRANSFORM          (1<<13)
210         /* node is active texture */
211 #define NODE_ACTIVE_TEXTURE     (1<<14)
212
213 /* node->update */
214 /* XXX NODE_UPDATE is a generic update flag. More fine-grained updates
215  * might be used in the future, but currently all work the same way.
216  */
217 #define NODE_UPDATE                     0xFFFF  /* generic update flag (includes all others) */
218 #define NODE_UPDATE_ID          1               /* associated id data block has changed */
219
220 typedef struct bNodeLink {
221         struct bNodeLink *next, *prev;
222         
223         bNode *fromnode, *tonode;
224         bNodeSocket *fromsock, *tosock;
225         
226         int flag;
227         int pad;
228 } bNodeLink;
229
230 /* link->flag */
231 #define NODE_LINKFLAG_HILITE    1               /* link has been successfully validated */
232 #define NODE_LINK_VALID                 2
233
234 /* tree->edit_quality/tree->render_quality */
235 #define NTREE_QUALITY_HIGH    0
236 #define NTREE_QUALITY_MEDIUM  1
237 #define NTREE_QUALITY_LOW     2
238
239 /* the basis for a Node tree, all links and nodes reside internal here */
240 /* only re-usable node trees are in the library though, materials and textures allocate own tree struct */
241 typedef struct bNodeTree {
242         ID id;
243         struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */ 
244         
245         struct bGPdata *gpd;            /* grease pencil data */
246         
247         ListBase nodes, links;
248         
249         int type, init;                                 /* set init on fileread */
250         int cur_index;                                  /* sockets in groups have unique identifiers, adding new sockets always 
251                                                                          * will increase this counter */
252         int flag;
253         int update;                                             /* update flags */
254         
255         int nodetype;                                   /* specific node type this tree is used for */
256
257         short edit_quality;                             /* Quality setting when editing */
258         short render_quality;                           /* Quality setting when rendering */
259         int chunksize;                                  /* tile size for compositor engine */
260         
261         ListBase inputs, outputs;               /* external sockets for group nodes */
262         
263         /* execution data */
264         /* XXX It would be preferable to completely move this data out of the underlying node tree,
265          * so node tree execution could finally run independent of the tree itself. This would allow node trees
266          * to be merely linked by other data (materials, textures, etc.), as ID data is supposed to.
267          * Execution data is generated from the tree once at execution start and can then be used
268          * as long as necessary, even while the tree is being modified.
269          */
270         struct bNodeTreeExec *execdata;
271         
272         /* callbacks */
273         void (*progress)(void *, float progress);
274         void (*stats_draw)(void *, char *str);
275         int (*test_break)(void *);
276         void *tbh, *prh, *sdh;
277         
278 } bNodeTree;
279
280 /* ntree->type, index */
281 #define NTREE_SHADER            0
282 #define NTREE_COMPOSIT          1
283 #define NTREE_TEXTURE           2
284 #define NUM_NTREE_TYPES         3
285
286 /* ntree->init, flag */
287 #define NTREE_TYPE_INIT         1
288
289 /* ntree->flag */
290 #define NTREE_DS_EXPAND         1       /* for animation editors */
291 #define NTREE_COM_OPENCL        2       /* use opencl */
292 /* XXX not nice, but needed as a temporary flags
293  * for group updates after library linking.
294  */
295 #define NTREE_DO_VERSIONS_GROUP_EXPOSE  1024
296
297 /* ntree->update */
298 #define NTREE_UPDATE                    0xFFFF  /* generic update flag (includes all others) */
299 #define NTREE_UPDATE_LINKS              1               /* links have been added or removed */
300 #define NTREE_UPDATE_NODES              2               /* nodes or sockets have been added or removed */
301 #define NTREE_UPDATE_GROUP_IN   16              /* group inputs have changed */
302 #define NTREE_UPDATE_GROUP_OUT  32              /* group outputs have changed */
303 #define NTREE_UPDATE_GROUP              48              /* group has changed (generic flag including all other group flags) */
304
305
306 /* socket value structs for input buttons */
307
308 typedef struct bNodeSocketValueInt {
309         int subtype;                            /* RNA subtype */
310         int value;
311         int min, max;
312 } bNodeSocketValueInt;
313
314 typedef struct bNodeSocketValueFloat {
315         int subtype;                            /* RNA subtype */
316         float value;
317         float min, max;
318 } bNodeSocketValueFloat;
319
320 typedef struct bNodeSocketValueBoolean {
321         char value;
322         char pad[3];
323 } bNodeSocketValueBoolean;
324
325 typedef struct bNodeSocketValueVector {
326         int subtype;                            /* RNA subtype */
327         float value[3];
328         float min, max;
329 } bNodeSocketValueVector;
330
331 typedef struct bNodeSocketValueRGBA {
332         float value[4];
333 } bNodeSocketValueRGBA;
334
335
336 /* data structs, for node->storage */
337
338 #define CMP_NODE_MASKTYPE_ADD           0
339 #define CMP_NODE_MASKTYPE_SUBTRACT      1
340 #define CMP_NODE_MASKTYPE_MULTIPLY      2
341 #define CMP_NODE_MASKTYPE_NOT           3
342
343 #define CMP_NODE_LENSFLARE_GHOST   1
344 #define CMP_NODE_LENSFLARE_GLOW    2
345 #define CMP_NODE_LENSFLARE_CIRCLE  4
346 #define CMP_NODE_LENSFLARE_STREAKS 8
347
348 #define CMP_NODE_DILATEERODE_STEP     0
349 #define CMP_NODE_DILATEERODE_DISTANCE 1
350
351 /* this one has been replaced with ImageUser, keep it for do_versions() */
352 typedef struct NodeImageAnim {
353         int frames, sfra, nr;
354         char cyclic, movie;
355         short pad;
356 } NodeImageAnim;
357
358 typedef struct ColorCorrectionData {
359         float saturation;
360         float contrast;
361         float gamma;
362         float gain;
363         float lift;
364         int pad;
365 } ColorCorrectionData;
366
367 typedef struct NodeColorCorrection {
368         ColorCorrectionData master;
369         ColorCorrectionData shadows;
370         ColorCorrectionData midtones;
371         ColorCorrectionData highlights;
372         float startmidtones;
373         float endmidtones;
374 } NodeColorCorrection;
375
376 typedef struct NodeBokehImage {
377         float angle;
378         int flaps;
379         float rounding;
380         float catadioptric;
381         float lensshift;
382 } NodeBokehImage;
383
384 typedef struct NodeBoxMask {
385         float x;
386         float y;
387         float rotation;
388         float height;
389         float width;
390         int pad;
391 } NodeBoxMask;
392
393 typedef struct NodeEllipseMask {
394         float x;
395         float y;
396         float rotation;
397         float height;
398         float width;
399         int pad;
400 } NodeEllipseMask;
401
402 /* layer info for image node outputs */
403 typedef struct NodeImageLayer {
404         /* index in the Image->layers->passes lists */
405         int pass_index;
406         /* render pass flag, in case this is an original render pass */
407         int pass_flag;
408 } NodeImageLayer;
409
410 typedef struct NodeBlurData {
411         short sizex, sizey;
412         short samples, maxspeed, minspeed, relative, aspect;
413         short curved;
414         float fac, percentx, percenty;
415         short filtertype;
416         char bokeh, gamma;
417         int image_in_width, image_in_height; /* needed for absolute/relative conversions */
418 } NodeBlurData;
419
420 typedef struct NodeDBlurData {
421         float center_x, center_y, distance, angle, spin, zoom;
422         short iter;
423         char wrap, pad;
424 } NodeDBlurData;
425
426 typedef struct NodeBilateralBlurData {
427         float sigma_color, sigma_space;
428         short iter, pad;
429 } NodeBilateralBlurData;
430
431 typedef struct NodeHueSat {
432         float hue, sat, val;
433 } NodeHueSat;
434
435 typedef struct NodeImageFile {
436         char name[1024]; /* 1024 = FILE_MAX */
437         struct ImageFormatData im_format;
438         int sfra, efra;
439 } NodeImageFile;
440
441 /* XXX first struct fields should match NodeImageFile to ensure forward compatibility */
442 typedef struct NodeImageMultiFile {
443         char base_path[1024];   /* 1024 = FILE_MAX */
444         ImageFormatData format;
445         int sfra DNA_DEPRECATED, efra DNA_DEPRECATED;   /* XXX old frame rand values from NodeImageFile for forward compatibility */
446         int active_input;               /* selected input in details view list */
447         int pad;
448 } NodeImageMultiFile;
449 typedef struct NodeImageMultiFileSocket {
450         /* single layer file output */
451         short use_render_format  DNA_DEPRECATED;
452         short use_node_format;  /* use overall node image format */
453         int pad1;
454         char path[1024];                /* 1024 = FILE_MAX */
455         ImageFormatData format;
456         
457         /* multilayer output */
458         char layer[30];         /* EXR_TOT_MAXNAME-2 ('.' and channel char are appended) */
459         char pad2[2];
460 } NodeImageMultiFileSocket;
461
462 typedef struct NodeChroma {
463         float t1, t2, t3;
464         float fsize, fstrength, falpha;
465         float key[4];
466         short algorithm, channel;
467 } NodeChroma;
468
469 typedef struct NodeTwoXYs {
470         short x1, x2, y1, y2;
471         float fac_x1, fac_x2, fac_y1, fac_y2;
472 } NodeTwoXYs;
473
474 typedef struct NodeTwoFloats {
475         float x, y;
476 } NodeTwoFloats;
477
478 typedef struct NodeGeometry {
479         char uvname[64];        /* MAX_CUSTOMDATA_LAYER_NAME */
480         char colname[64];
481 } NodeGeometry;
482
483 typedef struct NodeVertexCol {
484         char name[64];
485 } NodeVertexCol;
486
487 /* qdn: Defocus blur node */
488 typedef struct NodeDefocus {
489         char bktype, pad_c1, preview, gamco;
490         short samples, no_zbuf;
491         float fstop, maxblur, bthresh, scale;
492         float rotation, pad_f1;
493 } NodeDefocus;
494
495 typedef struct NodeScriptDict {
496         void *dict; /* for PyObject *dict */
497         void *node; /* for BPy_Node *node */
498 } NodeScriptDict;
499
500 /* qdn: glare node */
501 typedef struct NodeGlare {
502         char quality, type, iter;
503         char angle, pad_c1, size, pad[2];
504         float colmod, mix, threshold, fade;
505         float angle_ofs, pad_f1;
506 } NodeGlare;
507
508 /* qdn: tonemap node */
509 typedef struct NodeTonemap {
510         float key, offset, gamma;
511         float f, m, a, c;
512         int type;
513 } NodeTonemap;
514
515 /* qdn: lens distortion node */
516 typedef struct NodeLensDist {
517         short jit, proj, fit, pad;
518 } NodeLensDist;
519
520 typedef struct NodeColorBalance {
521         /* for processing */
522         float slope[3];
523         float offset[3];
524         float power[3];
525         
526         /* for ui representation */
527         float lift[3];
528         float gamma[3];
529         float gain[3];
530
531         /* temp storage for inverted lift */
532         float lift_lgg[3];
533         float gamma_inv[3];
534 } NodeColorBalance;
535
536 typedef struct NodeColorspill {
537         short limchan, unspill;
538         float limscale;
539         float uspillr, uspillg, uspillb;
540 } NodeColorspill;
541
542 typedef struct NodeTexBase {
543         TexMapping tex_mapping;
544         ColorMapping color_mapping;
545 } NodeTexBase;
546
547 typedef struct NodeTexSky {
548         NodeTexBase base;
549         float sun_direction[3];
550         float turbidity;
551 } NodeTexSky;
552
553 typedef struct NodeTexImage {
554         NodeTexBase base;
555         int color_space, pad;
556 } NodeTexImage;
557
558 typedef struct NodeTexChecker {
559         NodeTexBase base;
560 } NodeTexChecker;
561
562 typedef struct NodeTexEnvironment {
563         NodeTexBase base;
564         int color_space, projection;
565 } NodeTexEnvironment;
566
567 typedef struct NodeTexGradient {
568         NodeTexBase base;
569         int gradient_type;
570         int pad;
571 } NodeTexGradient;
572
573 typedef struct NodeTexNoise {
574         NodeTexBase base;
575 } NodeTexNoise;
576
577 typedef struct NodeTexVoronoi {
578         NodeTexBase base;
579         int coloring;
580         int pad;
581 } NodeTexVoronoi;
582
583 typedef struct NodeTexMusgrave {
584         NodeTexBase base;
585         int musgrave_type;
586         int pad;
587 } NodeTexMusgrave;
588
589 typedef struct NodeTexWave {
590         NodeTexBase base;
591         int wave_type;
592         int pad;
593 } NodeTexWave;
594
595 typedef struct NodeTexMagic {
596         NodeTexBase base;
597         int depth;
598         int pad;
599 } NodeTexMagic;
600
601 typedef struct NodeShaderAttribute {
602         char name[64];
603 } NodeShaderAttribute;
604
605 /* TEX_output */
606 typedef struct TexNodeOutput {
607         char name[64];
608 } TexNodeOutput;
609
610 /* comp channel matte */
611 #define CMP_NODE_CHANNEL_MATTE_CS_RGB   1
612 #define CMP_NODE_CHANNEL_MATTE_CS_HSV   2
613 #define CMP_NODE_CHANNEL_MATTE_CS_YUV   3
614 #define CMP_NODE_CHANNEL_MATTE_CS_YCC   4
615
616 /* glossy distributions */
617 #define SHD_GLOSSY_BECKMANN     0
618 #define SHD_GLOSSY_SHARP        1
619 #define SHD_GLOSSY_GGX          2
620
621 /* blend texture */
622 #define SHD_BLEND_LINEAR                        0
623 #define SHD_BLEND_QUADRATIC                     1
624 #define SHD_BLEND_EASING                        2
625 #define SHD_BLEND_DIAGONAL                      3
626 #define SHD_BLEND_RADIAL                        4
627 #define SHD_BLEND_QUADRATIC_SPHERE      5
628 #define SHD_BLEND_SPHERICAL                     6
629
630 /* noise basis for textures */
631 #define SHD_NOISE_PERLIN                        0
632 #define SHD_NOISE_VORONOI_F1            1
633 #define SHD_NOISE_VORONOI_F2            2
634 #define SHD_NOISE_VORONOI_F3            3
635 #define SHD_NOISE_VORONOI_F4            4
636 #define SHD_NOISE_VORONOI_F2_F1         5
637 #define SHD_NOISE_VORONOI_CRACKLE       6
638 #define SHD_NOISE_CELL_NOISE            7
639
640 #define SHD_NOISE_SOFT  0
641 #define SHD_NOISE_HARD  1
642
643 /* voronoi texture */
644 #define SHD_VORONOI_DISTANCE_SQUARED    0
645 #define SHD_VORONOI_ACTUAL_DISTANCE             1
646 #define SHD_VORONOI_MANHATTAN                   2
647 #define SHD_VORONOI_CHEBYCHEV                   3
648 #define SHD_VORONOI_MINKOVSKY_H                 4
649 #define SHD_VORONOI_MINKOVSKY_4                 5
650 #define SHD_VORONOI_MINKOVSKY                   6
651
652 #define SHD_VORONOI_INTENSITY   0
653 #define SHD_VORONOI_CELLS               1
654
655 /* musgrave texture */
656 #define SHD_MUSGRAVE_MULTIFRACTAL                       0
657 #define SHD_MUSGRAVE_FBM                                        1
658 #define SHD_MUSGRAVE_HYBRID_MULTIFRACTAL        2
659 #define SHD_MUSGRAVE_RIDGED_MULTIFRACTAL        3
660 #define SHD_MUSGRAVE_HETERO_TERRAIN                     4
661
662 /* wave texture */
663 #define SHD_WAVE_BANDS          0
664 #define SHD_WAVE_RINGS          1
665
666 #define SHD_WAVE_SINE   0
667 #define SHD_WAVE_SAW    1
668 #define SHD_WAVE_TRI    2
669
670 /* image/environment texture */
671 #define SHD_COLORSPACE_NONE             0
672 #define SHD_COLORSPACE_COLOR    1
673
674 /* environment texture */
675 #define SHD_PROJ_EQUIRECTANGULAR        0
676 #define SHD_PROJ_MIRROR_BALL            1
677
678 /* blur node */
679 #define CMP_NODE_BLUR_ASPECT_NONE               0
680 #define CMP_NODE_BLUR_ASPECT_Y                  1
681 #define CMP_NODE_BLUR_ASPECT_X                  2
682
683 #endif