[Bf-blender-cvs] [d21c1dc] fracture_modifier: 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
Martin Felke
noreply at git.blender.org
Fri Mar 13 10:34:23 CET 2015
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) {
More information about the Bf-blender-cvs
mailing list