diff options
author | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-02-07 12:33:36 +0300 |
---|---|---|
committer | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-02-07 12:33:36 +0300 |
commit | 2070356a329969be2287e6f8f7575a7e45d13543 (patch) | |
tree | 47ddc31594db82fb9e888b4ffbd71abadd21460b /source | |
parent | d272b70ee09be8c949247404c9324cfffc833976 (diff) |
A simplified way of defining bNodeType structs. Instead of doing full struct member initialization for each node, this uses a couple of helper functions now. This will make it easier to change and extend the bNodeSocket interface in the future. Two examples (normal and mapping shader nodes) included, the rest should be converted too.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_node.h | 12 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 50 | ||||
-rw-r--r-- | source/blender/nodes/SHD_node.h | 4 | ||||
-rw-r--r-- | source/blender/nodes/intern/SHD_nodes/SHD_mapping.c | 30 | ||||
-rw-r--r-- | source/blender/nodes/intern/SHD_nodes/SHD_normal.c | 29 | ||||
-rw-r--r-- | source/blender/nodes/intern/SHD_util.h | 1 |
6 files changed, 86 insertions, 40 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 857150cf873..941083734b4 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -206,6 +206,18 @@ void nodeCopyGroup(struct bNode *gnode); /* ************** COMMON NODES *************** */ +/* Init a new node type struct with default values and callbacks */ +void node_type_init(struct bNodeType *ntype, int type, const char *name, short nclass, short flag, + struct bNodeSocketType *inputs, struct bNodeSocketType *outputs); +void node_type_size(struct bNodeType *ntype, int width, int minwidth, int maxwidth); +void node_type_storage(struct bNodeType *ntype, + const char *storagename, + void (*initfunc)(struct bNode *), + void (*freestoragefunc)(struct bNode *), + void (*copystoragefunc)(struct bNode *, struct bNode *)); +void node_type_exec(struct bNodeType *ntype, void (*execfunc)(void *data, struct bNode *, struct bNodeStack **, struct bNodeStack **)); +void node_type_gpu(struct bNodeType *ntype, int (*gpufunc)(struct GPUMaterial *mat, struct bNode *node, struct GPUNodeStack *in, struct GPUNodeStack *out)); + #define NODE_GROUP 2 #define NODE_GROUP_MENU 1000 #define NODE_DYNAMIC_MENU 4000 diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 85c82dbf9bc..f6487bf1d19 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -43,6 +43,7 @@ #include "BKE_animsys.h" #include "BKE_action.h" #include "BKE_fcurve.h" +#include "BKE_node.h" #include "BKE_utildefines.h" #include "PIL_time.h" @@ -3232,6 +3233,51 @@ int ntreeTexTagAnimated(bNodeTree *ntree) /* ************* node definition init ********** */ +void node_type_init(bNodeType *ntype, int type, const char *name, short nclass, short flag, + struct bNodeSocketType *inputs, struct bNodeSocketType *outputs) +{ + memset(ntype, 0, sizeof(bNodeType)); + + ntype->type = type; + ntype->name = name; + ntype->nclass = nclass; + ntype->flag = flag; + + ntype->inputs = inputs; + ntype->outputs = outputs; + + /* default size values */ + ntype->width = 140; + ntype->minwidth = 100; + ntype->maxwidth = 320; +} + +void node_type_size(struct bNodeType *ntype, int width, int minwidth, int maxwidth) +{ + ntype->width = width; + ntype->minwidth = minwidth; + ntype->maxwidth = maxwidth; +} + +void node_type_storage(bNodeType *ntype, const char *storagename, void (*initfunc)(struct bNode *), void (*freestoragefunc)(struct bNode *), void (*copystoragefunc)(struct bNode *, struct bNode *)) +{ + strncpy(ntype->storagename, storagename, sizeof(ntype->storagename)); + ntype->initfunc = initfunc; + ntype->copystoragefunc = copystoragefunc; + ntype->freestoragefunc = freestoragefunc; +} + +void node_type_exec(struct bNodeType *ntype, void (*execfunc)(void *data, struct bNode *, struct bNodeStack **, struct bNodeStack **)) +{ + ntype->execfunc = execfunc; +} + +void node_type_gpu(struct bNodeType *ntype, int (*gpufunc)(struct GPUMaterial *mat, struct bNode *node, struct GPUNodeStack *in, struct GPUNodeStack *out)) +{ + ntype->gpufunc = gpufunc; +} + + static bNodeType *is_nodetype_registered(ListBase *typelist, int type, ID *id) { bNodeType *ntype= typelist->first; @@ -3337,9 +3383,9 @@ static void registerShaderNodes(ListBase *ntypelist) nodeRegisterType(ntypelist, &sh_node_mix_rgb); nodeRegisterType(ntypelist, &sh_node_valtorgb); nodeRegisterType(ntypelist, &sh_node_rgbtobw); - nodeRegisterType(ntypelist, &sh_node_normal); + register_node_type_sh_normal(ntypelist); nodeRegisterType(ntypelist, &sh_node_geom); - nodeRegisterType(ntypelist, &sh_node_mapping); + register_node_type_sh_mapping(ntypelist); nodeRegisterType(ntypelist, &sh_node_curve_vec); nodeRegisterType(ntypelist, &sh_node_curve_rgb); nodeRegisterType(ntypelist, &sh_node_math); diff --git a/source/blender/nodes/SHD_node.h b/source/blender/nodes/SHD_node.h index 80cd0c2e73c..99a016c5009 100644 --- a/source/blender/nodes/SHD_node.h +++ b/source/blender/nodes/SHD_node.h @@ -48,9 +48,9 @@ extern bNodeType sh_node_mix_rgb; extern bNodeType sh_node_valtorgb; extern bNodeType sh_node_rgbtobw; extern bNodeType sh_node_texture; -extern bNodeType sh_node_normal; +void register_node_type_sh_normal(ListBase *lb); extern bNodeType sh_node_geom; -extern bNodeType sh_node_mapping; +void register_node_type_sh_mapping(ListBase *lb); extern bNodeType sh_node_curve_vec; extern bNodeType sh_node_curve_rgb; extern bNodeType sh_node_math; diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c b/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c index f01ed3d7ab8..dce8d1962c7 100644 --- a/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c +++ b/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c @@ -83,22 +83,16 @@ static int gpu_shader_mapping(GPUMaterial *mat, bNode *node, GPUNodeStack *in, G return GPU_stack_link(mat, "mapping", in, out, tmat, tmin, tmax, tdomin, tdomax); } -bNodeType sh_node_mapping= { - /* *next,*prev */ NULL, NULL, - /* type code */ SH_NODE_MAPPING, - /* name */ "Mapping", - /* width+range */ 240, 160, 320, - /* class+opts */ NODE_CLASS_OP_VECTOR, NODE_OPTIONS, - /* input sock */ sh_node_mapping_in, - /* output sock */ sh_node_mapping_out, - /* storage */ "TexMapping", - /* execfunc */ node_shader_exec_mapping, - /* butfunc */ NULL, - /* initfunc */ node_shader_init_mapping, - /* freestoragefunc */ node_free_standard_storage, - /* copystoragefunc */ node_copy_standard_storage, - /* id */ NULL, NULL, NULL, - /* gpufunc */ gpu_shader_mapping +void register_node_type_sh_mapping(ListBase *lb) +{ + static bNodeType ntype; -}; - + node_type_init(&ntype, SH_NODE_MAPPING, "Mapping", NODE_CLASS_OP_VECTOR, NODE_OPTIONS, + sh_node_mapping_in, sh_node_mapping_out); + node_type_size(&ntype, 240, 160, 320); + node_type_storage(&ntype, "TexMapping", node_shader_init_mapping, node_free_standard_storage, node_copy_standard_storage); + node_type_exec(&ntype, node_shader_exec_mapping); + node_type_gpu(&ntype, gpu_shader_mapping); + + nodeRegisterType(lb, &ntype); +} diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_normal.c b/source/blender/nodes/intern/SHD_nodes/SHD_normal.c index 8054f184cea..35c8f44c706 100644 --- a/source/blender/nodes/intern/SHD_nodes/SHD_normal.c +++ b/source/blender/nodes/intern/SHD_nodes/SHD_normal.c @@ -65,21 +65,14 @@ static int gpu_shader_normal(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GP return GPU_stack_link(mat, "normal", in, out, vec); } -bNodeType sh_node_normal= { - /* *next,*prev */ NULL, NULL, - /* type code */ SH_NODE_NORMAL, - /* name */ "Normal", - /* width+range */ 100, 60, 200, - /* class+opts */ NODE_CLASS_OP_VECTOR, NODE_OPTIONS, - /* input sock */ sh_node_normal_in, - /* output sock */ sh_node_normal_out, - /* storage */ "", - /* execfunc */ node_shader_exec_normal, - /* butfunc */ NULL, - /* initfunc */ NULL, - /* freestoragefunc */ NULL, - /* copystoragefunc */ NULL, - /* id */ NULL, NULL, NULL, - /* gpufunc */ gpu_shader_normal -}; - +void register_node_type_sh_normal(ListBase *lb) +{ + static bNodeType ntype; + + node_type_init(&ntype, SH_NODE_NORMAL, "Normal", NODE_CLASS_OP_VECTOR, NODE_OPTIONS, + sh_node_normal_in, sh_node_normal_out); + node_type_exec(&ntype, node_shader_exec_normal); + node_type_gpu(&ntype, gpu_shader_normal); + + nodeRegisterType(lb, &ntype); +} diff --git a/source/blender/nodes/intern/SHD_util.h b/source/blender/nodes/intern/SHD_util.h index 147291e380a..4134c160f16 100644 --- a/source/blender/nodes/intern/SHD_util.h +++ b/source/blender/nodes/intern/SHD_util.h @@ -51,6 +51,7 @@ #include "BKE_image.h" #include "BKE_main.h" #include "BKE_material.h" +#include "BKE_node.h" #include "BKE_texture.h" #include "BKE_library.h" |