[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