A simplified way of defining bNodeType structs. Instead of doing full struct member...
authorLukas Toenne <lukas.toenne@googlemail.com>
Mon, 7 Feb 2011 09:33:36 +0000 (09:33 +0000)
committerLukas Toenne <lukas.toenne@googlemail.com>
Mon, 7 Feb 2011 09:33:36 +0000 (09:33 +0000)
source/blender/blenkernel/BKE_node.h
source/blender/blenkernel/intern/node.c
source/blender/nodes/SHD_node.h
source/blender/nodes/intern/SHD_nodes/SHD_mapping.c
source/blender/nodes/intern/SHD_nodes/SHD_normal.c
source/blender/nodes/intern/SHD_util.h

index 857150cf873576368ac34bc2a352ad10fad37a05..941083734b4c7433bf89855a796218ec9b8bf282 100644 (file)
@@ -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
index 85c82dbf9bcb70f6f93a2a16680ee6e20f586d8e..f6487bf1d19d6a952e1abfdd35f3c46219f10aad 100644 (file)
@@ -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);
index 80cd0c2e73cb806f840547ab6aef23a7dd11fc98..99a016c5009af799749704a245f77d6bd4f12eed 100644 (file)
@@ -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;
index f01ed3d7ab834bc0634815ea4c9343fc306bfe38..dce8d1962c77e24763f96122f26972f0047af42e 100644 (file)
@@ -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);
+}
index 8054f184ceac4824d6c370975cc02ad1323c794f..35c8f44c7062fc02e7acb3beb4760fbd173e40fe 100644 (file)
@@ -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);
+}
index 147291e380ac5acc7ddf0ea83dfea5f8059aa01a..4134c160f163b3f898e478cce297ed0c65ac6846 100644 (file)
@@ -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"