[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22197] branches/soc-2009-jaguarandi/ source/blender/render/intern: single tree (by default)

André Pinto andresusanopinto at gmail.com
Tue Aug 4 01:25:39 CEST 2009


Revision: 22197
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22197
Author:   jaguarandi
Date:     2009-08-04 01:25:38 +0200 (Tue, 04 Aug 2009)

Log Message:
-----------
single tree (by default)
now that build is nlogn (it should be worth to the tree of trees)

Modified Paths:
--------------
    branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp
    branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c

Modified: branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp
===================================================================
--- branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp	2009-08-03 20:33:22 UTC (rev 22196)
+++ branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp	2009-08-03 23:25:38 UTC (rev 22197)
@@ -335,8 +335,8 @@
 				right_side= bb_area(sweep[i].bb, sweep[i].bb+3)*(sweep[i].cost+logf(size-i));
 				hcost = left_side+right_side;
 
-				assert(left_side > 0);
-				assert(right_side > 0);
+				assert(left_side >= 0);
+				assert(right_side >= 0);
 				
 				if(left_side > bcost) break;	//No way we can find a better heuristic in this axis
 

Modified: branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c
===================================================================
--- branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c	2009-08-03 20:33:22 UTC (rev 22196)
+++ branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c	2009-08-03 23:25:38 UTC (rev 22197)
@@ -308,14 +308,19 @@
 		ObjectRen *obr = obi->obr;
 		obs++;
 		
-		assert((obi->flag & R_TRANSFORMED) == 0); //Not suported
-	
-		for(v=0;v<obr->totvlak;v++)
+		if(obi->flag & R_TRANSFORMED)
 		{
-			VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255);
-			if(is_raytraceable_vlr(re, vlr))
-				faces++;
+			faces++;
 		}
+		else
+		{
+			for(v=0;v<obr->totvlak;v++)
+			{
+				VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255);
+				if(is_raytraceable_vlr(re, vlr))
+					faces++;
+			}
+		}
 	}
 	
 	//Create raytree
@@ -329,23 +334,31 @@
 	for(obi=re->instancetable.first; obi; obi=obi->next)
 	if(is_raytraceable(re, obi))
 	{
-		int v;
-		ObjectRen *obr = obi->obr;
-
-		for(v=0;v<obr->totvlak;v++)
+		if(obi->flag & R_TRANSFORMED)
 		{
-			VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255);
-			face->v1 = vlr->v1->co;
-			face->v2 = vlr->v2->co;
-			face->v3 = vlr->v3->co;
-			face->v4 = vlr->v4 ? vlr->v4->co : NULL;
-			
-			face->ob   = obi;
-			face->face = vlr;
-			
-			RE_rayobject_add( raytree, RayObject_unalignRayFace(face) );
-			face++;
+			RayObject *obj = makeraytree_object(re, obi);
+			RE_rayobject_add( re->raytree, obj );
 		}
+		else
+		{
+			int v;
+			ObjectRen *obr = obi->obr;
+
+			for(v=0;v<obr->totvlak;v++)
+			{
+				VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255);
+				face->v1 = vlr->v1->co;
+				face->v2 = vlr->v2->co;
+				face->v3 = vlr->v3->co;
+				face->v4 = vlr->v4 ? vlr->v4->co : NULL;
+				
+				face->ob   = obi;
+				face->face = vlr;
+				
+				RE_rayobject_add( raytree, RayObject_unalignRayFace(face) );
+				face++;
+			}
+		}
 	}
 	RE_rayobject_done( raytree );	
 }
@@ -356,6 +369,7 @@
 	int i;
 	const char *tree_type = "Tree(unknown)";
 
+	re->r.raytrace_tree_type = R_RAYSTRUCTURE_SINGLE_BVH;
 #ifdef RE_RAYCOUNTER
 	if(re->r.raytrace_tree_type == R_RAYTRACE_TREE_BVH)
 		tree_type = "BVH";





More information about the Bf-blender-cvs mailing list