[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36512] branches/particles-2010/source/ blender: Another do_versions fix: Old node trees will now get an automatic update call, so that node dependency levels are correct and node links flagged valid.

Lukas Toenne lukas.toenne at googlemail.com
Fri May 6 11:43:02 CEST 2011


Revision: 36512
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36512
Author:   lukastoenne
Date:     2011-05-06 09:43:01 +0000 (Fri, 06 May 2011)
Log Message:
-----------
Another do_versions fix: Old node trees will now get an automatic update call, so that node dependency levels are correct and node links flagged valid.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/blenloader/intern/readfile.c
    branches/particles-2010/source/blender/makesdna/DNA_node_types.h

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-05-06 09:19:29 UTC (rev 36511)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-05-06 09:43:01 UTC (rev 36512)
@@ -1638,14 +1638,11 @@
 	
 	for (link = ntree->links.first; link; link = link->next) {
 		link->flag |= NLINK_VALID;
-		/* skip incomplete links (from modal linking operator) */
-		if (link->fromsock && link->tosock) {
-			if (link->fromnode && link->tonode && link->fromnode->level <= link->tonode->level)
+		if (link->fromnode && link->tonode && link->fromnode->level <= link->tonode->level)
+			link->flag &= ~NLINK_VALID;
+		else if (ntreetype->validate_link) {
+			if (!ntreetype->validate_link(ntree, link))
 				link->flag &= ~NLINK_VALID;
-			else if (ntreetype->validate_link) {
-				if (!ntreetype->validate_link(ntree, link))
-					link->flag &= ~NLINK_VALID;
-			}
 		}
 	}
 }

Modified: branches/particles-2010/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/readfile.c	2011-05-06 09:19:29 UTC (rev 36511)
+++ branches/particles-2010/source/blender/blenloader/intern/readfile.c	2011-05-06 09:43:01 UTC (rev 36512)
@@ -2058,7 +2058,7 @@
 /* updates group node socket own_index so that
  * external links to/from the group node are preserved.
  */
-static void lib_node_do_versions_group(bNode *gnode)
+static void lib_node_do_versions_group_indices(bNode *gnode)
 {
 	bNodeTree *ngroup= (bNodeTree*)gnode->id;
 	bNode *intnode;
@@ -2091,19 +2091,26 @@
 }
 
 /* updates external links for all group nodes in a tree */
-static void lib_nodetree_do_versions_cb(void *UNUSED(data), ID *UNUSED(id), bNodeTree *ntree)
+static void lib_nodetree_do_versions_group_indices_cb(void *UNUSED(data), ID *UNUSED(id), bNodeTree *ntree)
 {
 	bNode *node;
 	
 	for (node=ntree->nodes.first; node; node=node->next) {
 		if (node->type==NODE_GROUP) {
 			bNodeTree *ngroup= (bNodeTree*)node->id;
-			if (ngroup->flag & NTREE_DO_VERSIONS)
-				lib_node_do_versions_group(node);
+			if (ngroup->flag & NTREE_DO_VERSIONS_GROUP_EXPOSE)
+				lib_node_do_versions_group_indices(node);
 		}
 	}
 }
 
+/* make an update call for the tree */
+static void lib_nodetree_do_versions_update_cb(void *UNUSED(data), ID *UNUSED(id), bNodeTree *ntree)
+{
+	if (ntree->update)
+		ntreeUpdateTree(ntree);
+}
+
 /* verify types for nodes and groups, all data has to be read */
 /* open = 0: appending/linking, open = 1: open new file (need to clean out dynamic
 * typedefs*/
@@ -2135,27 +2142,41 @@
 		 * actual group node updates.
 		 */
 		for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next) {
-			if (ntree->flag & NTREE_DO_VERSIONS) {
+			if (ntree->flag & NTREE_DO_VERSIONS_GROUP_EXPOSE) {
 				/* this adds copies and links from all unlinked internal sockets to group inputs/outputs. */
 				node_group_expose_all_sockets(ntree);
 				has_old_groups = 1;
 			}
 		}
 		
-		for (i=0; i < NUM_NTREE_TYPES; ++i) {
-			ntreetype= ntreeGetType(i);
-			if (ntreetype && ntreetype->foreachNodeTree)
-				ntreetype->foreachNodeTree(main, NULL, lib_nodetree_do_versions_cb);
+		if (has_old_groups) {
+			for (i=0; i < NUM_NTREE_TYPES; ++i) {
+				ntreetype= ntreeGetType(i);
+				if (ntreetype && ntreetype->foreachNodeTree)
+					ntreetype->foreachNodeTree(main, NULL, lib_nodetree_do_versions_group_indices_cb);
+			}
 		}
 		
 		for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next)
-			ntree->flag &= ~NTREE_DO_VERSIONS;
+			ntree->flag &= ~NTREE_DO_VERSIONS_GROUP_EXPOSE;
 	}
 	
 	/* verify all group user nodes */
 	for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next) {
 		ntreeVerifyNodes(main, &ntree->id);
 	}
+	
+	/* make update calls where necessary */
+	{
+		for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next)
+			if (ntree->update)
+				ntreeUpdateTree(ntree);
+		for (i=0; i < NUM_NTREE_TYPES; ++i) {
+			ntreetype= ntreeGetType(i);
+			if (ntreetype && ntreetype->foreachNodeTree)
+				ntreetype->foreachNodeTree(main, NULL, lib_nodetree_do_versions_update_cb);
+		}
+	}
 }
 
 /* ntree itself has been read! */
@@ -11593,7 +11614,7 @@
 			 * is done in lib_verify_nodetree, because at this point the internal
 			 * nodes may not be up-to-date! (missing lib-link)
 			 */
-			ntree->flag |= NTREE_DO_VERSIONS;
+			ntree->flag |= NTREE_DO_VERSIONS_GROUP_EXPOSE;
 		}
 	}
 
@@ -11740,17 +11761,25 @@
 		Material *mat;
 		Tex *tex;
 		bNodeTree *ntree;
-		for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next)
+		for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) {
 			do_versions_nodetree_default_value(ntree);
+			ntree->update |= NTREE_UPDATE;
+		}
 		for (sce=main->scene.first; sce; sce=sce->id.next)
-			if (sce->nodetree)
+			if (sce->nodetree) {
 				do_versions_nodetree_default_value(sce->nodetree);
+				sce->nodetree->update |= NTREE_UPDATE;
+			}
 		for (mat=main->mat.first; mat; mat=mat->id.next)
-			if (mat->nodetree)
+			if (mat->nodetree) {
 				do_versions_nodetree_default_value(mat->nodetree);
+				mat->nodetree->update |= NTREE_UPDATE;
+			}
 		for (tex=main->tex.first; tex; tex=tex->id.next)
-			if (tex->nodetree)
+			if (tex->nodetree) {
 				do_versions_nodetree_default_value(tex->nodetree);
+				tex->nodetree->update |= NTREE_UPDATE;
+			}
 	}
 	
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */

Modified: branches/particles-2010/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2011-05-06 09:19:29 UTC (rev 36511)
+++ branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2011-05-06 09:43:01 UTC (rev 36512)
@@ -263,10 +263,10 @@
 
 /* ntree->flag */
 #define NTREE_DS_EXPAND		1	/* for animation editors */
-/* XXX not nice, but needed as a temporary flag
+/* XXX not nice, but needed as a temporary flags
  * for group updates after library linking.
  */
-#define NTREE_DO_VERSIONS	1024
+#define NTREE_DO_VERSIONS_GROUP_EXPOSE	1024
 
 /* ntree->update */
 #define NTREE_UPDATE			0xFFFF	/* generic update flag (includes all others) */




More information about the Bf-blender-cvs mailing list