[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13132] trunk/blender/source/blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Jan 4 22:12:48 CET 2008


Revision: 13132
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13132
Author:   blendix
Date:     2008-01-04 22:12:48 +0100 (Fri, 04 Jan 2008)

Log Message:
-----------

- Further fixes for duplivert rendering inside a dupligroup.
- Fix for integer overflow when allocating a lot of particles
  (9 million * 8 keys * sizeof cache key).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/anim.c
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/render/intern/source/convertblender.c

Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim.c	2008-01-04 17:48:07 UTC (rev 13131)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c	2008-01-04 21:12:48 UTC (rev 13132)
@@ -882,7 +882,7 @@
 	if((ob->transflag & OB_DUPLI)==0)
 		return;
 	
-	/* Should the dupli's be greated for this object? - Respect restrict flags */
+	/* Should the dupli's be generated for this object? - Respect restrict flags */
 	if (G.rendering) {
 		if (ob->restrictflag & OB_RESTRICT_RENDER) {
 			return;
@@ -923,7 +923,8 @@
 
 		if (level==0) {
 			for(dob= duplilist->first; dob; dob= dob->next)
-				Mat4CpyMat4(dob->ob->obmat, dob->mat);
+				if(dob->type == OB_DUPLIGROUP)
+					Mat4CpyMat4(dob->ob->obmat, dob->mat);
 		}
 	}
 }

Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c	2008-01-04 17:48:07 UTC (rev 13131)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c	2008-01-04 21:12:48 UTC (rev 13132)
@@ -2172,6 +2172,7 @@
 	ParticleCacheKey **cache, *tcache;
 	ListBase threads;
 	int i, totchild, totparent, totthread;
+	unsigned long totchildstep;
 
 	pthreads= psys_threads_create(ob, psys, G.scene->r.threads);
 
@@ -2192,7 +2193,8 @@
 		free_child_path_cache(psys);
 
 		cache = psys->childcache = MEM_callocN(totchild*sizeof(void *), "Child path cache array");
-		tcache = MEM_callocN(totchild * (ctx->steps + 1) * sizeof(ParticleCacheKey), "Child path cache");
+		totchildstep= totchild*(ctx->steps + 1);
+		tcache = MEM_callocN(totchildstep*sizeof(ParticleCacheKey), "Child path cache");
 		for(i=0; i<totchild; i++)
 			cache[i] = tcache + i * (ctx->steps + 1);
 

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-01-04 17:48:07 UTC (rev 13131)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-01-04 21:12:48 UTC (rev 13132)
@@ -4079,7 +4079,7 @@
 	Base *base;
 	Object *ob;
 	Scene *sce;
-	float mat[4][4];
+	float mat[4][4], obmat[4][4];
 
 	for(SETLOOPER(re->scene, base)) {
 		ob= base->object;
@@ -4112,6 +4112,7 @@
 				for(dob= lb->first; dob; dob= dob->next) {
 					Object *obd= dob->ob;
 					
+					Mat4CpyMat4(obmat, obd->obmat);
 					Mat4CpyMat4(obd->obmat, dob->mat);
 
 					/* group duplis need to set ob matrices correct, for deform. so no_draw is part handled */
@@ -4134,7 +4135,7 @@
 
 						/* compute difference between object matrix and
 						 * object matrix with dupli transform, in viewspace */
-						Mat4Invert(imat, dob->omat);
+						Mat4Invert(imat, obmat);
 						MTC_Mat4MulSerie(mat, re->viewmat, dob->mat, imat, re->viewinv, 0, 0, 0, 0);
 
 						RE_addRenderInstance(re, NULL, obd, ob, dob->index, 0, mat);
@@ -4145,6 +4146,8 @@
 						
 						obd->flag |= OB_DONE;
 						obd->transflag |= OB_RENDER_DUPLI;
+
+						Mat4CpyMat4(obd->obmat, obmat);
 					}
 					else
 						init_render_object(re, obd, ob, dob->index, only_verts);





More information about the Bf-blender-cvs mailing list