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

Reply via email to