Cycles:
[blender.git] / source / blender / blenkernel / BKE_node.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. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22  *
23  * The Original Code is Copyright (C) 2005 Blender Foundation.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): Bob Holcomb.
29  *
30  * ***** END GPL LICENSE BLOCK *****
31  */
32
33 #ifndef BKE_NODE_H
34 #define BKE_NODE_H
35
36 /** \file BKE_node.h
37  *  \ingroup bke
38  */
39
40 /* not very important, but the stack solver likes to know a maximum */
41 #define MAX_SOCKET      64
42
43 struct bContext;
44 struct bNode;
45 struct bNodeLink;
46 struct bNodeSocket;
47 struct bNodeStack;
48 struct bNodeTree;
49 struct GPUMaterial;
50 struct GPUNode;
51 struct GPUNodeStack;
52 struct ID;
53 struct ListBase;
54 struct Main;
55 struct MTex;
56 struct PointerRNA;
57 struct rctf;
58 struct RenderData;
59 struct Scene;
60 struct Tex;
61 struct uiLayout;
62
63
64 /* ************** NODE TYPE DEFINITIONS ***** */
65
66 typedef struct bNodeSocketType {
67         int type, limit;
68         const char *name;
69         float val1, val2, val3, val4;   /* default alloc value for inputs */
70         float min, max;                                 /* default range for inputs */
71         int flag;
72         
73         /* after this line is used internal only */
74         struct bNodeSocket *sock;               /* used during verify_types */
75 } bNodeSocketType;
76
77 typedef struct bNodeType {
78         void *next,*prev;
79         int type;
80         const char *name; /* can be allocated too */
81         float width, minwidth, maxwidth;
82         short nclass, flag;
83         
84         bNodeSocketType *inputs, *outputs;
85         
86         char storagename[64];                   /* struct name for DNA */
87         
88         void (*execfunc)(void *data, struct bNode *, struct bNodeStack **, struct bNodeStack **);
89         
90         /* this line is set on startup of blender */
91         void (*uifunc)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr);
92         void (*uifuncbut)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr);
93         const char *(*labelfunc)(struct bNode *);
94
95         void (*initfunc)(struct bNode *);
96         void (*freestoragefunc)(struct bNode *);
97         void (*copystoragefunc)(struct bNode *, struct bNode *);
98         
99         /* for use with dynamic typedefs */
100         ID *id;
101         void *pynode; /* holds pointer to python script */
102         void *pydict; /* holds pointer to python script dictionary (scope)*/
103
104         /* gpu */
105         int (*gpufunc)(struct GPUMaterial *mat, struct bNode *node, struct GPUNodeStack *in, struct GPUNodeStack *out);
106
107 } bNodeType;
108
109 /* node->exec, now in use for composites (#define for break is same as ready yes) */
110 #define NODE_PROCESSING 1
111 #define NODE_READY              2
112 #define NODE_BREAK              2
113 #define NODE_FINISHED   4
114 #define NODE_FREEBUFS   8
115 #define NODE_SKIPPED    16
116
117 /* nodetype->nclass, for add-menu and themes */
118 #define NODE_CLASS_INPUT                0
119 #define NODE_CLASS_OUTPUT               1
120 #define NODE_CLASS_OP_COLOR             3
121 #define NODE_CLASS_OP_VECTOR    4
122 #define NODE_CLASS_OP_FILTER    5
123 #define NODE_CLASS_GROUP                6
124 #define NODE_CLASS_FILE                 7
125 #define NODE_CLASS_CONVERTOR    8
126 #define NODE_CLASS_MATTE                9
127 #define NODE_CLASS_DISTORT              10
128 #define NODE_CLASS_OP_DYNAMIC   11
129 #define NODE_CLASS_PATTERN              12
130 #define NODE_CLASS_TEXTURE              13
131 #define NODE_CLASS_CLOSURE              14
132
133 /* bNodeSocketType flag */
134 #define SOCK_NO_VALUE                   1
135
136 /* enum values for input/output */
137 #define SOCK_IN         1
138 #define SOCK_OUT        2
139
140 /* ************** GENERIC API, TREES *************** */
141
142 void                    ntreeVerifyTypes(struct bNodeTree *ntree);
143
144 struct bNodeTree *ntreeAddTree(const char *name, int type, const short is_group);
145 void                    ntreeInitTypes(struct bNodeTree *ntree);
146
147 //void                  ntreeMakeGroupSockets(struct bNodeTree *ntree);
148 void                    ntreeUpdateType(struct bNodeTree *ntree, struct bNodeType *ntype);
149 void                    ntreeFreeTree(struct bNodeTree *ntree);
150 struct bNodeTree *ntreeCopyTree(struct bNodeTree *ntree);
151 void                    ntreeSwitchID(struct bNodeTree *ntree, struct ID *sce_from, struct ID *sce_to);
152 void                    ntreeMakeLocal(struct bNodeTree *ntree);
153
154 void                    ntreeSocketUseFlags(struct bNodeTree *ntree);
155
156 void                    ntreeSolveOrder(struct bNodeTree *ntree);
157
158 void                    ntreeBeginExecTree(struct bNodeTree *ntree);
159 void                    ntreeExecTree(struct bNodeTree *ntree, void *callerdata, int thread);
160 void                    ntreeCompositExecTree(struct bNodeTree *ntree, struct RenderData *rd, int do_previews);
161 void                    ntreeEndExecTree(struct bNodeTree *ntree);
162
163 void                    ntreeInitPreview(struct bNodeTree *, int xsize, int ysize);
164 void                    ntreeClearPreview(struct bNodeTree *ntree);
165
166 void                    ntreeFreeCache(struct bNodeTree *ntree);
167                                 
168                                 /* calls allowing threaded composite */
169 struct bNodeTree *ntreeLocalize(struct bNodeTree *ntree);
170 void                    ntreeLocalSync(struct bNodeTree *localtree, struct bNodeTree *ntree);
171 void                    ntreeLocalMerge(struct bNodeTree *localtree, struct bNodeTree *ntree);
172
173 /* ************** GENERIC API, NODES *************** */
174
175 void                    nodeVerifyType(struct bNodeTree *ntree, struct bNode *node);
176
177 void                    nodeAddToPreview(struct bNode *, float *, int, int, int);
178
179 void                    nodeUnlinkNode(struct bNodeTree *ntree, struct bNode *node);
180 void                    nodeUniqueName(struct bNodeTree *ntree, struct bNode *node);
181 void                    nodeAddSockets(struct bNode *node, struct bNodeType *ntype);
182 struct bNode    *nodeAddNodeType(struct bNodeTree *ntree, int type, struct bNodeTree *ngroup, struct ID *id);
183 void                    nodeRegisterType(struct ListBase *typelist, const struct bNodeType *ntype) ;
184 void                    nodeUpdateType(struct bNodeTree *ntree, struct bNode* node, struct bNodeType *ntype);
185 void                    nodeMakeDynamicType(struct bNode *node);
186 int                             nodeDynamicUnlinkText(struct ID *txtid);
187 void                    nodeFreeNode(struct bNodeTree *ntree, struct bNode *node);
188 struct bNode    *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node);
189
190 struct bNodeLink *nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock);
191 void                    nodeRemLink(struct bNodeTree *ntree, struct bNodeLink *link);
192 void                    nodeRemSocketLinks(struct bNodeTree *ntree, struct bNodeSocket *sock);
193
194 struct bNode    *nodeFindNodebyName(struct bNodeTree *ntree, const char *name);
195 int                             nodeFindNode(struct bNodeTree *ntree, struct bNodeSocket *sock, struct bNode **nodep, int *sockindex, int *in_out);
196
197 struct bNodeLink *nodeFindLink(struct bNodeTree *ntree, struct bNodeSocket *from, struct bNodeSocket *to);
198 int                             nodeCountSocketLinks(struct bNodeTree *ntree, struct bNodeSocket *sock);
199
200 void                    nodeSetActive(struct bNodeTree *ntree, struct bNode *node);
201 struct bNode    *nodeGetActive(struct bNodeTree *ntree);
202 struct bNode    *nodeGetActiveID(struct bNodeTree *ntree, short idtype);
203 int                             nodeSetActiveID(struct bNodeTree *ntree, short idtype, struct ID *id);
204 void                    nodeClearActiveID(struct bNodeTree *ntree, short idtype);
205 struct bNode    *nodeGetActiveTexture(struct bNodeTree *ntree);
206
207 void                    NodeTagChanged(struct bNodeTree *ntree, struct bNode *node);
208 int                             NodeTagIDChanged(struct bNodeTree *ntree, struct ID *id);
209 void                    ntreeClearTags(struct bNodeTree *ntree);
210
211 /* ************** Groups ****************** */
212
213 struct bNode    *nodeMakeGroupFromSelected(struct bNodeTree *ntree);
214 int                             nodeGroupUnGroup(struct bNodeTree *ntree, struct bNode *gnode);
215
216 void                    nodeGroupVerify(struct bNodeTree *ngroup);
217 void                    nodeGroupSocketUseFlags(struct bNodeTree *ngroup);
218
219 void                    nodeGroupCopy(struct bNode *gnode);
220
221 struct bNodeSocket *nodeGroupAddSocket(struct bNodeTree *ngroup, const char *name, int type, int in_out);
222 struct bNodeSocket *nodeGroupExposeSocket(struct bNodeTree *ngroup, struct bNodeSocket *sock, int in_out);
223 void                    nodeGroupExposeAllSockets(struct bNodeTree *ngroup);
224 void                    nodeGroupRemoveSocket(struct bNodeTree *ngroup, struct bNodeSocket *gsock, int in_out);
225
226 /* ************** COMMON NODES *************** */
227
228 /* Init a new node type struct with default values and callbacks */
229 void                    node_type_base(struct bNodeType *ntype, int type, const char *name, short nclass, short flag,
230                                                            struct bNodeSocketType *inputs, struct bNodeSocketType *outputs);
231 void                    node_type_size(struct bNodeType *ntype, int width, int minwidth, int maxwidth);
232 void                    node_type_init(struct bNodeType *ntype, void (*initfunc)(struct bNode *));
233 void                    node_type_storage(struct bNodeType *ntype,
234                                                                   const char *storagename,
235                                                                   void (*freestoragefunc)(struct bNode *),
236                                                                   void (*copystoragefunc)(struct bNode *, struct bNode *));
237 void                    node_type_exec(struct bNodeType *ntype, void (*execfunc)(void *data, struct bNode *, struct bNodeStack **, struct bNodeStack **));
238 void                    node_type_gpu(struct bNodeType *ntype, int (*gpufunc)(struct GPUMaterial *mat, struct bNode *node, struct GPUNodeStack *in, struct GPUNodeStack *out));
239 void                    node_type_label(struct bNodeType *ntype, const char *(*labelfunc)(struct bNode *));
240
241 #define NODE_GROUP              2
242 #define NODE_GROUP_MENU         1000
243 #define NODE_DYNAMIC_MENU       4000
244
245 void register_node_type_group(ListBase *lb);
246
247 /* ************** SHADER NODES *************** */
248
249 struct ShadeInput;
250 struct ShadeResult;
251
252 /* note: types are needed to restore callbacks, don't change values */
253 /* range 1 - 100 is reserved for common nodes */
254 /* using toolbox, we add node groups by assuming the values below don't exceed NODE_GROUP_MENU for now */
255
256 #define SH_NODE_OUTPUT          1
257
258 #define SH_NODE_MATERIAL        100
259 #define SH_NODE_RGB                     101
260 #define SH_NODE_VALUE           102
261 #define SH_NODE_MIX_RGB         103
262 #define SH_NODE_VALTORGB        104
263 #define SH_NODE_RGBTOBW         105
264 #define SH_NODE_TEXTURE         106
265 #define SH_NODE_NORMAL          107
266 #define SH_NODE_GEOM            108
267 #define SH_NODE_MAPPING         109
268 #define SH_NODE_CURVE_VEC       110
269 #define SH_NODE_CURVE_RGB       111
270 #define SH_NODE_CAMERA          114
271 #define SH_NODE_MATH            115
272 #define SH_NODE_VECT_MATH       116
273 #define SH_NODE_SQUEEZE         117
274 #define SH_NODE_MATERIAL_EXT    118
275 #define SH_NODE_INVERT          119
276 #define SH_NODE_SEPRGB          120
277 #define SH_NODE_COMBRGB         121
278 #define SH_NODE_HUE_SAT         122
279 #define NODE_DYNAMIC            123
280
281 #define SH_NODE_OUTPUT_MATERIAL                 124
282 #define SH_NODE_OUTPUT_WORLD                    125
283 #define SH_NODE_OUTPUT_LAMP                             126
284 #define SH_NODE_FRESNEL                                 127
285 #define SH_NODE_MIX_CLOSURE                             128
286 #define SH_NODE_ATTRIBUTE                               129
287 #define SH_NODE_BACKGROUND                              130
288 #define SH_NODE_BSDF_ANISOTROPIC                131
289 #define SH_NODE_BSDF_DIFFUSE                    132
290 #define SH_NODE_BSDF_GLOSSY                             133
291 #define SH_NODE_BSDF_GLASS                              134
292 #define SH_NODE_BSDF_TRANSLUCENT                137
293 #define SH_NODE_BSDF_TRANSPARENT                138
294 #define SH_NODE_BSDF_VELVET                             139
295 #define SH_NODE_EMISSION                                140
296 #define SH_NODE_GEOMETRY                                141
297 #define SH_NODE_LIGHT_PATH                              142
298 #define SH_NODE_TEX_IMAGE                               143
299 #define SH_NODE_TEX_NOISE                               144
300 #define SH_NODE_TEX_SKY                                 145
301 #define SH_NODE_TEX_BLEND                               146
302 #define SH_NODE_TEX_VORONOI                             147
303 #define SH_NODE_TEX_MAGIC                               148
304 #define SH_NODE_TEX_MARBLE                              149
305 #define SH_NODE_TEX_CLOUDS                              150
306 #define SH_NODE_TEX_WOOD                                151
307 #define SH_NODE_TEX_MUSGRAVE                    152
308 #define SH_NODE_TEX_STUCCI                              153
309 #define SH_NODE_TEX_DISTNOISE                   154
310 #define SH_NODE_TEX_COORD                               155
311 #define SH_NODE_ADD_CLOSURE                             156
312 #define SH_NODE_TEX_ENVIRONMENT                 157
313 #define SH_NODE_OUTPUT_TEXTURE                  158
314 #define SH_NODE_HOLDOUT                                 159
315
316 /* custom defines options for Material node */
317 #define SH_NODE_MAT_DIFF   1
318 #define SH_NODE_MAT_SPEC   2
319 #define SH_NODE_MAT_NEG    4
320 /* custom defines: states for Script node. These are bit indices */
321 #define NODE_DYNAMIC_READY      0 /* 1 */
322 #define NODE_DYNAMIC_LOADED     1 /* 2 */
323 #define NODE_DYNAMIC_NEW        2 /* 4 */
324 #define NODE_DYNAMIC_UPDATED    3 /* 8 */
325 #define NODE_DYNAMIC_ADDEXIST   4 /* 16 */
326 #define NODE_DYNAMIC_ERROR      5 /* 32 */
327 #define NODE_DYNAMIC_REPARSE    6 /* 64 */
328 #define NODE_DYNAMIC_SET        15 /* sign */
329
330 /* the type definitions array */
331 extern struct ListBase node_all_shaders;
332
333 /* API */
334
335 void                    ntreeShaderExecTree(struct bNodeTree *ntree, struct ShadeInput *shi, struct ShadeResult *shr);
336 void                    ntreeShaderGetTexcoMode(struct bNodeTree *ntree, int osa, short *texco, int *mode);
337 void                    nodeShaderSynchronizeID(struct bNode *node, int copyto);
338
339                                 /* switch material render loop */
340 extern void (*node_shader_lamp_loop)(struct ShadeInput *, struct ShadeResult *);
341 void                    set_node_shader_lamp_loop(void (*lamp_loop_func)(struct ShadeInput *, struct ShadeResult *));
342
343 void                    ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMaterial *mat);
344
345
346 /* ************** COMPOSITE NODES *************** */
347
348 /* output socket defines */
349 #define RRES_OUT_IMAGE          0
350 #define RRES_OUT_ALPHA          1
351 #define RRES_OUT_Z                      2
352 #define RRES_OUT_NORMAL         3
353 #define RRES_OUT_UV                     4
354 #define RRES_OUT_VEC            5
355 #define RRES_OUT_RGBA           6
356 #define RRES_OUT_DIFF           7
357 #define RRES_OUT_SPEC           8
358 #define RRES_OUT_SHADOW         9
359 #define RRES_OUT_AO                     10
360 #define RRES_OUT_REFLECT        11
361 #define RRES_OUT_REFRACT        12
362 #define RRES_OUT_INDIRECT       13
363 #define RRES_OUT_INDEXOB        14
364 #define RRES_OUT_INDEXMA        15
365 #define RRES_OUT_MIST           16
366 #define RRES_OUT_EMIT           17
367 #define RRES_OUT_ENV            18
368
369 /* note: types are needed to restore callbacks, don't change values */
370 #define CMP_NODE_VIEWER         201
371 #define CMP_NODE_RGB            202
372 #define CMP_NODE_VALUE          203
373 #define CMP_NODE_MIX_RGB        204
374 #define CMP_NODE_VALTORGB       205
375 #define CMP_NODE_RGBTOBW        206
376 #define CMP_NODE_NORMAL         207
377 #define CMP_NODE_CURVE_VEC      208
378 #define CMP_NODE_CURVE_RGB      209
379 #define CMP_NODE_ALPHAOVER      210
380 #define CMP_NODE_BLUR           211
381 #define CMP_NODE_FILTER         212
382 #define CMP_NODE_MAP_VALUE      213
383 #define CMP_NODE_TIME           214
384 #define CMP_NODE_VECBLUR        215
385 #define CMP_NODE_SEPRGBA        216
386 #define CMP_NODE_SEPHSVA        217
387 #define CMP_NODE_SETALPHA       218
388 #define CMP_NODE_HUE_SAT        219
389 #define CMP_NODE_IMAGE          220
390 #define CMP_NODE_R_LAYERS       221
391 #define CMP_NODE_COMPOSITE      222
392 #define CMP_NODE_OUTPUT_FILE    223
393 #define CMP_NODE_TEXTURE        224
394 #define CMP_NODE_TRANSLATE      225
395 #define CMP_NODE_ZCOMBINE       226
396 #define CMP_NODE_COMBRGBA       227
397 #define CMP_NODE_DILATEERODE    228
398 #define CMP_NODE_ROTATE         229
399 #define CMP_NODE_SCALE          230
400 #define CMP_NODE_SEPYCCA        231
401 #define CMP_NODE_COMBYCCA       232
402 #define CMP_NODE_SEPYUVA        233
403 #define CMP_NODE_COMBYUVA       234
404 #define CMP_NODE_DIFF_MATTE     235
405 #define CMP_NODE_COLOR_SPILL    236
406 #define CMP_NODE_CHROMA_MATTE   237
407 #define CMP_NODE_CHANNEL_MATTE  238
408 #define CMP_NODE_FLIP           239
409 #define CMP_NODE_SPLITVIEWER    240
410 #define CMP_NODE_INDEX_MASK     241
411 #define CMP_NODE_MAP_UV         242
412 #define CMP_NODE_ID_MASK        243
413 #define CMP_NODE_DEFOCUS        244
414 #define CMP_NODE_DISPLACE       245
415 #define CMP_NODE_COMBHSVA       246
416 #define CMP_NODE_MATH           247
417 #define CMP_NODE_LUMA_MATTE     248
418 #define CMP_NODE_BRIGHTCONTRAST 249
419 #define CMP_NODE_GAMMA          250
420 #define CMP_NODE_INVERT         251
421 #define CMP_NODE_NORMALIZE      252
422 #define CMP_NODE_CROP           253
423 #define CMP_NODE_DBLUR          254
424 #define CMP_NODE_BILATERALBLUR  255
425 #define CMP_NODE_PREMULKEY  256
426 #define CMP_NODE_DIST_MATTE     257
427 #define CMP_NODE_VIEW_LEVELS    258
428 #define CMP_NODE_COLOR_MATTE 259
429 #define CMP_NODE_COLORBALANCE 260
430 #define CMP_NODE_HUECORRECT 261
431
432 #define CMP_NODE_GLARE          301
433 #define CMP_NODE_TONEMAP        302
434 #define CMP_NODE_LENSDIST       303
435
436 /* channel toggles */
437 #define CMP_CHAN_RGB            1
438 #define CMP_CHAN_A                      2
439 #define CMP_CHAN_R                      4
440 #define CMP_CHAN_G                      8
441 #define CMP_CHAN_B                      16
442
443 /* filter types */
444 #define CMP_FILT_SOFT           0
445 #define CMP_FILT_SHARP          1
446 #define CMP_FILT_LAPLACE        2
447 #define CMP_FILT_SOBEL          3
448 #define CMP_FILT_PREWITT        4
449 #define CMP_FILT_KIRSCH         5
450 #define CMP_FILT_SHADOW         6
451
452 /* scale node type, in custom1 */
453 #define CMP_SCALE_RELATIVE              0
454 #define CMP_SCALE_ABSOLUTE              1
455 #define CMP_SCALE_SCENEPERCENT  2
456 #define CMP_SCALE_RENDERPERCENT 3
457
458
459 /* the type definitions array */
460 extern struct ListBase node_all_composit;
461
462 /* API */
463 struct CompBuf;
464 void ntreeCompositTagRender(struct Scene *sce);
465 int ntreeCompositTagAnimated(struct bNodeTree *ntree);
466 void ntreeCompositTagGenerators(struct bNodeTree *ntree);
467 void ntreeCompositForceHidden(struct bNodeTree *ntree, struct Scene *scene);
468
469
470
471 /* ************** TEXTURE NODES *************** */
472
473 struct TexResult;
474
475 #define TEX_NODE_OUTPUT     401
476 #define TEX_NODE_CHECKER    402
477 #define TEX_NODE_TEXTURE    403
478 #define TEX_NODE_BRICKS     404
479 #define TEX_NODE_MATH       405
480 #define TEX_NODE_MIX_RGB    406
481 #define TEX_NODE_RGBTOBW    407
482 #define TEX_NODE_VALTORGB   408
483 #define TEX_NODE_IMAGE      409
484 #define TEX_NODE_CURVE_RGB  410
485 #define TEX_NODE_INVERT     411
486 #define TEX_NODE_HUE_SAT    412
487 #define TEX_NODE_CURVE_TIME 413
488 #define TEX_NODE_ROTATE     414
489 #define TEX_NODE_VIEWER     415
490 #define TEX_NODE_TRANSLATE  416
491 #define TEX_NODE_COORD      417
492 #define TEX_NODE_DISTANCE   418
493 #define TEX_NODE_COMPOSE    419
494 #define TEX_NODE_DECOMPOSE  420
495 #define TEX_NODE_VALTONOR   421
496 #define TEX_NODE_SCALE      422
497 #define TEX_NODE_AT         423
498
499 /* 501-599 reserved. Use like this: TEX_NODE_PROC + TEX_CLOUDS, etc */
500 #define TEX_NODE_PROC      500
501 #define TEX_NODE_PROC_MAX  600
502
503 extern struct ListBase node_all_textures;
504
505 /* API */
506 int  ntreeTexTagAnimated(struct bNodeTree *ntree);
507 void ntreeTexSetPreviewFlag(int);
508 int ntreeTexExecTree(struct bNodeTree *ntree, struct TexResult *target, float *coord, float *dxt, float *dyt, int osatex, short thread, struct Tex *tex, short which_output, int cfra, int preview, struct ShadeInput *shi, struct MTex *mtex);
509 void ntreeTexCheckCyclics(struct bNodeTree *ntree);
510 char* ntreeTexOutputMenu(struct bNodeTree *ntree);
511
512
513 /**/
514
515 void init_nodesystem(void);
516 void free_nodesystem(void);
517
518 /**/
519
520 void clear_scene_in_nodes(struct Main *bmain, struct Scene *sce);
521
522 #endif