[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26648] trunk/blender/source/blender/ blenkernel/intern/DerivedMesh.c: Fix game engine crashing with subsurf modifier, only allow caching

Brecht Van Lommel brecht at blender.org
Sat Feb 6 19:21:34 CET 2010


Revision: 26648
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26648
Author:   blendix
Date:     2010-02-06 19:21:33 +0100 (Sat, 06 Feb 2010)

Log Message:
-----------
Fix game engine crashing with subsurf modifier, only allow caching
of CCGSubsurf when computing ob/em->derivedFinal.

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

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2010-02-06 17:38:23 UTC (rev 26647)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2010-02-06 18:21:33 UTC (rev 26648)
@@ -1622,7 +1622,7 @@
 static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos)[3],
                                 DerivedMesh **deform_r, DerivedMesh **final_r,
                                 int useRenderParams, int useDeform,
-                                int needMapping, CustomDataMask dataMask, int index)
+                                int needMapping, CustomDataMask dataMask, int index, int useCache)
 {
 	Mesh *me = ob->data;
 	ModifierData *firstmd, *md;
@@ -1798,7 +1798,7 @@
 				if(!CustomData_has_layer(&dm->faceData, CD_ORIGSPACE))
 					DM_add_face_layer(dm, CD_ORIGSPACE, CD_DEFAULT, NULL);
 
-			ndm = mti->applyModifier(md, ob, dm, useRenderParams, !inputVertexCos);
+			ndm = mti->applyModifier(md, ob, dm, useRenderParams, useCache);
 
 			if(ndm) {
 				/* if the modifier returned a new dm, release the old one */
@@ -2093,6 +2093,7 @@
 	freedisplist(&ob->disp);
 
 	if (ob->derivedFinal) {
+		printf("free derived final %s %p\n", ob->id.name, ob->derivedFinal);
 		ob->derivedFinal->needsFree = 1;
 		ob->derivedFinal->release(ob->derivedFinal);
 		ob->derivedFinal= NULL;
@@ -2116,7 +2117,7 @@
 
 	mesh_calc_modifiers(scene, ob, NULL, &ob->derivedDeform,
 						&ob->derivedFinal, 0, 1,
-						needMapping, dataMask, -1);
+						needMapping, dataMask, -1, 1);
 
 	INIT_MINMAX(min, max);
 
@@ -2130,6 +2131,7 @@
 	ob->derivedDeform->needsFree = 0;
 	ob->lastDataMask = dataMask;
 
+	printf("build derived final %s %p\n", ob->id.name, ob->derivedFinal);
 }
 
 static void editmesh_build_data(Scene *scene, Object *obedit, EditMesh *em, CustomDataMask dataMask)
@@ -2203,7 +2205,7 @@
 {
 	DerivedMesh *final;
 	
-	mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, -1);
+	mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, -1, 0);
 
 	return final;
 }
@@ -2212,7 +2214,7 @@
 {
 	DerivedMesh *final;
 	
-	mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, index);
+	mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, index, 0);
 
 	return final;
 }
@@ -2221,7 +2223,7 @@
 {
 	DerivedMesh *final;
 
-	mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 0, 1, 0, dataMask, -1);
+	mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 0, 1, 0, dataMask, -1, 0);
 
 	return final;
 }
@@ -2231,7 +2233,7 @@
 {
 	DerivedMesh *final;
 	
-	mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 0, 0, 0, dataMask, -1);
+	mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 0, 0, 0, dataMask, -1, 0);
 
 	return final;
 }
@@ -2241,7 +2243,7 @@
 {
 	DerivedMesh *final;
 	
-	mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 0, -1, 0, dataMask, -1);
+	mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 0, -1, 0, dataMask, -1, 0);
 
 	return final;
 }
@@ -2252,7 +2254,7 @@
 {
 	DerivedMesh *final;
 
-	mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 1, 0, 0, dataMask, -1);
+	mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 1, 0, 0, dataMask, -1, 0);
 
 	return final;
 }





More information about the Bf-blender-cvs mailing list