[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46327] trunk/blender/source/blender/ editors/space_node/node_edit.c: Fix #31318: cycles preview missing update for other materials using same node

Brecht Van Lommel brechtvanlommel at pandora.be
Sat May 5 21:44:29 CEST 2012


Revision: 46327
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46327
Author:   blendix
Date:     2012-05-05 19:44:28 +0000 (Sat, 05 May 2012)
Log Message:
-----------
Fix #31318: cycles preview missing update for other materials using same node
group with certain operations.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_node/node_edit.c

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2012-05-05 19:36:00 UTC (rev 46326)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2012-05-05 19:44:28 UTC (rev 46327)
@@ -243,8 +243,37 @@
 		return nodeGetActive(ntree);
 }
 
-void snode_dag_update(bContext *UNUSED(C), SpaceNode *snode)
+static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup)
 {
+	bNode *node;
+	
+	if (ntree == lookup)
+		return 1;
+	
+	for (node=ntree->nodes.first; node; node=node->next)
+		if (node->type == NODE_GROUP && node->id)
+			if (has_nodetree((bNodeTree*)node->id, lookup))
+				return 1;
+	
+	return 0;
+}
+
+static void snode_dag_update_group(void *calldata, ID *owner_id, bNodeTree *ntree)
+{
+	if (has_nodetree(ntree, calldata))
+		DAG_id_tag_update(owner_id, 0);
+}
+
+void snode_dag_update(bContext *C, SpaceNode *snode)
+{
+	Main *bmain = CTX_data_main(C);
+
+	/* for groups, update all ID's using this */
+	if (snode->edittree!=snode->nodetree) {
+		bNodeTreeType *tti= ntreeGetType(snode->edittree->type);
+		tti->foreach_nodetree(bmain, snode->edittree, snode_dag_update_group);
+	}
+
 	DAG_id_tag_update(snode->id, 0);
 }
 
@@ -585,21 +614,6 @@
 		nodeUpdateID(snode->nodetree, gnode->id);
 }
 
-static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup)
-{
-	bNode *node;
-	
-	if (ntree == lookup)
-		return 1;
-	
-	for (node=ntree->nodes.first; node; node=node->next)
-		if (node->type == NODE_GROUP && node->id)
-			if (has_nodetree((bNodeTree*)node->id, lookup))
-				return 1;
-	
-	return 0;
-}
-
 void ED_node_set_active(Main *bmain, bNodeTree *ntree, bNode *node)
 {
 	int was_active_texture = (node->flag & NODE_ACTIVE_TEXTURE);




More information about the Bf-blender-cvs mailing list