[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19874] trunk/blender/source/blender: Bugfix #18058

Ton Roosendaal ton at blender.org
Wed Apr 22 19:06:47 CEST 2009


Revision: 19874
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19874
Author:   ton
Date:     2009-04-22 19:06:47 +0200 (Wed, 22 Apr 2009)

Log Message:
-----------
Bugfix #18058

Ray-transparent didn't pass on thread number to shading code, giving
"blothes" in render, when using node materials.

This also rewinds Campbells commit of feb 21, which tackled the error,
but not the cause.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/render/intern/source/rayshade.c

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2009-04-22 16:58:04 UTC (rev 19873)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2009-04-22 17:06:47 UTC (rev 19874)
@@ -1982,9 +1982,9 @@
 	}
 }
 
+/* notes below are ancient! (ton) */
 /* stack indices make sure all nodes only write in allocated data, for making it thread safe */
 /* only root tree gets the stack, to enable instances to have own stack entries */
-/* only two threads now! */
 /* per tree (and per group) unique indices are created */
 /* the index_ext we need to be able to map from groups to the group-node own stack */
 
@@ -1999,14 +1999,9 @@
 	ListBase *lb= &ntree->threadstack[thread];
 	bNodeThreadStack *nts;
 	
-	/* for material shading this is called quite a lot (perhaps too much locking unlocking)
-	 * however without locking we get bug #18058 - Campbell */
-	BLI_lock_thread(LOCK_CUSTOM1); 
-	
 	for(nts=lb->first; nts; nts=nts->next) {
 		if(!nts->used) {
 			nts->used= 1;
-			BLI_unlock_thread(LOCK_CUSTOM1);
 			return nts;
 		}
 	}
@@ -2014,7 +2009,7 @@
 	nts->stack= MEM_dupallocN(ntree->stack);
 	nts->used= 1;
 	BLI_addtail(lb, nts);
-	BLI_unlock_thread(LOCK_CUSTOM1);
+
 	return nts;
 }
 

Modified: trunk/blender/source/blender/render/intern/source/rayshade.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rayshade.c	2009-04-22 16:58:04 UTC (rev 19873)
+++ trunk/blender/source/blender/render/intern/source/rayshade.c	2009-04-22 17:06:47 UTC (rev 19874)
@@ -1273,7 +1273,7 @@
 	shadfac[3]= (1.0f-alpha)*shadfac[3];
 }
 
-static void ray_trace_shadow_tra(Isect *is, int depth, int traflag)
+static void ray_trace_shadow_tra(Isect *is, int thread, int depth, int traflag)
 {
 	/* ray to lamp, find first face that intersects, check alpha properties,
 	   if it has col[3]>0.0f  continue. so exit when alpha is full */
@@ -1291,6 +1291,7 @@
 		
 		shi.depth= 1;					/* only used to indicate tracing */
 		shi.mask= 1;
+		shi.thread= thread;
 		
 		/*shi.osatex= 0;
 		shi.thread= shi.sample= 0;
@@ -1315,7 +1316,7 @@
 			is->oborig= RAY_OBJECT_SET(&R, shi.obi);
 			is->faceorig= (RayFace*)shi.vlr;
 
-			ray_trace_shadow_tra(is, depth-1, traflag | RAY_TRA);
+			ray_trace_shadow_tra(is, thread, depth-1, traflag | RAY_TRA);
 		}
 	}
 }
@@ -1943,7 +1944,7 @@
 			isec->col[0]= isec->col[1]= isec->col[2]=  1.0f;
 			isec->col[3]= 1.0f;
 			
-			ray_trace_shadow_tra(isec, DEPTH_SHADOW_TRA, 0);
+			ray_trace_shadow_tra(isec, shi->thread, DEPTH_SHADOW_TRA, 0);
 			shadfac[0] += isec->col[0];
 			shadfac[1] += isec->col[1];
 			shadfac[2] += isec->col[2];
@@ -2041,7 +2042,7 @@
 			isec->col[0]= isec->col[1]= isec->col[2]=  1.0f;
 			isec->col[3]= 1.0f;
 			
-			ray_trace_shadow_tra(isec, DEPTH_SHADOW_TRA, 0);
+			ray_trace_shadow_tra(isec, shi->thread, DEPTH_SHADOW_TRA, 0);
 			shadfac[0] += isec->col[0];
 			shadfac[1] += isec->col[1];
 			shadfac[2] += isec->col[2];
@@ -2122,7 +2123,7 @@
 				isec.col[0]= isec.col[1]= isec.col[2]=  1.0f;
 				isec.col[3]= 1.0f;
 
-				ray_trace_shadow_tra(&isec, DEPTH_SHADOW_TRA, 0);
+				ray_trace_shadow_tra(&isec, shi->thread, DEPTH_SHADOW_TRA, 0);
 				QUATCOPY(shadfac, isec.col);
 			}
 			else if(RE_ray_tree_intersect(R.raytree, &isec)) shadfac[3]= 0.0f;





More information about the Bf-blender-cvs mailing list