Commit: d21c1dc1b44c6bd8220a326b0f0bdc6b2bd74883
Author: Martin Felke
Date: Fri Mar 13 10:32:54 2015 +0100
Branches: fracture_modifier
https://developer.blender.org/rBd21c1dc1b44c6bd8220a326b0f0bdc6b2bd74883
partial material deletion fix for Fracture Modifier, effectively keeping
necessary slots, else the mesh gets messed up which leads to crashes, and...
making visible_mesh_cached now necessary for returning a dm out of the modifier
===================================================================
M source/blender/blenkernel/intern/material.c
M source/blender/modifiers/intern/MOD_fracture.c
===================================================================
diff --git a/source/blender/blenkernel/intern/material.c
b/source/blender/blenkernel/intern/material.c
index 981064b..9f3b405 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -45,6 +45,7 @@
#include "DNA_customdata_types.h"
#include "DNA_ID.h"
#include "DNA_meta_types.h"
+#include "DNA_modifier_types.h"
#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -56,6 +57,7 @@
#include "BKE_animsys.h"
#include "BKE_displist.h"
+#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
#include "BKE_icons.h"
#include "BKE_image.h"
@@ -63,6 +65,7 @@
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_mesh.h"
+#include "BKE_modifier.h"
#include "BKE_scene.h"
#include "BKE_node.h"
#include "BKE_curve.h"
@@ -1229,6 +1232,7 @@ bool object_remove_material_slot(Object *ob)
Object *obt;
short *totcolp;
short a, actcol;
+ FractureModifierData *fmd;
if (ob == NULL || ob->totcol == 0) {
return false;
@@ -1307,6 +1311,14 @@ bool object_remove_material_slot(Object *ob)
}
}
+ /* also check the Fracture Modifier stored Derivedmesh, its polys may
point to invalid index by now */
+ fmd = (FractureModifierData *)modifiers_findByType(ob,
eModifierType_Fracture);
+ if (fmd && fmd->visible_mesh_cached) {
+ /* this effectively removes materials, but regenerates atleast
2 of them (as being necessary for modifier,
+ * thus avoiding crashes and messing up the mesh, an ugly
solution but better than crash... */
+ fmd->refresh = true;
+ }
+
return true;
}
diff --git a/source/blender/modifiers/intern/MOD_fracture.c
b/source/blender/modifiers/intern/MOD_fracture.c
index 445e68b..2a4d092 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -2813,6 +2813,7 @@ static DerivedMesh *doSimulate(FractureModifierData *fmd,
Object *ob, DerivedMes
}
}
+#if 0
if ((fmd->visible_mesh != NULL) && exploOK) {
DerivedMesh *dm_final;
/* HERE Hide facepairs closer than dist X*/
@@ -2826,7 +2827,10 @@ static DerivedMesh *doSimulate(FractureModifierData
*fmd, Object *ob, DerivedMes
}
return dm_final;
}
- else if ((fmd->visible_mesh_cached != NULL) && exploOK) {
+ else
+#endif
+
+ if ((fmd->visible_mesh_cached != NULL) && exploOK) {
DerivedMesh *dm_final;
if (fmd->autohide_dist > 0 && fmd->face_pairs) {
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs