== file browser ==
[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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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): Bob Holcomb, Xavier Thomas
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 #ifndef DNA_NODE_TYPES_H
31 #define DNA_NODE_TYPES_H
32
33 /** \file DNA_node_types.h
34  *  \ingroup DNA
35  */
36
37 #include "DNA_ID.h"
38 #include "DNA_vec_types.h"
39 #include "DNA_listBase.h"
40
41 struct ListBase;
42 struct SpaceNode;
43 struct bNodeLink;
44 struct bNodeType;
45 struct bNodeGroup;
46 struct AnimData;
47 struct bGPdata;
48 struct uiBlock;
49
50 #define NODE_MAXSTR 32
51
52
53 typedef struct bNodeStack {
54         float vec[4];
55         float min, max;                 /* min/max for values (UI writes it, execute might use it) */
56         void *data;
57         short hasinput;                 /* when input has link, tagged before executing */
58         short hasoutput;                /* when output is linked, tagged before executing */
59         short datatype;                 /* type of data pointer */
60         short sockettype;               /* type of socket stack comes from, to remap linking different sockets */
61 } bNodeStack;
62
63 /* ns->datatype, shadetree only */
64 #define NS_OSA_VECTORS          1
65 #define NS_OSA_VALUES           2
66
67 typedef struct bNodeSocket {
68         struct bNodeSocket *next, *prev, *new_sock;
69         
70         char name[32];
71         bNodeStack ns;                          /* custom data for inputs, only UI writes in this */
72         
73         short type, flag;
74         short limit;                            /* max. number of links */
75         
76         /* stack data info (only during execution!) */
77         short stack_type;                       /* type of stack reference */
78         /* XXX only one of stack_ptr or stack_index is used (depending on stack_type).
79          * could store the index in the pointer with SET_INT_IN_POINTER (a bit ugly).
80          * (union won't work here, not supported by DNA)
81          */
82         struct bNodeStack *stack_ptr;   /* constant input value */
83         short stack_index;                      /* local stack index or external input number */
84         short pad1;
85         
86         float locx, locy;
87         
88         /* internal data to retrieve relations and groups */
89         
90         int own_index;                          /* group socket identifiers, to find matching pairs after reading files */
91         struct bNodeSocket *groupsock;
92         int to_index;                           /* XXX deprecated, only used for restoring old group node links */
93         int pad2;
94         
95         struct bNodeLink *link;         /* a link pointer, set in nodeSolveOrder() */
96 } bNodeSocket;
97
98 /* sock->type */
99 #define SOCK_VALUE              0
100 #define SOCK_VECTOR             1
101 #define SOCK_RGBA               2
102
103 /* sock->flag, first bit is select */
104                 /* hidden is user defined, to hide unused */
105 #define SOCK_HIDDEN                             2
106                 /* only used now for groups... */
107 #define SOCK_IN_USE                             4
108                 /* unavailable is for dynamic sockets */
109 #define SOCK_UNAVAIL                    8
110
111 /* sock->stack_type */
112 #define SOCK_STACK_LOCAL                1       /* part of the local tree stack */
113 #define SOCK_STACK_EXTERN               2       /* use input stack pointer */
114 #define SOCK_STACK_CONST                3       /* use pointer to constant input value */
115
116 typedef struct bNodePreview {
117         unsigned char *rect;
118         short xsize, ysize;
119         int pad;
120 } bNodePreview;
121
122
123 /* limit data in bNode to what we want to see saved? */
124 typedef struct bNode {
125         struct bNode *next, *prev, *new_node;
126         
127         char name[32];
128         short type, flag;
129         short done, level;              /* both for dependency and sorting */
130         short lasty, menunr;    /* lasty: check preview render status, menunr: browse ID blocks */
131         short stack_index;              /* for groupnode, offset in global caller stack */
132         short nr;                               /* number of this node in list, used for UI exec events */
133         
134         ListBase inputs, outputs;
135         struct ID *id;                  /* optional link to libdata */
136         void *storage;                  /* custom data, must be struct, for storage in file */
137         
138         float locx, locy;               /* root offset for drawing */
139         float width, miniwidth;
140         char label[32];                 /* custom user-defined label */
141         short custom1, custom2; /* to be abused for buttons */
142         float custom3, custom4;
143         
144         short need_exec, exec;  /* need_exec is set as UI execution event, exec is flag during exec */
145         void *threaddata;               /* optional extra storage for use in thread (read only then!) */
146         
147         rctf totr;                              /* entire boundbox */
148         rctf butr;                              /* optional buttons area */
149         rctf prvr;                              /* optional preview area */
150         bNodePreview *preview;  /* optional preview image */
151         struct uiBlock *block;  /* runtime during drawing */
152         
153         struct bNodeType *typeinfo;     /* lookup of callbacks and defaults */
154         
155 } bNode;
156
157 /* node->flag */
158 #define NODE_SELECT                     1
159 #define NODE_OPTIONS            2
160 #define NODE_PREVIEW            4
161 #define NODE_HIDDEN                     8
162 #define NODE_ACTIVE                     16
163 #define NODE_ACTIVE_ID          32
164 #define NODE_DO_OUTPUT          64
165 #define NODE_GROUP_EDIT         128
166                 /* free test flag, undefined */
167 #define NODE_TEST                       256
168                 /* composite: don't do node but pass on buffer(s) */
169 #define NODE_MUTED                      512
170 #define NODE_CUSTOM_NAME                1024    /* deprecated! */
171
172 typedef struct bNodeLink {
173         struct bNodeLink *next, *prev;
174         
175         bNode *fromnode, *tonode;
176         bNodeSocket *fromsock, *tosock;
177         
178         int flag, pad;
179         
180 } bNodeLink;
181
182 /* the basis for a Node tree, all links and nodes reside internal here */
183 /* only re-usable node trees are in the library though, materials and textures allocate own tree struct */
184 typedef struct bNodeTree {
185         ID id;
186         struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */ 
187         
188         struct bGPdata *gpd;            /* grease pencil data */
189         
190         ListBase nodes, links;
191         
192         bNodeStack *stack;                              /* stack is only while executing, no read/write in file */
193         struct ListBase *threadstack;   /* same as above */
194         
195         int type, init;                                 /* set init on fileread */
196         int stacksize;                                  /* amount of elements in stack */
197         int cur_index;                                  /* sockets in groups have unique identifiers, adding new sockets always 
198                                                                            will increase this counter */
199         int flag, pad;                                  
200         
201         ListBase alltypes;                              /* type definitions */
202         ListBase inputs, outputs;               /* external sockets for group nodes */
203
204         int pad2[2];
205         
206         /* callbacks */
207         void (*progress)(void *, float progress);
208         void (*stats_draw)(void *, char *str);
209         int (*test_break)(void *);
210         void *tbh, *prh, *sdh;
211         
212 } bNodeTree;
213
214 /* ntree->type, index */
215 #define NTREE_SHADER    0
216 #define NTREE_COMPOSIT  1
217 #define NTREE_TEXTURE   2
218
219 /* ntree->init, flag */
220 #define NTREE_TYPE_INIT 1
221 #define NTREE_EXEC_INIT 2
222
223 /* ntree->flag */
224 #define NTREE_DS_EXPAND         1       /* for animation editors */
225 /* XXX not nice, but needed as a temporary flag
226  * for group updates after library linking.
227  */
228 #define NTREE_DO_VERSIONS       1024
229
230 /* data structs, for node->storage */
231
232 /* this one has been replaced with ImageUser, keep it for do_versions() */
233 typedef struct NodeImageAnim {
234         int frames, sfra, nr;
235         char cyclic, movie;
236         short pad;
237 } NodeImageAnim;
238
239 typedef struct NodeBlurData {
240         short sizex, sizey;
241         short samples, maxspeed, minspeed, relative, aspect;
242         short curved;
243         float fac, percentx, percenty;
244         short filtertype;
245         char bokeh, gamma;
246         int image_in_width, image_in_height; /* needed for absolute/relative conversions */
247 } NodeBlurData;
248
249 typedef struct NodeDBlurData {
250         float center_x, center_y, distance, angle, spin, zoom;
251         short iter;
252         char wrap, pad;
253 } NodeDBlurData;
254
255 typedef struct NodeBilateralBlurData {
256         float sigma_color, sigma_space;
257         short iter, pad;
258 } NodeBilateralBlurData;
259
260 typedef struct NodeHueSat {
261         float hue, sat, val;
262 } NodeHueSat;
263
264 typedef struct NodeImageFile {
265         char name[256];
266         short imtype, subimtype, quality, codec;
267         int sfra, efra;
268 } NodeImageFile;
269
270 typedef struct NodeChroma {
271         float t1,t2,t3;
272         float fsize,fstrength,falpha;
273         float key[4];
274    short algorithm, channel;
275 } NodeChroma;
276
277 typedef struct NodeTwoXYs {
278         short x1, x2, y1, y2;
279    float fac_x1, fac_x2, fac_y1, fac_y2;
280 } NodeTwoXYs;
281
282 typedef struct NodeTwoFloats {
283         float x, y;
284 } NodeTwoFloats;
285
286 typedef struct NodeGeometry {
287         char uvname[32];
288         char colname[32];
289 } NodeGeometry;
290
291 typedef struct NodeVertexCol {
292         char name[32];
293 } NodeVertexCol;
294
295 /* qdn: Defocus blur node */
296 typedef struct NodeDefocus {
297         char bktype, rotation, preview, gamco;
298         short samples, no_zbuf;
299         float fstop, maxblur, bthresh, scale;
300 } NodeDefocus;
301
302 typedef struct NodeScriptDict {
303         void *dict; /* for PyObject *dict */
304         void *node; /* for BPy_Node *node */
305 } NodeScriptDict;
306
307 /* qdn: glare node */
308 typedef struct NodeGlare {
309         char quality, type, iter;
310         char angle, angle_ofs, size, pad[2];
311         float colmod, mix, threshold, fade;
312 } NodeGlare;
313
314 /* qdn: tonemap node */
315 typedef struct NodeTonemap {
316         float key, offset, gamma;
317         float f, m, a, c;
318         int type;
319 } NodeTonemap;
320
321 /* qdn: lens distortion node */
322 typedef struct NodeLensDist {
323         short jit, proj, fit, pad;
324 } NodeLensDist;
325
326 typedef struct NodeColorBalance {
327         /* for processing */
328         float slope[3];
329         float offset[3];
330         float power[3];
331         
332         /* for ui representation */
333         float lift[3];
334         float gamma[3];
335         float gain[3];
336
337         /* temp storage for inverted lift */
338         float lift_lgg[3];
339         float gamma_inv[3];
340 } NodeColorBalance;
341
342 typedef struct NodeColorspill {
343         short limchan, unspill;
344         float limscale;
345         float uspillr, uspillg, uspillb;
346 }NodeColorspill;
347
348 /* TEX_output */
349 typedef struct TexNodeOutput {
350         char name[32];
351 } TexNodeOutput;
352
353
354 /* comp channel matte */
355 #define CMP_NODE_CHANNEL_MATTE_CS_RGB   1
356 #define CMP_NODE_CHANNEL_MATTE_CS_HSV   2
357 #define CMP_NODE_CHANNEL_MATTE_CS_YUV   3
358 #define CMP_NODE_CHANNEL_MATTE_CS_YCC   4
359
360 #define CMP_NODE_BLUR_ASPECT_NONE               0
361 #define CMP_NODE_BLUR_ASPECT_Y                  1
362 #define CMP_NODE_BLUR_ASPECT_X                  2
363
364 #endif