[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30031] trunk/blender/source/blender/ blenkernel: Revert revision 29735:

Brecht Van Lommel brecht at blender.org
Tue Jul 6 13:44:45 CEST 2010


Revision: 30031
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30031
Author:   blendix
Date:     2010-07-06 13:44:45 +0200 (Tue, 06 Jul 2010)

Log Message:
-----------
Revert revision 29735:

Fix #22051: crash when scaling parent metaball. Keep the constant resolution
for any motherball's scale.

This avoids running out of memory when scaling the metaball down, but there's
a reason it depends on this scaling, for example for instancing it's more
useful to have this. It also doesn't really solve the problem but only moves it,
it's still possible to run out of memory with different setups/scales.

Revision Links:
--------------
    http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29735

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_mball.h
    trunk/blender/source/blender/blenkernel/intern/mball.c

Modified: trunk/blender/source/blender/blenkernel/BKE_mball.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mball.h	2010-07-06 11:43:08 UTC (rev 30030)
+++ trunk/blender/source/blender/blenkernel/BKE_mball.h	2010-07-06 11:44:45 UTC (rev 30031)
@@ -97,7 +97,6 @@
 	CENTERLIST **centers;		/* cube center hash table */
 	CORNER **corners;			/* corner value hash table */
 	EDGELIST **edges;			/* edge and vertex id hash table */
-	float scale[3];
 } PROCESS;
 
 /* dividing scene using octal tree makes polygonisation faster */

Modified: trunk/blender/source/blender/blenkernel/intern/mball.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mball.c	2010-07-06 11:43:08 UTC (rev 30030)
+++ trunk/blender/source/blender/blenkernel/intern/mball.c	2010-07-06 11:44:45 UTC (rev 30031)
@@ -889,11 +889,11 @@
 	c = (CORNER *) new_pgn_element(sizeof(CORNER));
 
 	c->i = i; 
-	c->x = ((float)i-0.5f)*p->size/p->scale[0];
+	c->x = ((float)i-0.5f)*p->size;
 	c->j = j; 
-	c->y = ((float)j-0.5f)*p->size/p->scale[1];
+	c->y = ((float)j-0.5f)*p->size;
 	c->k = k; 
-	c->z = ((float)k-0.5f)*p->size/p->scale[2];
+	c->z = ((float)k-0.5f)*p->size;
 	c->value = p->function(c->x, c->y, c->z);
 	
 	c->next = p->corners[index];
@@ -1422,9 +1422,9 @@
 					workp_v = in_v;
 					max_len = sqrt((out.x-in.x)*(out.x-in.x) + (out.y-in.y)*(out.y-in.y) + (out.z-in.z)*(out.z-in.z));
 
-					nx = abs((out.x - in.x)/mbproc->size*mbproc->scale[0]);
-					ny = abs((out.y - in.y)/mbproc->size*mbproc->scale[1]);
-					nz = abs((out.z - in.z)/mbproc->size*mbproc->scale[2]);
+					nx = abs((out.x - in.x)/mbproc->size);
+					ny = abs((out.y - in.y)/mbproc->size);
+					nz = abs((out.z - in.z)/mbproc->size);
 					
 					MAXN = MAX3(nx,ny,nz);
 					if(MAXN!=0.0f) {
@@ -1443,9 +1443,9 @@
 							if((tmp_v<0.0 && workp_v>=0.0)||(tmp_v>0.0 && workp_v<=0.0)) {
 
 								/* indexes of CUBE, which includes "first point" */
-								c_i= (int)floor(workp.x/mbproc->size*mbproc->scale[0]);
-								c_j= (int)floor(workp.y/mbproc->size*mbproc->scale[1]);
-								c_k= (int)floor(workp.z/mbproc->size*mbproc->scale[2]);
+								c_i= (int)floor(workp.x/mbproc->size);
+								c_j= (int)floor(workp.y/mbproc->size);
+								c_k= (int)floor(workp.z/mbproc->size);
 								
 								/* add CUBE (with indexes c_i, c_j, c_k) to the stack,
 								 * this cube includes found point of Implicit Surface */
@@ -2095,7 +2095,6 @@
 	DispList *dl;
 	int a, nr_cubes;
 	float *ve, *no, totsize, width;
-	float smat[3][3];
 
 	mb= ob->data;
 
@@ -2103,8 +2102,6 @@
 	if(!(G.rendering) && (mb->flag==MB_UPDATE_NEVER)) return;
 	if(G.moving && mb->flag==MB_UPDATE_FAST) return;
 
-	object_scale_to_mat3(ob, smat);
-
 	curindex= totindex= 0;
 	indices= 0;
 	thresh= mb->thresh;
@@ -2145,7 +2142,6 @@
 		width= mb->wiresize;
 		if(G.moving && mb->flag==MB_UPDATE_HALFRES) width*= 2;
 	}
-
 	/* nr_cubes is just for safety, minimum is totsize */
 	nr_cubes= (int)(0.5+totsize/width);
 
@@ -2156,11 +2152,6 @@
 	mbproc.cubes= 0;
 	mbproc.delta = width/(float)(RES*RES);
 
-	/* to keep constant resolution for any motherball scale */
-	mbproc.scale[0]= smat[0][0];
-	mbproc.scale[1]= smat[1][1];
-	mbproc.scale[2]= smat[2][2];
-
 	polygonize(&mbproc, mb);
 	
 	MEM_freeN(mainb);





More information about the Bf-blender-cvs mailing list