[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31310] branches/particles-2010/source/ blender: Fixed context propagation bug: links must be sorted, so that a comes before b if the result of context propagation along a can influence that of b .

Lukas Toenne lukas.toenne at googlemail.com
Fri Aug 13 10:51:10 CEST 2010


Revision: 31310
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31310
Author:   lukastoenne
Date:     2010-08-13 10:51:10 +0200 (Fri, 13 Aug 2010)

Log Message:
-----------
Fixed context propagation bug: links must be sorted, so that a comes before b if the result of context propagation along a can influence that of b. This means a comes before be if its tonode level is lower than the fromnode level of b.
Added a small debugging feature to display the context type next to the socket circle. Should be removed after fixing bugs, but some sort of feedback of this type could be useful in future, maybe show this in a tooltip when hovering over the socket?

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/editors/space_node/node_draw.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_vertex_data.c
    branches/particles-2010/source/blender/nodes/intern/SIM_util.h
    branches/particles-2010/source/blender/nodes/intern/node_tree_simulation.c

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-08-13 07:14:22 UTC (rev 31309)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-08-13 08:51:10 UTC (rev 31310)
@@ -1864,13 +1864,12 @@
 
 static int ntreeSortLinkFromnode(void *a, void *b)
 {
-	bNode *afrom = ((bNodeLinkSortList*)a)->link->fromnode;
 	bNode *ato = ((bNodeLinkSortList*)a)->link->tonode;
 	bNode *bfrom = ((bNodeLinkSortList*)b)->link->fromnode;
-	bNode *bto = ((bNodeLinkSortList*)b)->link->tonode;
 	
-	if (afrom && bfrom && ato && bto) {
-		return (afrom->level < bfrom->level || ato->level < bto->level);
+	if (bfrom && ato) {
+		/* this ensures that links, whose from/to-nodes can influence each other are sorted */
+		return (ato->level >= bfrom->level);
 	}
 	else
 		return 0;
@@ -1966,6 +1965,7 @@
 		}
 	}
 	
+	#if 0
 	{
 		printf("------------------\n");
 		for (node=ntree->nodes.first; node; node = node->next) {
@@ -2009,6 +2009,7 @@
 		#endif
 		printf("------------------ \n");
 	}
+	#endif
 
 	BLI_freelistN(&sortlist);
 }
@@ -2031,28 +2032,17 @@
 				if (valid) {
 					int fromtype= link->fromsock->context.type;
 					int totype= link->tosock->context.type;
-					if (totype == NDC_UNDEFINED && fromtype != NDC_UNDEFINED)
+					if (totype == NDC_UNDEFINED && fromtype != NDC_UNDEFINED) {
 						valid = 0;
+					}
 					else if (ELEM(fromtype, NDC_UNDEFINED, NDC_SINGLETON)==0) {
-						if (totype == NDC_SINGLETON)
+						if (totype == NDC_SINGLETON) {
 							valid =0;
-						else if (fromtype != totype || link->fromsock->context.source != link->tosock->context.source)
+						}
+						else if (fromtype != totype || link->fromsock->context.source != link->tosock->context.source) {
 							valid = 0;
+						}
 					}
-					#if 0
-					if ((fromtype==NDC_UNDEFINED && totype==NDC_UNDEFINED) ||
-					    ((fromtype!=NDC_UNDEFINED && totype!=NDC_UNDEFINED) &&
-					     (fromtype==NDC_SINGLETON ||
-					      (totype!=NDC_SINGLETON && fromtype==totype &&
-					       link->fromsock->context.source == link->tosock->context.source
-					      )
-					     )
-					    )
-					   ) {
-					}
-					else
-						valid = 0;
-					#endif
 				}
 			}
 			

Modified: branches/particles-2010/source/blender/editors/space_node/node_draw.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_draw.c	2010-08-13 07:14:22 UTC (rev 31309)
+++ branches/particles-2010/source/blender/editors/space_node/node_draw.c	2010-08-13 08:51:10 UTC (rev 31310)
@@ -887,6 +887,17 @@
 				uiDefBut(node->block, LABEL, 0, sock->name, (short)(sock->locx+7), (short)(sock->locy-9.0f), 
 						 (short)(node->width-NODE_DY), NODE_DY,  NULL, 0, 0, 0, 0, "");
 			}
+			
+			#if 1
+			{
+				static char *context_str[] = { "U", "S", "N", "P", "V", "E", "F" };
+				if (node->block) {
+					glColor3ub(220, 220, 30);
+					uiDefBut(node->block, LABEL, 0, context_str[sock->context.type], 
+							 (short)(sock->locx-25), (short)(sock->locy-9.0f), (short)(node->width-NODE_DY), NODE_DY,  NULL, 0, 0, 0, 0, "");
+				}
+			}
+			#endif
 		}
 	}
 	
@@ -907,6 +918,15 @@
 			
 			uiDefBut(node->block, LABEL, 0, sock->name+ofs, (short)(sock->locx-15.0f-slen), (short)(sock->locy-9.0f), 
 					 (short)(node->width-NODE_DY), NODE_DY,  NULL, 0, 0, 0, 0, "");
+			
+			#if 1
+			{
+				static char *context_str[] = { "U", "S", "N", "P", "V", "E", "F" };
+				glColor3ub(220, 220, 30);
+				uiDefBut(node->block, LABEL, 0, context_str[sock->context.type], (short)(sock->locx+5), (short)(sock->locy-9.0f), 
+						 (short)(node->width-NODE_DY), NODE_DY,  NULL, 0, 0, 0, 0, "");
+			}
+			#endif
 		}
 	}
 	

Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_vertex_data.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_vertex_data.c	2010-08-13 07:14:22 UTC (rev 31309)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_vertex_data.c	2010-08-13 08:51:10 UTC (rev 31310)
@@ -60,13 +60,9 @@
 	if (ob && ob->type == OB_MESH) {
 		Mesh *mesh = (Mesh*)ob->data;
 		
-		if (MEM_check_memory_integrity())
-			printf("!!! Memory currupt A !!!");
 		SIM_JOBEXEC_OUTPUT_BEGIN(ctx, job, istream)
 		copy_v3_v3(mesh->mvert[job->current].co, sim_istream_read_vector(istream, 0));
 		SIM_JOBEXEC_OUTPUT_END(ctx, job)
-		if (MEM_check_memory_integrity())
-			printf("!!! Memory currupt B !!!");
 	}
 	return NODE_EXEC_FINISHED;
 }

Modified: branches/particles-2010/source/blender/nodes/intern/SIM_util.h
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_util.h	2010-08-13 07:14:22 UTC (rev 31309)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_util.h	2010-08-13 08:51:10 UTC (rev 31310)
@@ -201,7 +201,6 @@
 		job->current = job->input_start; \
 	ivalid = sim_istream_init(istream, ctx, job); \
 	ovalid = sim_ostream_init(ostream, ctx, job, job->current); \
-	printf("ivalid=%d, ovalid=%d\n", ivalid, ovalid); \
 	for (i=0; ivalid && ovalid && i < job->input_totdata; ++i, ++job->current) { \
 		SIM_JOBEXEC_DEBUGPRINT \
 		{
@@ -210,7 +209,6 @@
 		ivalid = sim_istream_next(istream); \
 		ovalid = sim_ostream_next(ostream); \
 	} \
-	printf("ivalid=%d, ovalid=%d\n", ivalid, ovalid); \
 	SIM_JOBEXEC_DEBUGPRINT_END \
 	sim_istream_close(istream, ctx); \
 	sim_ostream_close(ostream, ctx, job); \

Modified: branches/particles-2010/source/blender/nodes/intern/node_tree_simulation.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/node_tree_simulation.c	2010-08-13 07:14:22 UTC (rev 31309)
+++ branches/particles-2010/source/blender/nodes/intern/node_tree_simulation.c	2010-08-13 08:51:10 UTC (rev 31310)
@@ -805,8 +805,6 @@
 			else
 				suspend = NODE_EXEC_FINISHED;
 			
-			/* TODO add new data, check for new jobs and notify other threads if any */
-			
 			#if 0
 			/* ========= DEBUG ========= */
 			{





More information about the Bf-blender-cvs mailing list