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

View File

@@ -66,6 +66,10 @@
/* not very important, but the stack solver likes to know a maximum */
#define MAX_SOCKET 64
static ListBase empty_list = {NULL, NULL};
ListBase node_all_composit = {NULL, NULL};
ListBase node_all_shaders = {NULL, NULL};
/* ************** Type stuff ********** */
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;
}
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)
typedefs++;
return *typedefs;
return NULL;
}
}
@@ -95,7 +99,7 @@ void ntreeInitTypes(bNodeTree *ntree)
else if(ntree->type==NTREE_COMPOSIT)
ntree->alltypes= node_all_composit;
else {
ntree->alltypes= NULL;
ntree->alltypes= empty_list;
printf("Error: no type definitions for nodes\n");
}
@@ -223,10 +227,9 @@ void ntreeVerifyTypes(bNodeTree *ntree)
{
bNode *node;
/* commented out, in linux a 2nd initialize on a Scene ntree from a lib crashes... */
/* if((ntree->init & NTREE_TYPE_INIT)==0) */
ntreeInitTypes(ntree);
/* if((ntree->init & NTREE_TYPE_INIT)==0) */
ntreeInitTypes(ntree);
/* check inputs and outputs, and remove or insert them */
for(node= ntree->nodes.first; node; node= node->next)
nodeVerifyType(ntree, node);
@@ -236,6 +239,7 @@ void ntreeVerifyTypes(bNodeTree *ntree)
/* ************** Group stuff ********** */
bNodeType node_group_typeinfo= {
/* next,prev */ NULL, NULL,
/* type code */ NODE_GROUP,
/* name */ "Group",
/* width+range */ 120, 60, 200,
@@ -244,7 +248,8 @@ bNodeType node_group_typeinfo= {
/* output sock */ NULL,
/* storage */ "",
/* execfunc */ NULL,
/* butfunc */ NULL,
/* initfunc */ NULL
};
/* tag internal sockets */
@@ -345,7 +350,7 @@ void ntreeMakeOwnType(bNodeTree *ngroup)
/* make own type struct */
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 */
if(totin) {
@@ -863,6 +868,8 @@ bNodeTree *ntreeAddTree(int type)
{
bNodeTree *ntree= MEM_callocN(sizeof(bNodeTree), "new node tree");
ntree->type= type;
ntree->alltypes.first = NULL;
ntree->alltypes.last = NULL;
ntreeInitTypes(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_listBase.h"
struct ListBase;
struct SpaceNode;
struct bNodeLink;
struct bNodeType;
@@ -162,10 +162,11 @@ typedef struct bNodeTree {
int type, init; /* set init on fileread */
int stacksize; /* amount of elements in stack */
int cur_index; /* sockets in groups have unique identifiers, adding new sockets always will increase this counter */
struct bNodeType **alltypes; /* type definitions, set on fileread, no read/write */
int cur_index; /* sockets in groups have unique identifiers, adding new sockets always
will increase this counter */
ListBase alltypes; /* type definitions */
struct bNodeType *owntype; /* for groups or dynamic trees, no read/write */
/* callbacks */
void (*timecursor)(int nr);
void (*stats_draw)(char *str);

View File

@@ -91,67 +91,8 @@ extern bNodeType cmp_node_rotate;
extern bNodeType cmp_node_scale;
extern bNodeType cmp_node_flip;
extern bNodeType cmp_node_displace;
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
};
extern bNodeType cmp_node_mapuv;
#endif

View File

@@ -57,30 +57,6 @@ extern bNodeType sh_node_math;
extern bNodeType sh_node_vect_math;
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

View File

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

View File

@@ -617,6 +617,7 @@ static void node_composit_init_blur(bNode* node)
}
bNodeType cmp_node_blur= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_BLUR,
/* name */ "Blur",
/* 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={
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_CHANNEL_MATTE,
/* name */ "Channel Key",
/* width+range */ 200, 80, 250,

View File

@@ -173,6 +173,7 @@ static void node_composit_init_chroma_matte(bNode *node)
};
bNodeType cmp_node_chroma={
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_CHROMA,
/* name */ "Chroma Key",
/* 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={
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COLOR_SPILL,
/* name */ "Color Spill",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COMPOSITE,
/* name */ "Composite",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_TIME,
/* name */ "Time",
/* width+range */ 140, 100, 320,
@@ -98,6 +99,7 @@ static void node_composit_init_curve_vec(bNode* node)
};
bNodeType cmp_node_curve_vec= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_CURVE_VEC,
/* name */ "Vector Curves",
/* width+range */ 200, 140, 320,
@@ -180,6 +182,7 @@ static void node_composit_init_curve_rgb(bNode* node)
};
bNodeType cmp_node_curve_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_CURVE_RGB,
/* name */ "RGB Curves",
/* width+range */ 200, 140, 320,

View File

@@ -806,6 +806,7 @@ static void node_composit_init_defocus(bNode* node)
};
bNodeType cmp_node_defocus = {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_DEFOCUS,
/* name */ "Defocus",
/* 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={
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_DIFF_MATTE,
/* name */ "Difference Key",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_DILATEERODE,
/* name */ "Dilate/Erode",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_DISPLACE,
/* name */ "Displace",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_FILTER,
/* name */ "Filter",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_FLIP,
/* name */ "Flip",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_HUE_SAT,
/* name */ "Hue Saturation Value",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_ID_MASK,
/* name */ "ID Mask",
/* width+range */ 140, 100, 320,

View File

@@ -211,6 +211,7 @@ static void node_composit_init_image(bNode* node)
}
bNodeType cmp_node_image= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_IMAGE,
/* name */ "Image",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_R_LAYERS,
/* name */ "Render Layers",
/* 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={
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_LUMA_MATTE,
/* name */ "Luminance Key",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_MAP_UV,
/* name */ "Map UV",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_MAP_VALUE,
/* name */ "Map Value",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_MATH,
/* name */ "Math",
/* 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 */
bNodeType cmp_node_mix_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_MIX_RGB,
/* name */ "Mix",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_NORMAL,
/* name */ "Normal",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_OUTPUT_FILE,
/* name */ "File Output",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_RGB,
/* name */ "RGB",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_ROTATE,
/* name */ "Rotate",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SCALE,
/* name */ "Scale",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SEPHSVA,
/* name */ "Separate HSVA",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COMBHSVA,
/* name */ "Combine HSVA",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SEPRGBA,
/* name */ "Separate RGBA",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COMBRGBA,
/* name */ "Combine RGBA",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SEPYCCA,
/* name */ "Separate YCbCrA",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COMBYCCA,
/* name */ "Combine YCbCrA",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SEPYUVA,
/* name */ "Separate YUVA",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_COMBYUVA,
/* name */ "Combine YUVA",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SETALPHA,
/* name */ "Set Alpha",
/* width+range */ 120, 40, 140,

View File

@@ -143,6 +143,7 @@ static void node_composit_init_splitviewer(bNode* node)
}
bNodeType cmp_node_splitviewer= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_SPLITVIEWER,
/* name */ "SplitViewer",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_TEXTURE,
/* name */ "Texture",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_TRANSLATE,
/* name */ "Translate",
/* width+range */ 140, 100, 320,

View File

@@ -81,6 +81,7 @@ static void node_composit_init_valtorgb(bNode* node)
}
bNodeType cmp_node_valtorgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_VALTORGB,
/* name */ "ColorRamp",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_RGBTOBW,
/* name */ "RGB to BW",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_VALUE,
/* name */ "Value",
/* 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) */
bNodeType cmp_node_vecblur= {
/* next, prev */ NULL, NULL,
/* type code */ CMP_NODE_VECBLUR,
/* name */ "Vector Blur",
/* width+range */ 120, 80, 200,

View File

@@ -125,6 +125,7 @@ static void node_composit_init_viewer(bNode* node)
}
bNodeType cmp_node_viewer= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_VIEWER,
/* name */ "Viewer",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ CMP_NODE_ZCOMBINE,
/* name */ "Z Combine",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_CAMERA,
/* name */ "Camera Data",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_CURVE_VEC,
/* name */ "Vector Curves",
/* width+range */ 200, 140, 320,
@@ -97,6 +98,7 @@ static void node_shader_init_curve_rgb(bNode *node)
}
bNodeType sh_node_curve_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_CURVE_RGB,
/* name */ "RGB Curves",
/* width+range */ 200, 140, 320,

View File

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

View File

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

View File

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

View File

@@ -178,7 +178,8 @@ bNodeStack **out)
}
}
bNodeType sh_node_math= {
bNodeType sh_node_math= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_MATH,
/* name */ "Math",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_MIX_RGB,
/* name */ "Mix",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_NORMAL,
/* name */ "Normal",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_OUTPUT,
/* name */ "Output",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_RGB,
/* name */ "RGB",
/* width+range */ 100, 60, 140,

View File

@@ -55,6 +55,7 @@ bNodeStack **out)
}
bNodeType sh_node_squeeze= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_SQUEEZE,
/* name */ "Squeeze Value",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_TEXTURE,
/* name */ "Texture",
/* width+range */ 120, 80, 240,

View File

@@ -60,6 +60,7 @@ static void node_shader_init_valtorgb(bNode *node)
}
bNodeType sh_node_valtorgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_VALTORGB,
/* name */ "ColorRamp",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_RGBTOBW,
/* name */ "RGB to BW",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_VALUE,
/* name */ "Value",
/* 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= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_VECT_MATH,
/* name */ "Vector Math",
/* width+range */ 80, 75, 140,

View File

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

View File

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

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}};
Link *link;
bNodeType **typedefs;
TBitem *addmenu;
int tot= 0, a;
@@ -1588,9 +1587,13 @@ static TBitem *node_add_sublevel(ListBase *storage, bNodeTree *ntree, int nodecl
tot++;
}
else {
for(typedefs= ntree->alltypes; *typedefs; typedefs++)
if( (*typedefs)->nclass == nodeclass )
bNodeType *ntype = ntree->alltypes.first;
while(ntype) {
if(ntype->nclass == nodeclass) {
tot++;
}
ntype= ntype->next;
}
}
}
if(tot==0) {
@@ -1612,15 +1615,16 @@ static TBitem *node_add_sublevel(ListBase *storage, bNodeTree *ntree, int nodecl
}
}
else {
for(a=0, typedefs= ntree->alltypes; *typedefs; typedefs++) {
if( (*typedefs)->nclass == nodeclass ) {
addmenu[a].name= (*typedefs)->name;
addmenu[a].retval= (*typedefs)->type;
bNodeType *ntype= ntree->alltypes.first;
for(a=0; ntype; ntype= ntype->next) {
if( ntype->nclass == nodeclass ) {
addmenu[a].name= ntype->name;
addmenu[a].retval= ntype->type;
a++;
}
}
}
addmenu[a].icon= -1; /* end signal */
addmenu[a].name= "";
addmenu[a].retval= a;

View File

@@ -79,6 +79,7 @@
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_mball.h"
#include "BKE_node.h"
#include "BKE_packedFile.h"
#include "BKE_utildefines.h"
@@ -967,7 +968,9 @@ void exit_usiblender(void)
BLI_freelistN(&U.themes);
BIF_preview_free_dbase();
free_nodesystem();
if(totblock!=0) {
printf("Error Totblock: %d\n",totblock);
MEM_printmemlist();
@@ -986,6 +989,6 @@ void exit_usiblender(void)
SYS_DeleteSystem(SYS_GetSystem());
exit(G.afbreek==1);
}

View File

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