[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35927] branches/particles-2010: First steps towards modifier nodes.

Lukas Toenne lukas.toenne at googlemail.com
Thu Mar 31 22:59:56 CEST 2011


Revision: 35927
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35927
Author:   lukastoenne
Date:     2011-03-31 20:59:55 +0000 (Thu, 31 Mar 2011)
Log Message:
-----------
First steps towards modifier nodes.

Modifier node trees are created as true ID data blocks, i.e. they are created and selected in the node editor space independently from any object selection (similar to image editor). Any modifier node tree can then be linked to objects in their modifier panel. When a node tree is linked to an object it will replace the modifier stack to create the final derived mesh.

Modifier nodes introduce a new socket type for meshes (using a yellow-greenish color atm). These sockets denote the output of derived mesh data by modifier nodes, just like stack-based modifiers have. The main difference is that node modifiers can also have multiple inputs and/or outputs, leading to a wide range of new possibilities. As a test case a "join" node has been added, which takes two mesh inputs and merges them together in a single output.

Node outputs now also have a new button (with the eye icon), which is supposed to replace viewer nodes (currently only used by modifier nodes). Instead of creating a viewer node and linking it to an output, the view button can be activated to show intermediate results. For the final result a special output node is still the better choice, as it allows more fine-tuning and doesn't have to change connections as often as the viewer.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    branches/particles-2010/source/blender/blenkernel/intern/DerivedMesh.c
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/editors/space_node/drawnode.c
    branches/particles-2010/source/blender/editors/space_node/node_draw.c
    branches/particles-2010/source/blender/editors/space_node/node_edit.c
    branches/particles-2010/source/blender/editors/space_node/node_header.c
    branches/particles-2010/source/blender/editors/space_node/node_intern.h
    branches/particles-2010/source/blender/editors/space_node/space_node.c
    branches/particles-2010/source/blender/editors/transform/transform_generics.c
    branches/particles-2010/source/blender/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h
    branches/particles-2010/source/blender/nodes/CMakeLists.txt
    branches/particles-2010/source/blender/nodes/MOD_node.h
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_alphaOver.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_bilateralblur.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_blur.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_brightness.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_channelMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_colorMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_colorSpill.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_common.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_composite.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_crop.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_curves.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_defocus.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_diffMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_dilate.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_directionalblur.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_displace.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_distanceMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_filter.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_flip.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_gamma.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_glare.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_hueSatVal.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_huecorrect.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_idMask.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_image.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_invert.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_lensdist.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_levels.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_lummaMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_mapUV.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_mapValue.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_math.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_mixrgb.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_normal.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_normalize.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_premulkey.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_rgb.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_rotate.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_scale.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombRGBA.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombYCCA.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombYUVA.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_setalpha.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_splitViewer.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_texture.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_tonemap.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_translate.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_valToRgb.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_value.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_vecBlur.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_viewer.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_zcombine.c
    branches/particles-2010/source/blender/nodes/intern/MOD_nodes/MOD_mesh.c
    branches/particles-2010/source/blender/nodes/intern/MOD_nodes/MOD_transform.c
    branches/particles-2010/source/blender/nodes/intern/MOD_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/MOD_util.c
    branches/particles-2010/source/blender/nodes/intern/MOD_util.h
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_camera.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_common.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_curves.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_geom.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_invert.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_material.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_math.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_mixRgb.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_normal.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_output.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_rgb.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_sepcombRGB.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_squeeze.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_texture.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_valToRgb.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_value.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_at.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_checker.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_common.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_compose.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_coord.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_curves.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_decompose.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_distance.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_hueSatVal.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_image.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_invert.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_math.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_mixRgb.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_output.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_proc.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_rotate.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_scale.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_texture.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_translate.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_valToNor.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_viewer.c
    branches/particles-2010/source/blender/nodes/intern/node_common.c
    branches/particles-2010/source/blender/nodes/intern/node_exec.c
    branches/particles-2010/source/blender/nodes/intern/node_exec.h
    branches/particles-2010/source/blender/nodes/intern/node_util.h

Added Paths:
-----------
    branches/particles-2010/release/scripts/ui/properties_modifier_node.py
    branches/particles-2010/source/blender/nodes/intern/MOD_exec.c
    branches/particles-2010/source/blender/nodes/intern/MOD_exec.h
    branches/particles-2010/source/blender/nodes/intern/MOD_nodes/MOD_common.c
    branches/particles-2010/source/blender/nodes/intern/MOD_nodes/MOD_join.c
    branches/particles-2010/source/blender/nodes/intern/node_socket.c
    branches/particles-2010/source/blender/nodes/intern/node_socket.h

Added: branches/particles-2010/release/scripts/ui/properties_modifier_node.py
===================================================================
--- branches/particles-2010/release/scripts/ui/properties_modifier_node.py	                        (rev 0)
+++ branches/particles-2010/release/scripts/ui/properties_modifier_node.py	2011-03-31 20:59:55 UTC (rev 35927)
@@ -0,0 +1,72 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+import bpy
+
+
+class DATA_PT_modifier_node(bpy.types.Panel):
+    bl_space_type = 'NODE_EDITOR'
+    bl_region_type = 'UI'
+    #bl_context = "modifier"
+    bl_label = "Properties"
+
+    @classmethod
+    def poll(cls, context):
+        return (context.active_node)
+
+    def draw(self, context):
+        layout = self.layout
+
+        node = context.active_node
+
+        # match enum type to our functions, avoids a lookup table.
+        getattr(self, node.type)(layout, node)
+
+    # the mt.type enum is (ab)used for a lookup on function names
+    # ...to avoid lengthy if statements
+    # so each type must have a function here.
+
+    def MESH(self, layout, node):
+        col = layout.column()
+        col.prop(node, "use_external")
+        if (node.use_external):
+            col.template_ID(node, "external_mesh")
+
+    def TRANSFORM(self, layout, node):
+        col = layout.column()
+        row = col.row(align=1)
+        row.prop(node, "translate")
+        row = col.row(align=1)
+        row.prop(node, "rotate")
+        row = col.row(align=1)
+        row.prop(node, "scale")
+
+    def JOIN(self, layout, node):
+        pass
+
+
+def register():
+    bpy.utils.register_module(__name__)
+
+
+def unregister():
+    bpy.utils.unregister_module(__name__)
+
+if __name__ == "__main__":
+    register()

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-03-31 20:57:17 UTC (rev 35926)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-03-31 20:59:55 UTC (rev 35927)
@@ -87,12 +87,20 @@
 	struct bNodeSocket *sock;		/* used to hold verified socket */
 } bNodeSocketTemplate;
 
-/* Symbols for sockets */
-typedef enum NodeSocketSymbol {
-	SOCK_CIRCLE,
-	SOCK_SQUARE
-} NodeSocketSymbol;
+typedef struct bNodeSocketConverter {
+	char ui_name[32];
+} bNodeSocketConverter;
 
+typedef struct bNodeSocketType {
+	int type;
+	char ui_name[32];
+	char ui_description[128];
+	int ui_icon;
+	char ui_color[4];
+	
+	int (*get_converters)(int type, struct bNodeSocketConverter **conv, int *totconv);
+} bNodeSocketType;
+
 typedef struct bNodeTemplate {
 	int type;
 	
@@ -102,6 +110,8 @@
 
 typedef struct bNodeType {
 	void *next,*prev;
+	short needs_free;		/* set for allocated types that need to be freed */
+	
 	int type;
 	char name[32];
 	float width, minwidth, maxwidth;
@@ -129,8 +139,8 @@
 	void (*verifyfunc)(struct bNodeTree *ntree, struct bNode *node, struct ID *id);
 	
 	void (*initfunc)(struct bNodeTree *ntree, struct bNode *node, struct bNodeTemplate *ntemp);
-	void (*freestoragefunc)(struct bNode *);
-	void (*copystoragefunc)(struct bNode *, struct bNode *);
+	void (*freestoragefunc)(struct bNode *node);
+	void (*copystoragefunc)(struct bNode *node, struct bNode *target);
 	struct bNodeTemplate (*templatefunc)(struct bNode *);
 	
 	int (*validfunc)(struct bNodeTree *ntree, struct bNodeTemplate *ntemp);
@@ -194,6 +204,7 @@
 #define NODE_CLASS_MATH_ROTATION	19
 #define NODE_CLASS_PARTICLES		25
 #define NODE_CLASS_TRANSFORM		30
+#define NODE_CLASS_COMBINE			31
 #define NODE_CLASS_LAYOUT			100
 
 /* enum values for input/output */
@@ -236,6 +247,7 @@
 
 struct bNodeTreeType *ntreeGetType(int type);
 struct bNodeType *ntreeGetNodeType(struct bNodeTree *ntree);
+struct bNodeSocketType *ntreeGetSocketType(int type);
 
 struct bNodeTree *ntreeAddTree(const char *name, int type, int nodetype);
 void			ntreeInitTypes(struct bNodeTree *ntree);
@@ -256,7 +268,11 @@
 
 void			ntreeGetDependencyList(struct bNodeTree *ntree, struct bNode ***deplist, int *totnodes);
 
+/* XXX old trees handle output flags automatically based on special output node types and last active selection.
+ * new tree types have a per-output socket flag to indicate the final output to use explicitly.
+ */
 void			ntreeSetOutput(struct bNodeTree *ntree);
+void			ntreeSetViewerOutput(struct bNodeTree *ntree, struct bNodeSocket *output);
 void			ntreeInitPreview(struct bNodeTree *, int xsize, int ysize);
 void			ntreeClearPreview(struct bNodeTree *ntree);
 
@@ -270,6 +286,11 @@
 
 /* ************** GENERIC API, NODES *************** */
 
+struct bNodeSocket *nodeAddSocket(struct bNodeTree *ntree, struct bNode *node, int in_out, const char *name, int type);
+struct bNodeSocket *nodeInsertSocket(struct bNodeTree *ntree, struct bNode *node, int in_out, struct bNodeSocket *next_sock, const char *name, int type);
+void nodeRemoveSocket(struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock);
+void nodeRemoveAllSockets(struct bNodeTree *ntree, struct bNode *node);
+
 void			nodeAddToPreview(struct bNode *, float *, int, int, int);
 
 struct bNode	*nodeAddNode(struct bNodeTree *ntree, struct bNodeTemplate *ntemp);
@@ -285,7 +306,7 @@
 void			nodeAssignInputPanel(struct bNode *node, struct bNodeSocket *socket, struct bNodeSocketPanel *panel);
 void			nodeAssignOutputPanel(struct bNode *node, struct bNodeSocket *socket, struct bNodeSocketPanel *panel);
 
-void			nodeRegisterType(struct ListBase *typelist, const struct bNodeType *ntype) ;
+void			nodeRegisterType(struct ListBase *typelist, struct bNodeType *ntype) ;
 void			nodeMakeDynamicType(struct bNode *node);
 int				nodeDynamicUnlinkText(struct ID *txtid);
 
@@ -336,8 +357,8 @@
 void			nodeEditClear(struct bNode *node);
 
 /* Init a new node type struct with default values and callbacks */
-void			node_type_base(struct bNodeType *ntype, int type, const char *name, short nclass, short flag,
-							   struct bNodeSocketTemplate *inputs, struct bNodeSocketTemplate *outputs);
+void			node_type_base(struct bNodeType *ntype, int type, const char *name, short nclass, short flag);
+void			node_type_socket_templates(struct bNodeType *ntype, struct bNodeSocketTemplate *inputs, struct bNodeSocketTemplate *outputs);
 void			node_type_size(struct bNodeType *ntype, int width, int minwidth, int maxwidth);
 void			node_type_init(struct bNodeType *ntype, void (*initfunc)(struct bNodeTree *ntree, struct bNode *node, struct bNodeTemplate *ntemp));
 void			node_type_valid(struct bNodeType *ntype, int (*validfunc)(struct bNodeTree *ntree, struct bNodeTemplate *ntemp));
@@ -365,13 +386,6 @@
 								   void (*freeexecfunc)(struct bNode *node, void *nodedata),
 								   void (*newexecfunc)(void *data, int thread, struct bNode *, void *nodedata, struct bNodeStack **, struct bNodeStack **));
 
-/* ************** INTERNAL EDITOR FUNCTIONS *************** */
-
-struct bNodeSocket *node_add_socket(struct bNodeTree *ntree, ListBase *lb, int in_out, const char *name, int type);
-struct bNodeSocket *node_insert_socket(struct bNodeTree *ntree, ListBase *lb, int in_out, struct bNodeSocket *next_sock, const char *name, int type);
-void node_remove_socket(struct bNodeTree *ntree, ListBase *lb, struct bNodeSocket *sock);
-void node_remove_all_sockets(struct bNodeTree *ntree, struct bNode *node);
-
 /* ************** COMMON NODES *************** */
 
 #define NODE_GROUP		2
@@ -625,10 +639,11 @@
 #define MOD_NODE_MESH				1000
 
 /* transform */
-#define MOD_NODE_TRANSLATE			1101
-#define MOD_NODE_ROTATE				1102
-#define MOD_NODE_SCALE				1103
+#define MOD_NODE_TRANSFORM			1100
 
+/* combine */
+#define MOD_NODE_JOIN			1200
+
 /* API */
 struct DerivedMesh *ntreeModifierExecTree(struct bNodeTree *ntree, struct Scene *scene, struct Object *ob, float (*inputVertexCos)[3]);
 

Modified: branches/particles-2010/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/DerivedMesh.c	2011-03-31 20:57:17 UTC (rev 35926)
+++ branches/particles-2010/source/blender/blenkernel/intern/DerivedMesh.c	2011-03-31 20:59:55 UTC (rev 35927)
@@ -1694,12 +1694,19 @@
 				*deform_r = CDDM_from_mesh(me, ob);
 		}
 		
-		if(inputVertexCos)
-			deformedVerts = inputVertexCos;
-		else
-			deformedVerts = mesh_getVertexCos(me, &numVerts);
+		dm = ntreeModifierExecTree(ob->modifier_nodetree, scene, ob, inputVertexCos);
 		
-		dm = ntreeModifierExecTree(ob->modifier_nodetree, scene, ob, inputVertexCos);
+		if (dm) {
+			numVerts = dm->getNumVerts(dm);
+			deformedVerts = MEM_mallocN(sizeof(*deformedVerts) * numVerts, "dfmv");
+			dm->getVertCos(dm, deformedVerts);
+		}
+		else {
+			if(inputVertexCos)
+				deformedVerts = inputVertexCos;
+			else
+				deformedVerts = mesh_getVertexCos(me, &numVerts);
+		}
 	}
 	else {
 		if(!skipVirtualArmature) {

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-03-31 20:57:17 UTC (rev 35926)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-03-31 20:59:55 UTC (rev 35927)
@@ -72,6 +72,7 @@
 
 #include "intern/node_common.h"
 #include "intern/node_exec.h"
+#include "intern/node_socket.h"
 
 #include "CMP_node.h"
 #include "SHD_node.h"
@@ -116,6 +117,24 @@
 	return node_get_type(ntree, ntree->nodetype);
 }
 
+bNodeSocketType *ntreeGetSocketType(int type)
+{
+	static bNodeSocketType *types[NUM_SOCKET_TYPES]= {NULL};
+	static int types_init = 1;
+

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list