[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50976] trunk/blender/source/blender/ blenkernel/intern: fix [#32713] Crash with modifiers + GLSL mode

Campbell Barton ideasman42 at gmail.com
Mon Oct 1 13:05:09 CEST 2012


Revision: 50976
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50976
Author:   campbellbarton
Date:     2012-10-01 11:05:09 +0000 (Mon, 01 Oct 2012)
Log Message:
-----------
fix [#32713] Crash with modifiers + GLSL mode

crash caused by own commit r50969, the fix exposed a crash in an area of code that must have never been used before.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50969

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

Modified: trunk/blender/source/blender/blenkernel/intern/mask.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mask.c	2012-10-01 10:43:52 UTC (rev 50975)
+++ trunk/blender/source/blender/blenkernel/intern/mask.c	2012-10-01 11:05:09 UTC (rev 50976)
@@ -1525,7 +1525,7 @@
 }
 
 
-/* *** own animation/shapekey implimentation ***
+/* *** own animation/shapekey implementation ***
  * BKE_mask_layer_shape_XXX */
 
 int BKE_mask_layer_shape_totvert(MaskLayer *masklay)

Modified: trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2012-10-01 10:43:52 UTC (rev 50975)
+++ trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2012-10-01 11:05:09 UTC (rev 50976)
@@ -49,7 +49,7 @@
 	MLoop *mloop, *ml;
 	BMVert *v, **vtable, **verts = NULL;
 	BMEdge *e, **etable, **edges = NULL;
-	float has_face_normals;
+	float (*face_normals)[3];
 	BMFace *f;
 	BMIter liter;
 	BLI_array_declare(verts);
@@ -72,8 +72,8 @@
 	BM_data_layer_add(bm, &bm->edata, CD_BWEIGHT);
 	BM_data_layer_add(bm, &bm->vdata, CD_BWEIGHT);
 
-	vtable = MEM_callocN(sizeof(void **) * totvert, "vert table in BMDM_Copy");
-	etable = MEM_callocN(sizeof(void **) * totedge, "edge table in BMDM_Copy");
+	vtable = MEM_callocN(sizeof(void **) * totvert, __func__);
+	etable = MEM_callocN(sizeof(void **) * totedge, __func__);
 
 	/*do verts*/
 	mv = mvert = dm->dupVertArray(dm);
@@ -110,7 +110,7 @@
 	/*do faces*/
 	mp = dm->getPolyArray(dm);
 	mloop = dm->getLoopArray(dm);
-	has_face_normals = CustomData_has_layer(&dm->polyData, CD_NORMAL);
+	face_normals = CustomData_get_layer(&dm->polyData, CD_NORMAL);  /* can be NULL */
 	for (i = 0; i < dm->numPolyData; i++, mp++) {
 		BMLoop *l;
 
@@ -143,12 +143,12 @@
 
 		CustomData_to_bmesh_block(&dm->polyData, &bm->pdata, i, &f->head.data);
 
-		if (has_face_normals) {
-			float *fno;
-
-			fno = CustomData_bmesh_get(&bm->pdata, &f->head.data, CD_NORMAL);
-			copy_v3_v3(f->no, fno);
+		if (face_normals) {
+			copy_v3_v3(f->no, face_normals[i]);
 		}
+		else {
+			BM_face_normal_update(f);
+		}
 	}
 
 	MEM_freeN(vtable);




More information about the Bf-blender-cvs mailing list