[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47137] trunk/blender/source/blender/ blenkernel/intern: Fix for bug [#31613] Cycles 3d viewport material display mode + skin modifier related crash

Nicholas Bishop nicholasbishop at gmail.com
Mon May 28 23:02:45 CEST 2012


Revision: 47137
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47137
Author:   nicholasbishop
Date:     2012-05-28 21:02:44 +0000 (Mon, 28 May 2012)
Log Message:
-----------
Fix for bug [#31613] Cycles 3d viewport material display mode + skin modifier related crash

When in material display mode, mesh_calc_modifiers() calculates the
orco DerivedMesh, which uses a different CustomDataMask. In
particular, it does not necessarily include the current modifier's
requiredDataMask, so those layers might get set to NO_COPY. For the
skin modifier, this resulted in a crash when the modifier internally
copies the DerivedMesh and the output does not contain the expected
MVertSkin layer.

Fixed by adding the requiredDataMask to the orco DM's CustomDataMask.

Also added a debugging function to customdata.c:
customData_mask_layers__print(CustomDataMask mask);

This will print out the names of all the CD layer types in the mask.

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

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-05-28 20:18:06 UTC (rev 47136)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-05-28 21:02:44 UTC (rev 47137)
@@ -1651,7 +1651,9 @@
 					orcodm = create_orco_dm(ob, me, NULL, CD_ORCO);
 
 				nextmask &= ~CD_MASK_ORCO;
-				DM_set_only_copy(orcodm, nextmask | CD_MASK_ORIGINDEX);
+				DM_set_only_copy(orcodm, nextmask | CD_MASK_ORIGINDEX |
+								 (mti->requiredDataMask ?
+								  mti->requiredDataMask(ob, md) : 0));
 				ndm = mti->applyModifier(md, ob, orcodm, app_flags & ~MOD_APPLY_USECACHE);
 
 				if (ndm) {

Modified: trunk/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/customdata.c	2012-05-28 20:18:06 UTC (rev 47136)
+++ trunk/blender/source/blender/blenkernel/intern/customdata.c	2012-05-28 21:02:44 UTC (rev 47137)
@@ -1193,6 +1193,17 @@
 	return LAYERTYPENAMES[type];
 }
 
+void customData_mask_layers__print(CustomDataMask mask)
+{
+	int i;
+
+	printf("mask=0x%lx:\n", mask);
+	for (i = 0; i < CD_NUMTYPES; i++) {
+		if (mask & CD_TYPE_AS_MASK(i))
+			printf("  %s\n", layerType_getName(i));
+	}
+}
+
 /********************* CustomData functions *********************/
 static void customData_update_offsets(CustomData *data);
 




More information about the Bf-blender-cvs mailing list