Changed node type definitions to use a dynamic list.

This will allow python or plugin defined nodes to work as well.
(And fixes compile issues with MSVC in yesterdays commit for nodes)

Code provided by Nathan L.
Fixes in his code:
- free_nodesystem() was called too late (after guarded alloc was closed)
- free_nodesystem() was freeing nodes that were not malloced even
- free_nodesystem was using free, not freeN :)
- the typedefs needed to be malloced yes, to allow duplicate nodes like
  group but also for dynamic nodes.
This commit is contained in:
2007-03-26 15:07:38 +00:00
parent d1315a342d
commit 5c760e4811
64 changed files with 258 additions and 130 deletions

View File

@@ -66,6 +66,7 @@ typedef struct bNodeSocketType {
} bNodeSocketType; } bNodeSocketType;
typedef struct bNodeType { typedef struct bNodeType {
void *next,*prev;
int type; int type;
char *name; char *name;
float width, minwidth, maxwidth; float width, minwidth, maxwidth;
@@ -102,6 +103,7 @@ void ntreeVerifyTypes(struct bNodeTree *ntree);
struct bNodeTree *ntreeAddTree(int type); struct bNodeTree *ntreeAddTree(int type);
void ntreeInitTypes(struct bNodeTree *ntree); void ntreeInitTypes(struct bNodeTree *ntree);
void ntreeMakeOwnType(struct bNodeTree *ntree); void ntreeMakeOwnType(struct bNodeTree *ntree);
void ntreeFreeTree(struct bNodeTree *ntree); void ntreeFreeTree(struct bNodeTree *ntree);
struct bNodeTree *ntreeCopyTree(struct bNodeTree *ntree, int internal_select); struct bNodeTree *ntreeCopyTree(struct bNodeTree *ntree, int internal_select);
@@ -196,7 +198,7 @@ struct ShadeResult;
#define SH_NODE_MAT_NEG 4 #define SH_NODE_MAT_NEG 4
/* the type definitions array */ /* the type definitions array */
static bNodeType *node_all_shaders[]; extern struct ListBase node_all_shaders;
/* API */ /* API */
@@ -293,7 +295,7 @@ void set_node_shader_lamp_loop(void (*lamp_loop_func)(struct ShadeInput *, str
/* the type definitions array */ /* the type definitions array */
static bNodeType* node_all_composit[]; extern struct ListBase node_all_composit;
/* API */ /* API */
struct CompBuf; struct CompBuf;
@@ -304,4 +306,7 @@ void ntreeCompositForceHidden(struct bNodeTree *ntree);
void free_compbuf(struct CompBuf *cbuf); /* internal...*/ void free_compbuf(struct CompBuf *cbuf); /* internal...*/
void init_nodesystem(void);
void free_nodesystem(void);
#endif #endif

View File

@@ -66,6 +66,10 @@
/* not very important, but the stack solver likes to know a maximum */ /* not very important, but the stack solver likes to know a maximum */
#define MAX_SOCKET 64 #define MAX_SOCKET 64
static ListBase empty_list = {NULL, NULL};
ListBase node_all_composit = {NULL, NULL};
ListBase node_all_shaders = {NULL, NULL};
/* ************** Type stuff ********** */ /* ************** Type stuff ********** */
static bNodeType *node_get_type(bNodeTree *ntree, int type, bNodeTree *ngroup) static bNodeType *node_get_type(bNodeTree *ntree, int type, bNodeTree *ngroup)
@@ -77,12 +81,12 @@ static bNodeType *node_get_type(bNodeTree *ntree, int type, bNodeTree *ngroup)
return NULL; return NULL;
} }
else { else {
bNodeType **typedefs= ntree->alltypes; bNodeType *ntype = ntree->alltypes.first;
for(; ntype; ntype= ntype->next)
if(ntype->type==type)
return ntype;
while( *typedefs && (*typedefs)->type!=type) return NULL;
typedefs++;
return *typedefs;
} }
} }
@@ -95,7 +99,7 @@ void ntreeInitTypes(bNodeTree *ntree)
else if(ntree->type==NTREE_COMPOSIT) else if(ntree->type==NTREE_COMPOSIT)
ntree->alltypes= node_all_composit; ntree->alltypes= node_all_composit;
else { else {
ntree->alltypes= NULL; ntree->alltypes= empty_list;
printf("Error: no type definitions for nodes\n"); printf("Error: no type definitions for nodes\n");
} }
@@ -223,8 +227,7 @@ void ntreeVerifyTypes(bNodeTree *ntree)
{ {
bNode *node; bNode *node;
/* commented out, in linux a 2nd initialize on a Scene ntree from a lib crashes... */ /* if((ntree->init & NTREE_TYPE_INIT)==0) */
/* if((ntree->init & NTREE_TYPE_INIT)==0) */
ntreeInitTypes(ntree); ntreeInitTypes(ntree);
/* check inputs and outputs, and remove or insert them */ /* check inputs and outputs, and remove or insert them */
@@ -236,6 +239,7 @@ void ntreeVerifyTypes(bNodeTree *ntree)
/* ************** Group stuff ********** */ /* ************** Group stuff ********** */
bNodeType node_group_typeinfo= { bNodeType node_group_typeinfo= {
/* next,prev */ NULL, NULL,
/* type code */ NODE_GROUP, /* type code */ NODE_GROUP,
/* name */ "Group", /* name */ "Group",
/* width+range */ 120, 60, 200, /* width+range */ 120, 60, 200,
@@ -244,7 +248,8 @@ bNodeType node_group_typeinfo= {
/* output sock */ NULL, /* output sock */ NULL,
/* storage */ "", /* storage */ "",
/* execfunc */ NULL, /* execfunc */ NULL,
/* butfunc */ NULL,
/* initfunc */ NULL
}; };
/* tag internal sockets */ /* tag internal sockets */
@@ -345,7 +350,7 @@ void ntreeMakeOwnType(bNodeTree *ngroup)
/* make own type struct */ /* make own type struct */
ngroup->owntype= MEM_mallocN(sizeof(bNodeType), "group type"); ngroup->owntype= MEM_mallocN(sizeof(bNodeType), "group type");
*ngroup->owntype= node_group_typeinfo; *ngroup->owntype= node_group_typeinfo; /* copy data, for init */
/* input type arrays */ /* input type arrays */
if(totin) { if(totin) {
@@ -863,6 +868,8 @@ bNodeTree *ntreeAddTree(int type)
{ {
bNodeTree *ntree= MEM_callocN(sizeof(bNodeTree), "new node tree"); bNodeTree *ntree= MEM_callocN(sizeof(bNodeTree), "new node tree");
ntree->type= type; ntree->type= type;
ntree->alltypes.first = NULL;
ntree->alltypes.last = NULL;
ntreeInitTypes(ntree); ntreeInitTypes(ntree);
return ntree; return ntree;
@@ -2296,3 +2303,122 @@ void ntreeCompositTagGenerators(bNodeTree *ntree)
} }
} }
/* ************* node definition init ********** */
static bNodeType *is_nodetype_registered(ListBase *typelist, int type)
{
bNodeType *ntype= typelist->first;
for(;ntype; ntype= ntype->next )
if(ntype->type==type)
return ntype;
return NULL;
}
/* type can be from a static array, we make copy for duplicate types (like group) */
void nodeRegisterType(ListBase *typelist, const bNodeType *ntype)
{
bNodeType *found= is_nodetype_registered(typelist, ntype->type);
if(found==NULL) {
bNodeType *ntypen= MEM_mallocN(sizeof(bNodeType), "node type");
*ntypen= *ntype;
BLI_addtail(typelist, ntypen);
}
}
static void registerCompositNodes(ListBase *ntypelist)
{
nodeRegisterType(ntypelist, &node_group_typeinfo);
nodeRegisterType(ntypelist, &cmp_node_rlayers);
nodeRegisterType(ntypelist, &cmp_node_image);
nodeRegisterType(ntypelist, &cmp_node_texture);
nodeRegisterType(ntypelist, &cmp_node_value);
nodeRegisterType(ntypelist, &cmp_node_rgb);
nodeRegisterType(ntypelist, &cmp_node_curve_time);
nodeRegisterType(ntypelist, &cmp_node_composite);
nodeRegisterType(ntypelist, &cmp_node_viewer);
nodeRegisterType(ntypelist, &cmp_node_splitviewer);
nodeRegisterType(ntypelist, &cmp_node_output_file);
nodeRegisterType(ntypelist, &cmp_node_curve_rgb);
nodeRegisterType(ntypelist, &cmp_node_mix_rgb);
nodeRegisterType(ntypelist, &cmp_node_hue_sat);
nodeRegisterType(ntypelist, &cmp_node_alphaover);
nodeRegisterType(ntypelist, &cmp_node_zcombine);
nodeRegisterType(ntypelist, &cmp_node_normal);
nodeRegisterType(ntypelist, &cmp_node_curve_vec);
nodeRegisterType(ntypelist, &cmp_node_map_value);
nodeRegisterType(ntypelist, &cmp_node_filter);
nodeRegisterType(ntypelist, &cmp_node_blur);
nodeRegisterType(ntypelist, &cmp_node_vecblur);
nodeRegisterType(ntypelist, &cmp_node_dilateerode);
nodeRegisterType(ntypelist, &cmp_node_defocus);
nodeRegisterType(ntypelist, &cmp_node_valtorgb);
nodeRegisterType(ntypelist, &cmp_node_rgbtobw);
nodeRegisterType(ntypelist, &cmp_node_setalpha);
nodeRegisterType(ntypelist, &cmp_node_idmask);
nodeRegisterType(ntypelist, &cmp_node_math);
nodeRegisterType(ntypelist, &cmp_node_seprgba);
nodeRegisterType(ntypelist, &cmp_node_combrgba);
nodeRegisterType(ntypelist, &cmp_node_sephsva);
nodeRegisterType(ntypelist, &cmp_node_combhsva);
nodeRegisterType(ntypelist, &cmp_node_sepyuva);
nodeRegisterType(ntypelist, &cmp_node_combyuva);
nodeRegisterType(ntypelist, &cmp_node_sepycca);
nodeRegisterType(ntypelist, &cmp_node_combycca);
nodeRegisterType(ntypelist, &cmp_node_diff_matte);
nodeRegisterType(ntypelist, &cmp_node_chroma);
nodeRegisterType(ntypelist, &cmp_node_channel_matte);
nodeRegisterType(ntypelist, &cmp_node_color_spill);
nodeRegisterType(ntypelist, &cmp_node_luma_matte);
nodeRegisterType(ntypelist, &cmp_node_translate);
nodeRegisterType(ntypelist, &cmp_node_rotate);
nodeRegisterType(ntypelist, &cmp_node_scale);
nodeRegisterType(ntypelist, &cmp_node_flip);
nodeRegisterType(ntypelist, &cmp_node_displace);
nodeRegisterType(ntypelist, &cmp_node_mapuv);
}
static void registerShaderNodes(ListBase *ntypelist)
{
nodeRegisterType(ntypelist, &node_group_typeinfo);
nodeRegisterType(ntypelist, &sh_node_output);
nodeRegisterType(ntypelist, &sh_node_mix_rgb);
nodeRegisterType(ntypelist, &sh_node_valtorgb);
nodeRegisterType(ntypelist, &sh_node_rgbtobw);
nodeRegisterType(ntypelist, &sh_node_normal);
nodeRegisterType(ntypelist, &sh_node_geom);
nodeRegisterType(ntypelist, &sh_node_mapping);
nodeRegisterType(ntypelist, &sh_node_curve_vec);
nodeRegisterType(ntypelist, &sh_node_curve_rgb);
nodeRegisterType(ntypelist, &sh_node_math);
nodeRegisterType(ntypelist, &sh_node_vect_math);
nodeRegisterType(ntypelist, &sh_node_squeeze);
nodeRegisterType(ntypelist, &sh_node_camera);
nodeRegisterType(ntypelist, &sh_node_material);
nodeRegisterType(ntypelist, &sh_node_value);
nodeRegisterType(ntypelist, &sh_node_rgb);
nodeRegisterType(ntypelist, &sh_node_texture);
}
void init_nodesystem(void)
{
registerCompositNodes(&node_all_composit);
registerShaderNodes(&node_all_shaders);
}
void free_nodesystem(void)
{
BLI_freelistN(&node_all_composit);
BLI_freelistN(&node_all_shaders);
}

View File

@@ -34,7 +34,7 @@
#include "DNA_vec_types.h" #include "DNA_vec_types.h"
#include "DNA_listBase.h" #include "DNA_listBase.h"
struct ListBase;
struct SpaceNode; struct SpaceNode;
struct bNodeLink; struct bNodeLink;
struct bNodeType; struct bNodeType;
@@ -162,8 +162,9 @@ typedef struct bNodeTree {
int type, init; /* set init on fileread */ int type, init; /* set init on fileread */
int stacksize; /* amount of elements in stack */ int stacksize; /* amount of elements in stack */
int cur_index; /* sockets in groups have unique identifiers, adding new sockets always will increase this counter */ int cur_index; /* sockets in groups have unique identifiers, adding new sockets always
struct bNodeType **alltypes; /* type definitions, set on fileread, no read/write */ will increase this counter */
ListBase alltypes; /* type definitions */
struct bNodeType *owntype; /* for groups or dynamic trees, no read/write */ struct bNodeType *owntype; /* for groups or dynamic trees, no read/write */
/* callbacks */ /* callbacks */

View File

@@ -93,65 +93,6 @@ extern bNodeType cmp_node_flip;
extern bNodeType cmp_node_displace; extern bNodeType cmp_node_displace;
extern bNodeType cmp_node_mapuv; extern bNodeType cmp_node_mapuv;
static bNodeType* node_all_composit[]= {
&node_group_typeinfo,
&cmp_node_rlayers,
&cmp_node_image,
&cmp_node_texture,
&cmp_node_value,
&cmp_node_rgb,
&cmp_node_curve_time,
&cmp_node_composite,
&cmp_node_viewer,
&cmp_node_splitviewer,
&cmp_node_output_file,
&cmp_node_curve_rgb,
&cmp_node_mix_rgb,
&cmp_node_hue_sat,
&cmp_node_alphaover,
&cmp_node_zcombine,
&cmp_node_normal,
&cmp_node_curve_vec,
&cmp_node_map_value,
&cmp_node_filter,
&cmp_node_blur,
&cmp_node_vecblur,
&cmp_node_dilateerode,
&cmp_node_defocus,
&cmp_node_valtorgb,
&cmp_node_rgbtobw,
&cmp_node_setalpha,
&cmp_node_idmask,
&cmp_node_math,
&cmp_node_seprgba,
&cmp_node_combrgba,
&cmp_node_sephsva,
&cmp_node_combhsva,
&cmp_node_sepyuva,
&cmp_node_combyuva,
&cmp_node_sepycca,
&cmp_node_combycca,
&cmp_node_diff_matte,
&cmp_node_chroma,
&cmp_node_channel_matte,
&cmp_node_color_spill,
&cmp_node_luma_matte,
&cmp_node_translate,
&cmp_node_rotate,
&cmp_node_scale,
&cmp_node_flip,
&cmp_node_displace,
&cmp_node_mapuv,
NULL
};
#endif #endif

View File

@@ -57,30 +57,6 @@ extern bNodeType sh_node_math;
extern bNodeType sh_node_vect_math; extern bNodeType sh_node_vect_math;
extern bNodeType sh_node_squeeze; extern bNodeType sh_node_squeeze;
static bNodeType* node_all_shaders[]= {
&node_group_typeinfo,
&sh_node_output,
&sh_node_material,
&sh_node_camera,
&sh_node_value,
&sh_node_rgb,
&sh_node_mix_rgb,
&sh_node_valtorgb,
&sh_node_rgbtobw,
&sh_node_texture,
&sh_node_normal,
&sh_node_geom,
&sh_node_mapping,
&sh_node_curve_vec,
&sh_node_curve_rgb,
&sh_node_math,
&sh_node_vect_math,
&sh_node_squeeze,
NULL
};
#endif #endif

View File

@@ -108,6 +108,7 @@ static void node_composit_exec_alphaover(void *data, bNode *node, bNodeStack **i
} }
bNodeType cmp_node_alphaover= { bNodeType cmp_node_alphaover= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_ALPHAOVER, /* type code */ CMP_NODE_ALPHAOVER,
/* name */ "AlphaOver", /* name */ "AlphaOver",
/* width+range */ 80, 40, 120, /* width+range */ 80, 40, 120,

View File

@@ -617,6 +617,7 @@ static void node_composit_init_blur(bNode* node)
} }
bNodeType cmp_node_blur= { bNodeType cmp_node_blur= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_BLUR, /* type code */ CMP_NODE_BLUR,
/* name */ "Blur", /* name */ "Blur",
/* width+range */ 120, 80, 200, /* width+range */ 120, 80, 200,

View File

@@ -190,6 +190,7 @@ static void node_composit_init_channel_matte(bNode *node)
} }
bNodeType cmp_node_channel_matte={ bNodeType cmp_node_channel_matte={
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_CHANNEL_MATTE, /* type code */ CMP_NODE_CHANNEL_MATTE,
/* name */ "Channel Key", /* name */ "Channel Key",
/* width+range */ 200, 80, 250, /* width+range */ 200, 80, 250,

View File

@@ -173,6 +173,7 @@ static void node_composit_init_chroma_matte(bNode *node)
}; };
bNodeType cmp_node_chroma={ bNodeType cmp_node_chroma={
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_CHROMA, /* type code */ CMP_NODE_CHROMA,
/* name */ "Chroma Key", /* name */ "Chroma Key",
/* width+range */ 200, 80, 300, /* width+range */ 200, 80, 300,

View File

@@ -126,6 +126,7 @@ static void node_composit_init_color_spill(bNode *node)
}; };
bNodeType cmp_node_color_spill={ bNodeType cmp_node_color_spill={
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COLOR_SPILL, /* type code */ CMP_NODE_COLOR_SPILL,
/* name */ "Color Spill", /* name */ "Color Spill",
/* width+range */ 140, 80, 200, /* width+range */ 140, 80, 200,

View File

@@ -88,6 +88,7 @@ static void node_composit_exec_composite(void *data, bNode *node, bNodeStack **i
} }
bNodeType cmp_node_composite= { bNodeType cmp_node_composite= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COMPOSITE, /* type code */ CMP_NODE_COMPOSITE,
/* name */ "Composite", /* name */ "Composite",
/* width+range */ 80, 60, 200, /* width+range */ 80, 60, 200,

View File

@@ -59,6 +59,7 @@ static void node_composit_init_curves_time(bNode* node)
} }
bNodeType cmp_node_curve_time= { bNodeType cmp_node_curve_time= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_TIME, /* type code */ CMP_NODE_TIME,
/* name */ "Time", /* name */ "Time",
/* width+range */ 140, 100, 320, /* width+range */ 140, 100, 320,
@@ -98,6 +99,7 @@ static void node_composit_init_curve_vec(bNode* node)
}; };
bNodeType cmp_node_curve_vec= { bNodeType cmp_node_curve_vec= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_CURVE_VEC, /* type code */ CMP_NODE_CURVE_VEC,
/* name */ "Vector Curves", /* name */ "Vector Curves",
/* width+range */ 200, 140, 320, /* width+range */ 200, 140, 320,
@@ -180,6 +182,7 @@ static void node_composit_init_curve_rgb(bNode* node)
}; };
bNodeType cmp_node_curve_rgb= { bNodeType cmp_node_curve_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_CURVE_RGB, /* type code */ CMP_NODE_CURVE_RGB,
/* name */ "RGB Curves", /* name */ "RGB Curves",
/* width+range */ 200, 140, 320, /* width+range */ 200, 140, 320,

View File

@@ -806,6 +806,7 @@ static void node_composit_init_defocus(bNode* node)
}; };
bNodeType cmp_node_defocus = { bNodeType cmp_node_defocus = {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_DEFOCUS, /* type code */ CMP_NODE_DEFOCUS,
/* name */ "Defocus", /* name */ "Defocus",
/* width+range */ 150, 120, 200, /* width+range */ 150, 120, 200,

View File

@@ -198,6 +198,7 @@ static void node_composit_init_diff_matte(bNode *node)
} }
bNodeType cmp_node_diff_matte={ bNodeType cmp_node_diff_matte={
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_DIFF_MATTE, /* type code */ CMP_NODE_DIFF_MATTE,
/* name */ "Difference Key", /* name */ "Difference Key",
/* width+range */ 200, 80, 250, /* width+range */ 200, 80, 250,

View File

@@ -144,6 +144,7 @@ static void node_composit_exec_dilateerode(void *data, bNode *node, bNodeStack *
} }
bNodeType cmp_node_dilateerode= { bNodeType cmp_node_dilateerode= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_DILATEERODE, /* type code */ CMP_NODE_DILATEERODE,
/* name */ "Dilate/Erode", /* name */ "Dilate/Erode",
/* width+range */ 130, 100, 320, /* width+range */ 130, 100, 320,

View File

@@ -145,6 +145,7 @@ static void node_composit_exec_displace(void *data, bNode *node, bNodeStack **in
} }
bNodeType cmp_node_displace= { bNodeType cmp_node_displace= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_DISPLACE, /* type code */ CMP_NODE_DISPLACE,
/* name */ "Displace", /* name */ "Displace",
/* width+range */ 140, 100, 320, /* width+range */ 140, 100, 320,

View File

@@ -215,6 +215,7 @@ static void node_composit_exec_filter(void *data, bNode *node, bNodeStack **in,
bNodeType cmp_node_filter= { bNodeType cmp_node_filter= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_FILTER, /* type code */ CMP_NODE_FILTER,
/* name */ "Filter", /* name */ "Filter",
/* width+range */ 80, 40, 120, /* width+range */ 80, 40, 120,

View File

@@ -86,6 +86,7 @@ static void node_composit_exec_flip(void *data, bNode *node, bNodeStack **in, bN
} }
bNodeType cmp_node_flip= { bNodeType cmp_node_flip= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_FLIP, /* type code */ CMP_NODE_FLIP,
/* name */ "Flip", /* name */ "Flip",
/* width+range */ 140, 100, 320, /* width+range */ 140, 100, 320,

View File

@@ -102,6 +102,7 @@ static void node_composit_init_hue_sat(bNode* node)
} }
bNodeType cmp_node_hue_sat= { bNodeType cmp_node_hue_sat= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_HUE_SAT, /* type code */ CMP_NODE_HUE_SAT,
/* name */ "Hue Saturation Value", /* name */ "Hue Saturation Value",
/* width+range */ 150, 80, 250, /* width+range */ 150, 80, 250,

View File

@@ -85,6 +85,7 @@ static void node_composit_exec_idmask(void *data, bNode *node, bNodeStack **in,
bNodeType cmp_node_idmask= { bNodeType cmp_node_idmask= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_ID_MASK, /* type code */ CMP_NODE_ID_MASK,
/* name */ "ID Mask", /* name */ "ID Mask",
/* width+range */ 140, 100, 320, /* width+range */ 140, 100, 320,

View File

@@ -211,6 +211,7 @@ static void node_composit_init_image(bNode* node)
} }
bNodeType cmp_node_image= { bNodeType cmp_node_image= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_IMAGE, /* type code */ CMP_NODE_IMAGE,
/* name */ "Image", /* name */ "Image",
/* width+range */ 120, 80, 300, /* width+range */ 120, 80, 300,
@@ -328,6 +329,7 @@ static void node_composit_exec_rlayers(void *data, bNode *node, bNodeStack **in,
bNodeType cmp_node_rlayers= { bNodeType cmp_node_rlayers= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_R_LAYERS, /* type code */ CMP_NODE_R_LAYERS,
/* name */ "Render Layers", /* name */ "Render Layers",
/* width+range */ 150, 100, 300, /* width+range */ 150, 100, 300,

View File

@@ -104,6 +104,7 @@ static void node_composit_init_luma_matte(bNode *node)
}; };
bNodeType cmp_node_luma_matte={ bNodeType cmp_node_luma_matte={
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_LUMA_MATTE, /* type code */ CMP_NODE_LUMA_MATTE,
/* name */ "Luminance Key", /* name */ "Luminance Key",
/* width+range */ 200, 80, 250, /* width+range */ 200, 80, 250,

View File

@@ -130,6 +130,7 @@ static void node_composit_exec_mapuv(void *data, bNode *node, bNodeStack **in, b
} }
bNodeType cmp_node_mapuv= { bNodeType cmp_node_mapuv= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_MAP_UV, /* type code */ CMP_NODE_MAP_UV,
/* name */ "Map UV", /* name */ "Map UV",
/* width+range */ 140, 100, 320, /* width+range */ 140, 100, 320,

View File

@@ -80,6 +80,7 @@ static void node_composit_init_map_value(bNode* node)
} }
bNodeType cmp_node_map_value= { bNodeType cmp_node_map_value= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_MAP_VALUE, /* type code */ CMP_NODE_MAP_VALUE,
/* name */ "Map Value", /* name */ "Map Value",
/* width+range */ 100, 60, 150, /* width+range */ 100, 60, 150,

View File

@@ -159,6 +159,7 @@ static void node_composit_exec_math(void *data, bNode *node, bNodeStack **in, bN
} }
bNodeType cmp_node_math= { bNodeType cmp_node_math= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_MATH, /* type code */ CMP_NODE_MATH,
/* name */ "Math", /* name */ "Math",
/* width+range */ 120, 110, 160, /* width+range */ 120, 110, 160,

View File

@@ -78,6 +78,7 @@ static void node_composit_exec_mix_rgb(void *data, bNode *node, bNodeStack **in,
/* custom1 = mix type */ /* custom1 = mix type */
bNodeType cmp_node_mix_rgb= { bNodeType cmp_node_mix_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_MIX_RGB, /* type code */ CMP_NODE_MIX_RGB,
/* name */ "Mix", /* name */ "Mix",
/* width+range */ 80, 60, 120, /* width+range */ 80, 60, 120,

View File

@@ -78,6 +78,7 @@ static void node_composit_exec_normal(void *data, bNode *node, bNodeStack **in,
} }
bNodeType cmp_node_normal= { bNodeType cmp_node_normal= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_NORMAL, /* type code */ CMP_NODE_NORMAL,
/* name */ "Normal", /* name */ "Normal",
/* width+range */ 100, 60, 200, /* width+range */ 100, 60, 200,

View File

@@ -92,6 +92,7 @@ static void node_composit_init_output_file(bNode *node)
}; };
bNodeType cmp_node_output_file= { bNodeType cmp_node_output_file= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_OUTPUT_FILE, /* type code */ CMP_NODE_OUTPUT_FILE,
/* name */ "File Output", /* name */ "File Output",
/* width+range */ 140, 80, 300, /* width+range */ 140, 80, 300,

View File

@@ -44,6 +44,7 @@ static void node_composit_exec_rgb(void *data, bNode *node, bNodeStack **in, bNo
} }
bNodeType cmp_node_rgb= { bNodeType cmp_node_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_RGB, /* type code */ CMP_NODE_RGB,
/* name */ "RGB", /* name */ "RGB",
/* width+range */ 100, 60, 140, /* width+range */ 100, 60, 140,

View File

@@ -133,6 +133,7 @@ static void node_composit_exec_rotate(void *data, bNode *node, bNodeStack **in,
} }
bNodeType cmp_node_rotate= { bNodeType cmp_node_rotate= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_ROTATE, /* type code */ CMP_NODE_ROTATE,
/* name */ "Rotate", /* name */ "Rotate",
/* width+range */ 140, 100, 320, /* width+range */ 140, 100, 320,

View File

@@ -102,6 +102,7 @@ static void node_composit_exec_scale(void *data, bNode *node, bNodeStack **in, b
}; };
bNodeType cmp_node_scale= { bNodeType cmp_node_scale= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SCALE, /* type code */ CMP_NODE_SCALE,
/* name */ "Scale", /* name */ "Scale",
/* width+range */ 140, 100, 320, /* width+range */ 140, 100, 320,

View File

@@ -97,6 +97,7 @@ static void node_composit_exec_sephsva(void *data, bNode *node, bNodeStack **in,
} }
bNodeType cmp_node_sephsva= { bNodeType cmp_node_sephsva= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SEPHSVA, /* type code */ CMP_NODE_SEPHSVA,
/* name */ "Separate HSVA", /* name */ "Separate HSVA",
/* width+range */ 80, 40, 140, /* width+range */ 80, 40, 140,
@@ -168,6 +169,7 @@ static void node_composit_exec_combhsva(void *data, bNode *node, bNodeStack **in
} }
bNodeType cmp_node_combhsva= { bNodeType cmp_node_combhsva= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COMBHSVA, /* type code */ CMP_NODE_COMBHSVA,
/* name */ "Combine HSVA", /* name */ "Combine HSVA",
/* width+range */ 80, 40, 140, /* width+range */ 80, 40, 140,

View File

@@ -75,6 +75,7 @@ static void node_composit_exec_seprgba(void *data, bNode *node, bNodeStack **in,
} }
bNodeType cmp_node_seprgba= { bNodeType cmp_node_seprgba= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SEPRGBA, /* type code */ CMP_NODE_SEPRGBA,
/* name */ "Separate RGBA", /* name */ "Separate RGBA",
/* width+range */ 80, 40, 140, /* width+range */ 80, 40, 140,
@@ -144,6 +145,7 @@ static void node_composit_exec_combrgba(void *data, bNode *node, bNodeStack **in
} }
bNodeType cmp_node_combrgba= { bNodeType cmp_node_combrgba= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COMBRGBA, /* type code */ CMP_NODE_COMBRGBA,
/* name */ "Combine RGBA", /* name */ "Combine RGBA",
/* width+range */ 80, 40, 140, /* width+range */ 80, 40, 140,

View File

@@ -96,6 +96,7 @@ static void node_composit_exec_sepycca(void *data, bNode *node, bNodeStack **in,
} }
bNodeType cmp_node_sepycca= { bNodeType cmp_node_sepycca= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SEPYCCA, /* type code */ CMP_NODE_SEPYCCA,
/* name */ "Separate YCbCrA", /* name */ "Separate YCbCrA",
/* width+range */ 80, 40, 140, /* width+range */ 80, 40, 140,
@@ -174,6 +175,7 @@ static void node_composit_exec_combycca(void *data, bNode *node, bNodeStack **in
} }
bNodeType cmp_node_combycca= { bNodeType cmp_node_combycca= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COMBYCCA, /* type code */ CMP_NODE_COMBYCCA,
/* name */ "Combine YCbCrA", /* name */ "Combine YCbCrA",
/* width+range */ 80, 40, 140, /* width+range */ 80, 40, 140,

View File

@@ -97,6 +97,7 @@ static void node_composit_exec_sepyuva(void *data, bNode *node, bNodeStack **in,
} }
bNodeType cmp_node_sepyuva= { bNodeType cmp_node_sepyuva= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SEPYUVA, /* type code */ CMP_NODE_SEPYUVA,
/* name */ "Separate YUVA", /* name */ "Separate YUVA",
/* width+range */ 80, 40, 140, /* width+range */ 80, 40, 140,
@@ -168,6 +169,7 @@ static void node_composit_exec_combyuva(void *data, bNode *node, bNodeStack **in
} }
bNodeType cmp_node_combyuva= { bNodeType cmp_node_combyuva= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COMBYUVA, /* type code */ CMP_NODE_COMBYUVA,
/* name */ "Combine YUVA", /* name */ "Combine YUVA",
/* width+range */ 80, 40, 140, /* width+range */ 80, 40, 140,

View File

@@ -71,6 +71,7 @@ static void node_composit_exec_setalpha(void *data, bNode *node, bNodeStack **in
} }
bNodeType cmp_node_setalpha= { bNodeType cmp_node_setalpha= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SETALPHA, /* type code */ CMP_NODE_SETALPHA,
/* name */ "Set Alpha", /* name */ "Set Alpha",
/* width+range */ 120, 40, 140, /* width+range */ 120, 40, 140,

View File

@@ -143,6 +143,7 @@ static void node_composit_init_splitviewer(bNode* node)
} }
bNodeType cmp_node_splitviewer= { bNodeType cmp_node_splitviewer= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SPLITVIEWER, /* type code */ CMP_NODE_SPLITVIEWER,
/* name */ "SplitViewer", /* name */ "SplitViewer",
/* width+range */ 140, 100, 320, /* width+range */ 140, 100, 320,

View File

@@ -118,6 +118,7 @@ static void node_composit_exec_texture(void *data, bNode *node, bNodeStack **in,
} }
bNodeType cmp_node_texture= { bNodeType cmp_node_texture= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_TEXTURE, /* type code */ CMP_NODE_TEXTURE,
/* name */ "Texture", /* name */ "Texture",
/* width+range */ 120, 80, 240, /* width+range */ 120, 80, 240,

View File

@@ -57,6 +57,7 @@ static void node_composit_exec_translate(void *data, bNode *node, bNodeStack **i
} }
bNodeType cmp_node_translate= { bNodeType cmp_node_translate= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_TRANSLATE, /* type code */ CMP_NODE_TRANSLATE,
/* name */ "Translate", /* name */ "Translate",
/* width+range */ 140, 100, 320, /* width+range */ 140, 100, 320,

View File

@@ -81,6 +81,7 @@ static void node_composit_init_valtorgb(bNode* node)
} }
bNodeType cmp_node_valtorgb= { bNodeType cmp_node_valtorgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_VALTORGB, /* type code */ CMP_NODE_VALTORGB,
/* name */ "ColorRamp", /* name */ "ColorRamp",
/* width+range */ 240, 200, 300, /* width+range */ 240, 200, 300,
@@ -134,6 +135,7 @@ static void node_composit_exec_rgbtobw(void *data, bNode *node, bNodeStack **in,
} }
bNodeType cmp_node_rgbtobw= { bNodeType cmp_node_rgbtobw= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_RGBTOBW, /* type code */ CMP_NODE_RGBTOBW,
/* name */ "RGB to BW", /* name */ "RGB to BW",
/* width+range */ 80, 40, 120, /* width+range */ 80, 40, 120,

View File

@@ -43,6 +43,7 @@ static void node_composit_exec_value(void *data, bNode *node, bNodeStack **in, b
} }
bNodeType cmp_node_value= { bNodeType cmp_node_value= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_VALUE, /* type code */ CMP_NODE_VALUE,
/* name */ "Value", /* name */ "Value",
/* width+range */ 80, 40, 120, /* width+range */ 80, 40, 120,

View File

@@ -117,6 +117,7 @@ static void node_composit_init_vecblur(bNode* node)
/* custom1: itterations, custom2: maxspeed (0 = nolimit) */ /* custom1: itterations, custom2: maxspeed (0 = nolimit) */
bNodeType cmp_node_vecblur= { bNodeType cmp_node_vecblur= {
/* next, prev */ NULL, NULL,
/* type code */ CMP_NODE_VECBLUR, /* type code */ CMP_NODE_VECBLUR,
/* name */ "Vector Blur", /* name */ "Vector Blur",
/* width+range */ 120, 80, 200, /* width+range */ 120, 80, 200,

View File

@@ -125,6 +125,7 @@ static void node_composit_init_viewer(bNode* node)
} }
bNodeType cmp_node_viewer= { bNodeType cmp_node_viewer= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_VIEWER, /* type code */ CMP_NODE_VIEWER,
/* name */ "Viewer", /* name */ "Viewer",
/* width+range */ 80, 60, 200, /* width+range */ 80, 60, 200,

View File

@@ -137,6 +137,7 @@ static void node_composit_exec_zcombine(void *data, bNode *node, bNodeStack **in
} }
bNodeType cmp_node_zcombine= { bNodeType cmp_node_zcombine= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_ZCOMBINE, /* type code */ CMP_NODE_ZCOMBINE,
/* name */ "Z Combine", /* name */ "Z Combine",
/* width+range */ 80, 40, 120, /* width+range */ 80, 40, 120,

View File

@@ -50,6 +50,7 @@ static void node_shader_exec_camera(void *data, bNode *node, bNodeStack **in, bN
} }
bNodeType sh_node_camera= { bNodeType sh_node_camera= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_CAMERA, /* type code */ SH_NODE_CAMERA,
/* name */ "Camera Data", /* name */ "Camera Data",
/* width+range */ 95, 95, 120, /* width+range */ 95, 95, 120,

View File

@@ -57,6 +57,7 @@ static void node_shader_init_curve_vec(bNode* node)
} }
bNodeType sh_node_curve_vec= { bNodeType sh_node_curve_vec= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_CURVE_VEC, /* type code */ SH_NODE_CURVE_VEC,
/* name */ "Vector Curves", /* name */ "Vector Curves",
/* width+range */ 200, 140, 320, /* width+range */ 200, 140, 320,
@@ -97,6 +98,7 @@ static void node_shader_init_curve_rgb(bNode *node)
} }
bNodeType sh_node_curve_rgb= { bNodeType sh_node_curve_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_CURVE_RGB, /* type code */ SH_NODE_CURVE_RGB,
/* name */ "RGB Curves", /* name */ "RGB Curves",
/* width+range */ 200, 140, 320, /* width+range */ 200, 140, 320,

View File

@@ -115,6 +115,7 @@ static void node_shader_init_geometry(bNode *node)
/* node type definition */ /* node type definition */
bNodeType sh_node_geom= { bNodeType sh_node_geom= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_GEOMETRY, /* type code */ SH_NODE_GEOMETRY,
/* name */ "Geometry", /* name */ "Geometry",
/* width+range */ 120, 80, 160, /* width+range */ 120, 80, 160,

View File

@@ -70,6 +70,7 @@ static void node_shader_init_mapping(bNode *node)
} }
bNodeType sh_node_mapping= { bNodeType sh_node_mapping= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_MAPPING, /* type code */ SH_NODE_MAPPING,
/* name */ "Mapping", /* name */ "Mapping",
/* width+range */ 240, 160, 320, /* width+range */ 240, 160, 320,

View File

@@ -136,6 +136,7 @@ static void node_shader_init_material(bNode* node)
bNodeType sh_node_material= { bNodeType sh_node_material= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_MATERIAL, /* type code */ SH_NODE_MATERIAL,
/* name */ "Material", /* name */ "Material",
/* width+range */ 120, 80, 240, /* width+range */ 120, 80, 240,

View File

@@ -179,6 +179,7 @@ bNodeStack **out)
} }
bNodeType sh_node_math= { bNodeType sh_node_math= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_MATH, /* type code */ SH_NODE_MATH,
/* name */ "Math", /* name */ "Math",
/* width+range */ 120, 110, 160, /* width+range */ 120, 110, 160,

View File

@@ -61,6 +61,7 @@ static void node_shader_exec_mix_rgb(void *data, bNode *node, bNodeStack **in, b
} }
bNodeType sh_node_mix_rgb= { bNodeType sh_node_mix_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_MIX_RGB, /* type code */ SH_NODE_MIX_RGB,
/* name */ "Mix", /* name */ "Mix",
/* width+range */ 100, 60, 150, /* width+range */ 100, 60, 150,

View File

@@ -58,6 +58,7 @@ static void node_shader_exec_normal(void *data, bNode *node, bNodeStack **in, bN
} }
bNodeType sh_node_normal= { bNodeType sh_node_normal= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_NORMAL, /* type code */ SH_NODE_NORMAL,
/* name */ "Normal", /* name */ "Normal",
/* width+range */ 100, 60, 200, /* width+range */ 100, 60, 200,

View File

@@ -63,6 +63,7 @@ static void node_shader_exec_output(void *data, bNode *node, bNodeStack **in, bN
} }
bNodeType sh_node_output= { bNodeType sh_node_output= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_OUTPUT, /* type code */ SH_NODE_OUTPUT,
/* name */ "Output", /* name */ "Output",
/* width+range */ 80, 60, 200, /* width+range */ 80, 60, 200,

View File

@@ -43,6 +43,7 @@ static void node_shader_exec_rgb(void *data, bNode *node, bNodeStack **in, bNode
} }
bNodeType sh_node_rgb= { bNodeType sh_node_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_RGB, /* type code */ SH_NODE_RGB,
/* name */ "RGB", /* name */ "RGB",
/* width+range */ 100, 60, 140, /* width+range */ 100, 60, 140,

View File

@@ -55,6 +55,7 @@ bNodeStack **out)
} }
bNodeType sh_node_squeeze= { bNodeType sh_node_squeeze= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_SQUEEZE, /* type code */ SH_NODE_SQUEEZE,
/* name */ "Squeeze Value", /* name */ "Squeeze Value",
/* width+range */ 120, 110, 160, /* width+range */ 120, 110, 160,

View File

@@ -111,6 +111,7 @@ static void node_shader_exec_texture(void *data, bNode *node, bNodeStack **in, b
} }
bNodeType sh_node_texture= { bNodeType sh_node_texture= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_TEXTURE, /* type code */ SH_NODE_TEXTURE,
/* name */ "Texture", /* name */ "Texture",
/* width+range */ 120, 80, 240, /* width+range */ 120, 80, 240,

View File

@@ -60,6 +60,7 @@ static void node_shader_init_valtorgb(bNode *node)
} }
bNodeType sh_node_valtorgb= { bNodeType sh_node_valtorgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_VALTORGB, /* type code */ SH_NODE_VALTORGB,
/* name */ "ColorRamp", /* name */ "ColorRamp",
/* width+range */ 240, 200, 300, /* width+range */ 240, 200, 300,
@@ -93,6 +94,7 @@ static void node_shader_exec_rgbtobw(void *data, bNode *node, bNodeStack **in, b
} }
bNodeType sh_node_rgbtobw= { bNodeType sh_node_rgbtobw= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_RGBTOBW, /* type code */ SH_NODE_RGBTOBW,
/* name */ "RGB to BW", /* name */ "RGB to BW",
/* width+range */ 80, 40, 120, /* width+range */ 80, 40, 120,

View File

@@ -45,6 +45,7 @@ static void node_shader_exec_value(void *data, bNode *node, bNodeStack **in, bNo
bNodeType sh_node_value= { bNodeType sh_node_value= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_VALUE, /* type code */ SH_NODE_VALUE,
/* name */ "Value", /* name */ "Value",
/* width+range */ 80, 50, 120, /* width+range */ 80, 50, 120,

View File

@@ -100,6 +100,7 @@ static void node_shader_exec_vect_math(void *data, bNode *node, bNodeStack **in,
} }
bNodeType sh_node_vect_math= { bNodeType sh_node_vect_math= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_VECT_MATH, /* type code */ SH_NODE_VECT_MATH,
/* name */ "Vector Math", /* name */ "Vector Math",
/* width+range */ 80, 75, 140, /* width+range */ 80, 75, 140,

View File

@@ -1621,19 +1621,19 @@ static void node_composit_set_butfunc(bNodeType *ntype)
void init_node_butfuncs(void) void init_node_butfuncs(void)
{ {
bNodeType **typedefs; bNodeType *ntype;
/* shader nodes */ /* shader nodes */
typedefs= node_all_shaders; /* BKE_node.h */ ntype= node_all_shaders.first;
while( *typedefs) { while(ntype) {
node_shader_set_butfunc(*typedefs); node_shader_set_butfunc(ntype);
typedefs++; ntype= ntype->next;
} }
/* composit nodes */ /* composit nodes */
typedefs= node_all_composit; /* BKE_node.h */ ntype= node_all_composit.first;
while( *typedefs) { while(ntype) {
node_composit_set_butfunc(*typedefs); node_composit_set_butfunc(ntype);
typedefs++; ntype= ntype->next;
} }
} }

View File

@@ -247,9 +247,12 @@ static void node_make_addmenu(SpaceNode *snode, int nodeclass, uiBlock *block)
tot++; tot++;
} }
else { else {
for(typedefs= ntree->alltypes; *typedefs; typedefs++) bNodeType *type = ntree->alltypes.first;
if( (*typedefs)->nclass == nodeclass ) while(type) {
if(type->nclass == nodeclass)
tot++; tot++;
type= type->next;
}
} }
} }
@@ -270,10 +273,12 @@ static void node_make_addmenu(SpaceNode *snode, int nodeclass, uiBlock *block)
} }
} }
else { else {
for(a=0, typedefs= ntree->alltypes; *typedefs; typedefs++) { bNodeType *type;
if( (*typedefs)->nclass == nodeclass ) { for(a=0, type= ntree->alltypes.first; type; type=type->next) {
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, (*typedefs)->name, 0, if( type->nclass == nodeclass ) {
yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, (*typedefs)->type, ""); printf("node %s\n", type->name);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, type->name, 0,
yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, type->type, "");
a++; a++;
} }
} }

View File

@@ -1576,7 +1576,6 @@ static TBitem *node_add_sublevel(ListBase *storage, bNodeTree *ntree, int nodecl
{ {
static TBitem _addmenu[]= { { 0, " ", 0, NULL}, { -1, "", 0, NULL}}; static TBitem _addmenu[]= { { 0, " ", 0, NULL}, { -1, "", 0, NULL}};
Link *link; Link *link;
bNodeType **typedefs;
TBitem *addmenu; TBitem *addmenu;
int tot= 0, a; int tot= 0, a;
@@ -1588,10 +1587,14 @@ static TBitem *node_add_sublevel(ListBase *storage, bNodeTree *ntree, int nodecl
tot++; tot++;
} }
else { else {
for(typedefs= ntree->alltypes; *typedefs; typedefs++) bNodeType *ntype = ntree->alltypes.first;
if( (*typedefs)->nclass == nodeclass ) while(ntype) {
if(ntype->nclass == nodeclass) {
tot++; tot++;
} }
ntype= ntype->next;
}
}
} }
if(tot==0) { if(tot==0) {
return _addmenu; return _addmenu;
@@ -1612,10 +1615,11 @@ static TBitem *node_add_sublevel(ListBase *storage, bNodeTree *ntree, int nodecl
} }
} }
else { else {
for(a=0, typedefs= ntree->alltypes; *typedefs; typedefs++) { bNodeType *ntype= ntree->alltypes.first;
if( (*typedefs)->nclass == nodeclass ) { for(a=0; ntype; ntype= ntype->next) {
addmenu[a].name= (*typedefs)->name; if( ntype->nclass == nodeclass ) {
addmenu[a].retval= (*typedefs)->type; addmenu[a].name= ntype->name;
addmenu[a].retval= ntype->type;
a++; a++;
} }
} }

View File

@@ -79,6 +79,7 @@
#include "BKE_global.h" #include "BKE_global.h"
#include "BKE_main.h" #include "BKE_main.h"
#include "BKE_mball.h" #include "BKE_mball.h"
#include "BKE_node.h"
#include "BKE_packedFile.h" #include "BKE_packedFile.h"
#include "BKE_utildefines.h" #include "BKE_utildefines.h"
@@ -968,6 +969,8 @@ void exit_usiblender(void)
BLI_freelistN(&U.themes); BLI_freelistN(&U.themes);
BIF_preview_free_dbase(); BIF_preview_free_dbase();
free_nodesystem();
if(totblock!=0) { if(totblock!=0) {
printf("Error Totblock: %d\n",totblock); printf("Error Totblock: %d\n",totblock);
MEM_printmemlist(); MEM_printmemlist();

View File

@@ -57,6 +57,7 @@
#include "BKE_material.h" #include "BKE_material.h"
#include "BKE_packedFile.h" #include "BKE_packedFile.h"
#include "BKE_scene.h" #include "BKE_scene.h"
#include "BKE_node.h"
#include "BIF_gl.h" #include "BIF_gl.h"
#include "BIF_graphics.h" #include "BIF_graphics.h"
@@ -313,6 +314,8 @@ int main(int argc, char **argv)
*/ */
pluginapi_force_ref(); pluginapi_force_ref();
init_nodesystem();
initglobals(); /* blender.c */ initglobals(); /* blender.c */
syshandle = SYS_GetSystem(); syshandle = SYS_GetSystem();