More node goodies!
[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_vec_types.h"
34 #include "DNA_listBase.h"
35
36 struct ID;
37 struct SpaceNode;
38 struct bNodeLink;
39 struct bNodeType;
40 struct uiBlock;
41
42 #define NODE_MAXSTR 32
43
44
45 typedef struct bNodeStack {
46         float vec[4];
47         float min, max;                 /* min/max for values (UI writes it, execute might use it) */
48         void *data;
49         short hasinput, pad;    /* hasinput tagged for executing */
50         int pad1;
51 } bNodeStack;
52
53 typedef struct bNodeSocket {
54         struct bNodeSocket *next, *prev;
55         
56         char name[32];
57         bNodeStack ns;                          /* custom data for inputs, only UI writes in this */
58         short type, flag, limit, stack_index;
59         float locx, locy;
60         
61         struct bNodeLink *link;         /* input link to parent, max one! set in nodeSolveOrder() */
62         
63 } bNodeSocket;
64
65 /* sock->type */
66 #define SOCK_VALUE              0
67 #define SOCK_VECTOR             1
68 #define SOCK_RGBA               2
69 #define SOCK_IMAGE              3
70
71 /* sock->flag, first bit is select */
72 #
73 #
74 typedef struct bNodePreview {
75         float *rect;
76         short xsize, ysize;
77 } bNodePreview;
78
79
80 /* limit data in bNode to what we want to see saved? */
81 typedef struct bNode {
82         struct bNode *next, *prev, *new;
83         
84         char name[32];
85         short type, flag;
86         short done, level;              /* both for dependency and sorting */
87         short lasty, menunr;    /* lasty: check preview render status, menunr: browse ID blocks */
88         short pad1, pad2;
89         
90         ListBase inputs, outputs;
91         struct ID *id;                  /* optional link to libdata */
92         void *storage;                  /* custom data, must be struct, for storage in file */
93         struct uiBlock *block;  /* each node has own block */
94         
95         float locx, locy;               /* root offset for drawing */
96         float width, miniwidth;                 
97         short custom1, custom2; /* to be abused for buttons */
98         int pad3;
99         
100         rctf totr;                              /* entire boundbox */
101         rctf butr;                              /* optional buttons area */
102         rctf prvr;                              /* optional preview area */
103         bNodePreview *preview;  /* optional preview image */
104         
105         struct bNodeType *typeinfo;     /* lookup of callbacks and defaults */
106         
107 } bNode;
108
109 /* node->flag */
110 #define NODE_SELECT                     1
111 #define NODE_OPTIONS            2
112 #define NODE_PREVIEW            4
113 #define NODE_HIDDEN                     8
114 #define NODE_ACTIVE                     16
115 #define NODE_ACTIVE_ID          32
116 #define NODE_DO_OUTPUT          64
117
118 typedef struct bNodeLink {
119         struct bNodeLink *next, *prev;
120         
121         bNode *fromnode, *tonode;
122         bNodeSocket *fromsock, *tosock;
123         
124 } bNodeLink;
125
126 /* the basis for a Node tree, all links and nodes reside internal here */
127 typedef struct bNodeTree {
128         ListBase nodes, links;
129         
130         void *data;                                     /* custom data, set by execute caller, no read/write handling */
131         bNodeStack *stack;                      /* stack is only while executing */
132         
133         int type, init;                         /* set init on fileread */
134         struct bNodeType **alltypes;            /* type definitions, set on fileread */
135         
136 } bNodeTree;
137
138 /* ntree->type, index */
139 #define NTREE_SHADER    0
140 #define NTREE_COMPOSIT  1
141
142 /* ntree->init, flag */
143 #define NTREE_TYPE_INIT 1
144 #define NTREE_EXEC_INIT 2
145
146 #endif
147