[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35798] trunk/blender/source/blender/ blenkernel/intern/mesh.c: Fixed memory access in mesh_calc_normals().

Sergey Sharybin g.ulairi at gmail.com
Sat Mar 26 10:48:03 CET 2011


Revision: 35798
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35798
Author:   nazgul
Date:     2011-03-26 09:48:03 +0000 (Sat, 26 Mar 2011)
Log Message:
-----------
Fixed memory access in mesh_calc_normals(). Now it uses much less memory.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/mesh.c

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2011-03-26 09:36:45 UTC (rev 35797)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2011-03-26 09:48:03 UTC (rev 35798)
@@ -1306,16 +1306,16 @@
 	if(found_flat!=0) {
 		const int nr_bits= sizeof(int)*8;
 		const int nr_words= (numVerts+(nr_bits-1))/nr_bits;
-		int *bit_array= (int*)MEM_callocN(sizeof(int)*numVerts*nr_words, "temp buffer");
+		int *bit_array= (int*)MEM_callocN(sizeof(int)*MAX2(nr_words, 1), "temp buffer");
 
 		for(i=0; i<numFaces; i++) {
 			MFace *mf= &mfaces[i];
 
 			if(!(mf->flag & ME_SMOOTH)) {
-				if(is_zero_v3(tnorms[mf->v1])) bit_array[mf->v1>>nr_bits]|=(1<<(mf->v1&(nr_bits-1)));
-				if(is_zero_v3(tnorms[mf->v2])) bit_array[mf->v2>>nr_bits]|=(1<<(mf->v2&(nr_bits-1)));
-				if(is_zero_v3(tnorms[mf->v3])) bit_array[mf->v3>>nr_bits]|=(1<<(mf->v3&(nr_bits-1)));
-				if(mf->v4 && is_zero_v3(tnorms[mf->v4])) bit_array[mf->v4>>nr_bits]|=(1<<(mf->v4&(nr_bits-1)));
+				if(is_zero_v3(tnorms[mf->v1])) bit_array[mf->v1/nr_bits]|=(1<<(mf->v1&(nr_bits-1)));
+				if(is_zero_v3(tnorms[mf->v2])) bit_array[mf->v2/nr_bits]|=(1<<(mf->v2&(nr_bits-1)));
+				if(is_zero_v3(tnorms[mf->v3])) bit_array[mf->v3/nr_bits]|=(1<<(mf->v3&(nr_bits-1)));
+				if(mf->v4 && is_zero_v3(tnorms[mf->v4])) bit_array[mf->v4/nr_bits]|=(1<<(mf->v4&(nr_bits-1)));
 			}
 		}
 
@@ -1325,10 +1325,10 @@
 			if((mf->flag&ME_SMOOTH)==0) {
 				float *f_no= fnors[i];
 
-				if(bit_array[mf->v1>>nr_bits]&(1<<(mf->v1&(nr_bits-1)))) add_v3_v3(tnorms[mf->v1], f_no);
-				if(bit_array[mf->v2>>nr_bits]&(1<<(mf->v2&(nr_bits-1)))) add_v3_v3(tnorms[mf->v2], f_no);
-				if(bit_array[mf->v3>>nr_bits]&(1<<(mf->v3&(nr_bits-1)))) add_v3_v3(tnorms[mf->v3], f_no);
-				if(mf->v4 && bit_array[mf->v4>>nr_bits]&(1<<(mf->v4&(nr_bits-1)))) add_v3_v3(tnorms[mf->v4], f_no);
+				if(bit_array[mf->v1/nr_bits]&(1<<(mf->v1&(nr_bits-1)))) add_v3_v3(tnorms[mf->v1], f_no);
+				if(bit_array[mf->v2/nr_bits]&(1<<(mf->v2&(nr_bits-1)))) add_v3_v3(tnorms[mf->v2], f_no);
+				if(bit_array[mf->v3/nr_bits]&(1<<(mf->v3&(nr_bits-1)))) add_v3_v3(tnorms[mf->v3], f_no);
+				if(mf->v4 && bit_array[mf->v4/nr_bits]&(1<<(mf->v4&(nr_bits-1)))) add_v3_v3(tnorms[mf->v4], f_no);
 			}
 		}
 




More information about the Bf-blender-cvs mailing list