Directional Blur Node
[blender.git] / source / blender / makesdna / DNA_node_types.h
1 /**
2  * $Id$ 
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2005 Blender Foundation.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 #ifndef DNA_NODE_TYPES_H
31 #define DNA_NODE_TYPES_H
32
33 #include "DNA_ID.h"
34 #include "DNA_vec_types.h"
35 #include "DNA_listBase.h"
36
37 struct ListBase;
38 struct SpaceNode;
39 struct bNodeLink;
40 struct bNodeType;
41 struct bNodeGroup;
42
43 #define NODE_MAXSTR 32
44
45
46 typedef struct bNodeStack {
47         float vec[4];
48         float min, max;                 /* min/max for values (UI writes it, execute might use it) */
49         void *data;
50         short hasinput;                 /* when input has link, tagged before executing */
51         short hasoutput;                /* when output is linked, tagged before executing */
52         short datatype;                 /* type of data pointer */
53         short sockettype;               /* type of socket stack comes from, to remap linking different sockets */
54 } bNodeStack;
55
56 /* ns->datatype, shadetree only */
57 #define NS_OSA_VECTORS          1
58 #define NS_OSA_VALUES           2
59
60 typedef struct bNodeSocket {
61         struct bNodeSocket *next, *prev;
62         
63         char name[32];
64         bNodeStack ns;                          /* custom data for inputs, only UI writes in this */
65         
66         short type, flag;                       /* type is copy from socket type struct */
67         short limit, stack_index;       /* limit for dependency sort, stack_index for exec */
68         short intern;                           /* intern = tag for group nodes */
69         short stack_index_ext;          /* for groups, to find the caller stack index */
70         int pad1;
71         
72         float locx, locy;
73         
74         /* internal data to retrieve relations and groups */
75         
76         int own_index, to_index;        /* group socket identifiers, to find matching pairs after reading files */
77         
78         struct bNodeSocket *tosock;     /* group-node sockets point to the internal group counterpart sockets, set after read file  */
79         struct bNodeLink *link;         /* a link pointer, set in nodeSolveOrder() */
80         
81 } bNodeSocket;
82
83 /* sock->type */
84 #define SOCK_VALUE              0
85 #define SOCK_VECTOR             1
86 #define SOCK_RGBA               2
87
88 /* sock->flag, first bit is select */
89                 /* hidden is user defined, to hide unused */
90 #define SOCK_HIDDEN                             2
91                 /* only used now for groups... */
92 #define SOCK_IN_USE                             4
93                 /* unavailable is for dynamic sockets */
94 #define SOCK_UNAVAIL                    8
95                 /* flag for selection status */
96 #define SOCK_SEL                        16
97 #
98 #
99 typedef struct bNodePreview {
100         float *rect;
101         short xsize, ysize;
102 } bNodePreview;
103
104
105 /* limit data in bNode to what we want to see saved? */
106 typedef struct bNode {
107         struct bNode *next, *prev, *new_node;
108         
109         char name[32];
110         short type, flag;
111         short done, level;              /* both for dependency and sorting */
112         short lasty, menunr;    /* lasty: check preview render status, menunr: browse ID blocks */
113         short stack_index;              /* for groupnode, offset in global caller stack */
114         short nr;                               /* number of this node in list, used for UI exec events */
115         
116         ListBase inputs, outputs;
117         struct ID *id;                  /* optional link to libdata */
118         void *storage;                  /* custom data, must be struct, for storage in file */
119         
120         float locx, locy;               /* root offset for drawing */
121         float width, miniwidth;                 
122         short custom1, custom2; /* to be abused for buttons */
123         
124         short need_exec, exec;  /* need_exec is set as UI execution event, exec is flag during exec */
125         
126         rctf totr;                              /* entire boundbox */
127         rctf butr;                              /* optional buttons area */
128         rctf prvr;                              /* optional preview area */
129         bNodePreview *preview;  /* optional preview image */
130         
131         struct bNodeType *typeinfo;     /* lookup of callbacks and defaults */
132         
133 } bNode;
134
135 /* node->flag */
136 #define NODE_SELECT                     1
137 #define NODE_OPTIONS            2
138 #define NODE_PREVIEW            4
139 #define NODE_HIDDEN                     8
140 #define NODE_ACTIVE                     16
141 #define NODE_ACTIVE_ID          32
142 #define NODE_DO_OUTPUT          64
143 #define NODE_GROUP_EDIT         128
144                 /* free test flag, undefined */
145 #define NODE_TEST                       256
146
147 typedef struct bNodeLink {
148         struct bNodeLink *next, *prev;
149         
150         bNode *fromnode, *tonode;
151         bNodeSocket *fromsock, *tosock;
152         
153 } bNodeLink;
154
155 /* the basis for a Node tree, all links and nodes reside internal here */
156 /* only re-usable node trees are in the library though, materials allocate own tree struct */
157 typedef struct bNodeTree {
158         ID id;
159         
160         ListBase nodes, links;
161         
162         bNodeStack **stack;                             /* stack is only while executing, no read/write in file */
163         
164         int type, init;                                 /* set init on fileread */
165         int stacksize;                                  /* amount of elements in stack */
166         int cur_index;                                  /* sockets in groups have unique identifiers, adding new sockets always 
167                                                                            will increase this counter */
168         ListBase alltypes;                              /* type definitions */
169         struct bNodeType *owntype;              /* for groups or dynamic trees, no read/write */
170
171         /* selected input/output socket */
172         bNodeSocket *selin;
173         bNodeSocket *selout;
174
175         /* callbacks */
176         void (*timecursor)(int nr);
177         void (*stats_draw)(char *str);
178         int (*test_break)(void);
179 } bNodeTree;
180
181 /* ntree->type, index */
182 #define NTREE_SHADER    0
183 #define NTREE_COMPOSIT  1
184
185 /* ntree->init, flag */
186 #define NTREE_TYPE_INIT 1
187 #define NTREE_EXEC_INIT 2
188
189 /* data structs, for node->storage */
190
191 /* this one has been replaced with ImageUser, keep it for do_versions() */
192 typedef struct NodeImageAnim {
193         int frames, sfra, nr;
194         char cyclic, movie;
195         short pad;
196 } NodeImageAnim;
197
198 typedef struct NodeBlurData {
199         short sizex, sizey, samples, maxspeed, minspeed, pad1;
200         float fac;
201         short filtertype;
202         char bokeh, gamma;
203         int pad2;
204 } NodeBlurData;
205
206 typedef struct NodeDBlurData {
207         float center_x, center_y, distance, angle, spin, zoom;
208         short iter;
209         char wrap, pad;
210 } NodeDBlurData;
211
212 typedef struct NodeHueSat {
213         float hue, sat, val;
214 } NodeHueSat;
215
216 typedef struct NodeImageFile {
217         char name[256];
218         short imtype, subimtype, quality, codec;
219         int sfra, efra;
220 } NodeImageFile;
221
222 typedef struct NodeChroma {
223         float t1,t2,t3;
224         float fsize,fstrength,falpha;
225         float key[4];
226 } NodeChroma;
227
228 typedef struct NodeTwoXYs {
229         short x1, x2, y1, y2;
230 } NodeTwoXYs;
231
232 typedef struct NodeGeometry {
233         char uvname[32];
234         char colname[32];
235 } NodeGeometry;
236
237 typedef struct NodeVertexCol {
238         char name[32];
239 } NodeVertexCol;
240
241 /* qdn: Defocus blur node */
242 typedef struct NodeDefocus {
243         char bktype, rotation, preview, gamco;
244         short samples, no_zbuf;
245         float fstop, maxblur, bthresh, scale;
246 } NodeDefocus;
247
248
249 /* qdn: glare node */
250 typedef struct NodeGlare {
251         char quality, type, iter;
252         char angle, angle_ofs, size, pad[2];
253         float colmod, mix, threshold, fade;
254 } NodeGlare;
255
256 /* qdn: tonemap node */
257 typedef struct NodeTonemap {
258         float key, offset, gamma;
259         float f, m, a, c;
260         int type;
261 } NodeTonemap;
262
263 /* qdn: lens distortion node */
264 typedef struct NodeLensDist {
265         short jit, proj, fit, pad;
266 } NodeLensDist;
267
268 #endif