[Bf-blender-cvs] [1355130] fracture_modifier: fix: correction for material handling with sub object groups, it could happen that the index was calculated incorrectly, thus leading to black faces (no material)

Martin Felke noreply at git.blender.org
Thu Mar 12 21:38:05 CET 2015


Commit: 13551302c0609cd52eda702e881ed4250a11413f
Author: Martin Felke
Date:   Thu Mar 12 21:37:51 2015 +0100
Branches: fracture_modifier
https://developer.blender.org/rB13551302c0609cd52eda702e881ed4250a11413f

fix: correction for material handling with sub object groups, it could happen that the index was calculated incorrectly, thus leading to black faces (no material)

===================================================================

M	source/blender/modifiers/intern/MOD_fracture.c

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index d27229a..445e68b 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -599,7 +599,7 @@ static DerivedMesh *get_group_dm(FractureModifierData *fmd, DerivedMesh *dm, Obj
 	/* combine derived meshes from group objects into 1, trigger submodifiers if ob->derivedFinal is empty */
 	int totgroup = 0, i = 0;
 	int num_verts = 0, num_polys = 0, num_loops = 0;
-	int vertstart = 0, polystart = 0, loopstart = 0, matstart = 0;
+	int vertstart = 0, polystart = 0, loopstart = 0, matstart = 1;
 	DerivedMesh *result;
 	MVert *mverts;
 	MPoly *mpolys;
@@ -692,11 +692,12 @@ static DerivedMesh *get_group_dm(FractureModifierData *fmd, DerivedMesh *dm, Obj
 				int index = find_material_index(ob, (*matarar)[j]);
 				if (index == 0)
 				{
-					k++;
 					assign_material(ob, (*matarar)[j], matstart + k, BKE_MAT_ASSIGN_USERPREF);
+					index = matstart + k;
+					k++;
 				}
 
-				BLI_ghash_insert(mat_index_map, SET_INT_IN_POINTER(matstart+j+1), SET_INT_IN_POINTER(index));
+				BLI_ghash_insert(mat_index_map, SET_INT_IN_POINTER(matstart+j), SET_INT_IN_POINTER(index));
 			}
 
 			j = 0;
@@ -715,16 +716,8 @@ static DerivedMesh *get_group_dm(FractureModifierData *fmd, DerivedMesh *dm, Obj
 				mp->loopstart += loopstart;
 
 				/* material index lookup and correction, avoid having the same material in different slots */
-				index = GET_INT_FROM_POINTER(BLI_ghash_lookup(mat_index_map, SET_INT_IN_POINTER(mp->mat_nr+matstart)));
-
-				if (index == 0)
-				{
-					mp->mat_nr += matstart;
-				}
-				else
-				{
-					mp->mat_nr = index;
-				}
+				index = GET_INT_FROM_POINTER(BLI_ghash_lookup(mat_index_map, SET_INT_IN_POINTER(mp->mat_nr + matstart)));
+				mp->mat_nr = index-1;
 			}
 
 			memcpy(mloops + loopstart, dm_ob->getLoopArray(dm_ob), dm_ob->getNumLoops(dm_ob) * sizeof(MLoop));




More information about the Bf-blender-cvs mailing list