[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35570] branches/particles-2010/source/ blender: Group, For and While nodes now are individual node types for each of the tree types .

Lukas Toenne lukas.toenne at googlemail.com
Wed Mar 16 13:43:21 CET 2011


Revision: 35570
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35570
Author:   lukastoenne
Date:     2011-03-16 12:43:21 +0000 (Wed, 16 Mar 2011)
Log Message:
-----------
Group, For and While nodes now are individual node types for each of the tree types. This is a cleaner solution, since there are still some minor differences in the way the internal trees are executed. The vast majority of the code is nevertheless shared between the tree types (in node_common.h/.c).
Fixed texture tree group node cleanup of texture delegate structs in the freeexec callbacks for group/loop nodes.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/nodes/CMP_node.h
    branches/particles-2010/source/blender/nodes/CMakeLists.txt
    branches/particles-2010/source/blender/nodes/SHD_node.h
    branches/particles-2010/source/blender/nodes/TEX_node.h
    branches/particles-2010/source/blender/nodes/intern/TEX_util.c
    branches/particles-2010/source/blender/nodes/intern/TEX_util.h
    branches/particles-2010/source/blender/nodes/intern/node_common.c
    branches/particles-2010/source/blender/nodes/intern/node_common.h

Added Paths:
-----------
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_common.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_common.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_common.c

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-03-16 12:21:20 UTC (rev 35569)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-03-16 12:43:21 UTC (rev 35570)
@@ -371,9 +371,6 @@
 #define NODE_GROUP_MENU		10000
 #define NODE_DYNAMIC_MENU	20000
 
-/* Group */
-void register_node_type_group(ListBase *lb);
-
 /* look up a socket on a group node by the internal group socket */
 struct bNodeSocket *node_group_find_input(struct bNode *gnode, struct bNodeSocket *gsock);
 struct bNodeSocket *node_group_find_output(struct bNode *gnode, struct bNodeSocket *gsock);
@@ -386,10 +383,6 @@
 struct bNode	*node_group_make_from_selected(struct bNodeTree *ntree);
 int				node_group_ungroup(struct bNodeTree *ntree, struct bNode *gnode);
 
-/* Loops */
-void register_node_type_forloop(ListBase *lb);
-void register_node_type_whileloop(ListBase *lb);
-
 /* ************** SHADER NODES *************** */
 
 struct ShadeInput;

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-03-16 12:21:20 UTC (rev 35569)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-03-16 12:43:21 UTC (rev 35570)
@@ -1219,7 +1219,7 @@
 	bNodeTreeType *ntreetype= ntreeGetType(ntree->type);
 
 	if (ntreetype->local_sync)
-		return ntreetype->local_sync(localtree, ntree);
+		ntreetype->local_sync(localtree, ntree);
 }
 
 /* merge local tree results back, and free local tree */
@@ -1241,7 +1241,7 @@
 	}
 
 	if (ntreetype->local_merge)
-		return ntreetype->local_merge(localtree, ntree);
+		ntreetype->local_merge(localtree, ntree);
 
 	ntreeFreeTree(localtree);
 	MEM_freeN(localtree);
@@ -1624,6 +1624,7 @@
 bNodeTreeExec *ntreeBeginExecTree(bNodeTree *ntree)
 {
 	bNodeTreeExec *exec = ntree_exec_begin(ntree);
+//	printf("ntreeBeginExecTree: ntree=%p, ntree->execdata=%p, exec=%p\n", ntree, ntree->execdata, exec);
 	
 	/* XXX this should not be necessary, but is still used for cmp/sha/tex nodes,
 		 * which only store the ntree pointer. Should be fixed at some point!
@@ -1635,6 +1636,7 @@
 
 void ntreeEndExecTree(bNodeTreeExec *exec)
 {
+//	printf("ntreeEndExecTree: exec=%p, exec->nodetree=%p, exec->nodetree->execdata=%p\n", exec, exec->nodetree, exec->nodetree->execdata);
 	if(exec) {
 		bNodeTree *ntree= exec->nodetree;
 		
@@ -1837,9 +1839,9 @@
 
 static void registerCompositNodes(ListBase *ntypelist)
 {
-	register_node_type_group(ntypelist);
-	register_node_type_forloop(ntypelist);
-	register_node_type_whileloop(ntypelist);
+	register_node_type_group_composite(ntypelist);
+	register_node_type_forloop_composite(ntypelist);
+	register_node_type_whileloop_composite(ntypelist);
 	
 	register_node_type_cmp_rlayers(ntypelist);
 	register_node_type_cmp_image(ntypelist);
@@ -1915,9 +1917,9 @@
 
 static void registerShaderNodes(ListBase *ntypelist) 
 {
-	register_node_type_group(ntypelist);
-	register_node_type_forloop(ntypelist);
-	register_node_type_whileloop(ntypelist);
+	register_node_type_group_shader(ntypelist);
+	register_node_type_forloop_shader(ntypelist);
+	register_node_type_whileloop_shader(ntypelist);
 	
 	register_node_type_sh_output(ntypelist);
 	register_node_type_sh_mix_rgb(ntypelist);
@@ -1946,9 +1948,9 @@
 
 static void registerTextureNodes(ListBase *ntypelist)
 {
-	register_node_type_group(ntypelist);
-	register_node_type_forloop(ntypelist);
-	register_node_type_whileloop(ntypelist);
+	register_node_type_group_texture(ntypelist);
+	register_node_type_forloop_texture(ntypelist);
+	register_node_type_whileloop_texture(ntypelist);
 	
 	register_node_type_tex_math(ntypelist);
 	register_node_type_tex_mix_rgb(ntypelist);
@@ -1991,9 +1993,9 @@
 
 static void registerModifierNodes(ListBase *ntypelist)
 {
-	register_node_type_group(ntypelist);
-	register_node_type_forloop(ntypelist);
-	register_node_type_whileloop(ntypelist);
+//	register_node_type_group(ntypelist);
+//	register_node_type_forloop(ntypelist);
+//	register_node_type_whileloop(ntypelist);
 	
 	#if 0
 	nodeRegisterModMesh(ntypelist);
@@ -2005,9 +2007,9 @@
 
 static void registerParticleNodes(ListBase *ntypelist)
 {
-	register_node_type_group(ntypelist);
-	register_node_type_forloop(ntypelist);
-	register_node_type_whileloop(ntypelist);
+//	register_node_type_group(ntypelist);
+//	register_node_type_forloop(ntypelist);
+//	register_node_type_whileloop(ntypelist);
 }
 
 static void remove_dynamic_typeinfos(ListBase *list)

Modified: branches/particles-2010/source/blender/nodes/CMP_node.h
===================================================================
--- branches/particles-2010/source/blender/nodes/CMP_node.h	2011-03-16 12:21:20 UTC (rev 35569)
+++ branches/particles-2010/source/blender/nodes/CMP_node.h	2011-03-16 12:43:21 UTC (rev 35570)
@@ -44,6 +44,10 @@
 
 /* ****************** types array for all composite nodes ****************** */
 
+void register_node_type_group_composite(ListBase *lb);
+void register_node_type_forloop_composite(ListBase *lb);
+void register_node_type_whileloop_composite(ListBase *lb);
+
 void register_node_type_cmp_rlayers(ListBase *lb);
 void register_node_type_cmp_image(ListBase *lb);
 void register_node_type_cmp_texture(ListBase *lb);

Modified: branches/particles-2010/source/blender/nodes/CMakeLists.txt
===================================================================
--- branches/particles-2010/source/blender/nodes/CMakeLists.txt	2011-03-16 12:21:20 UTC (rev 35569)
+++ branches/particles-2010/source/blender/nodes/CMakeLists.txt	2011-03-16 12:43:21 UTC (rev 35570)
@@ -48,6 +48,7 @@
 	intern/CMP_nodes/CMP_colorMatte.c
 	intern/CMP_nodes/CMP_colorSpill.c
 	intern/CMP_nodes/CMP_colorbalance.c
+	intern/CMP_nodes/CMP_common.c
 	intern/CMP_nodes/CMP_composite.c
 	intern/CMP_nodes/CMP_crop.c
 	intern/CMP_nodes/CMP_curves.c
@@ -98,6 +99,7 @@
 	intern/CMP_util.c
 
 	intern/SHD_nodes/SHD_camera.c
+	intern/SHD_nodes/SHD_common.c
 	intern/SHD_nodes/SHD_curves.c
 	intern/SHD_nodes/SHD_dynamic.c
 	intern/SHD_nodes/SHD_geom.c
@@ -122,6 +124,7 @@
 	intern/TEX_nodes/TEX_at.c
 	intern/TEX_nodes/TEX_bricks.c
 	intern/TEX_nodes/TEX_checker.c
+	intern/TEX_nodes/TEX_common.c
 	intern/TEX_nodes/TEX_compose.c
 	intern/TEX_nodes/TEX_coord.c
 	intern/TEX_nodes/TEX_curves.c

Modified: branches/particles-2010/source/blender/nodes/SHD_node.h
===================================================================
--- branches/particles-2010/source/blender/nodes/SHD_node.h	2011-03-16 12:21:20 UTC (rev 35569)
+++ branches/particles-2010/source/blender/nodes/SHD_node.h	2011-03-16 12:43:21 UTC (rev 35570)
@@ -45,6 +45,10 @@
 /* the type definitions array */
 /* ****************** types array for all shaders ****************** */
 
+void register_node_type_group_shader(ListBase *lb);
+void register_node_type_forloop_shader(ListBase *lb);
+void register_node_type_whileloop_shader(ListBase *lb);
+
 void register_node_type_sh_output(ListBase *lb);
 void register_node_type_sh_material(ListBase *lb);
 void register_node_type_sh_camera(ListBase *lb);

Modified: branches/particles-2010/source/blender/nodes/TEX_node.h
===================================================================
--- branches/particles-2010/source/blender/nodes/TEX_node.h	2011-03-16 12:21:20 UTC (rev 35569)
+++ branches/particles-2010/source/blender/nodes/TEX_node.h	2011-03-16 12:43:21 UTC (rev 35570)
@@ -44,6 +44,10 @@
 
 /* ****************** types array for all texture nodes ****************** */
 
+void register_node_type_group_texture(ListBase *lb);
+void register_node_type_forloop_texture(ListBase *lb);
+void register_node_type_whileloop_texture(ListBase *lb);
+
 void register_node_type_tex_math(ListBase *lb);
 void register_node_type_tex_mix_rgb(ListBase *lb);
 void register_node_type_tex_valtorgb(ListBase *lb);

Added: branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_common.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_common.c	                        (rev 0)
+++ branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_common.c	2011-03-16 12:43:21 UTC (rev 35570)
@@ -0,0 +1,217 @@
+/*
+ * $Id: CMP_blur.c 35562 2011-03-15 20:10:32Z lukastoenne $
+ *
+ * ***** 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.
+ *
+ * The Original Code is Copyright (C) 2006 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Campbell Barton, Alfredo de Greef, David Millan Escriva,
+ * Juho Vepsäläinen
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/nodes/intern/CMP_nodes/CMP_common.c
+ *  \ingroup cmpnodes
+ */
+
+
+#include "DNA_node_types.h"
+
+#include "BKE_node.h"
+
+#include "../CMP_util.h"
+#include "../node_common.h"
+#include "../node_exec.h"
+
+/**** GROUP ****/
+
+static void *group_initexec(bNode *node)
+{
+	bNodeTree *ngroup= (bNodeTree*)node->id;
+	void *exec;
+	
+	/* initialize the internal node tree execution */
+	exec = ntree_exec_begin(ngroup);
+	
+	return exec;
+}
+
+static void group_freeexec(bNode *node, void *nodedata)
+{
+	bNodeTreeExec*gexec= (bNodeTreeExec*)nodedata;
+	bNodeSocket *sock;
+	bNodeStack *ns;
+	
+	/* set the data pointer of group outputs to NULL, this data is now owned by the external tree
+	 * and must not be freed, unlike the rest of the internal execution data!
+	 */
+	for (sock=node->outputs.first; sock; sock=sock->next) {
+		if (sock->groupsock) {
+			ns = node_get_socket_stack(gexec->stack, sock->groupsock);
+			ns->data = NULL;
+		}
+	}
+	

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list