From 66dd9fbf229f78207f2f7a8701bcb2da46328875 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 20 Jul 2015 16:55:46 +0200 Subject: Fix (unreported) broken MixWeight modifier in debug builds. defvert_find_index() & co now assert when '-1' invalid vgroup index is passed. We used to rely on NULL value returned in this case, but with the assert... The assert completely stalls blender actually (repeated for every vertex!). So much better to not call that func when vgroup index is invalid. --- source/blender/modifiers/intern/MOD_weightvgmix.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'source/blender/modifiers/intern/MOD_weightvgmix.c') diff --git a/source/blender/modifiers/intern/MOD_weightvgmix.c b/source/blender/modifiers/intern/MOD_weightvgmix.c index 3d60c4a8b8b..0649998e42d 100644 --- a/source/blender/modifiers/intern/MOD_weightvgmix.c +++ b/source/blender/modifiers/intern/MOD_weightvgmix.c @@ -267,7 +267,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der defgrp_index = defgroup_name_index(ob, wmd->defgrp_name_a); if (defgrp_index == -1) return dm; - /* Get seconf vgroup idx from its name, if given. */ + /* Get second vgroup idx from its name, if given. */ if (wmd->defgrp_name_b[0] != (char)0) { defgrp_index_other = defgroup_name_index(ob, wmd->defgrp_name_b); if (defgrp_index_other == -1) @@ -298,7 +298,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der MDeformWeight *dw = defvert_find_index(&dvert[i], defgrp_index); if (dw) { tdw1[numIdx] = dw; - tdw2[numIdx] = defvert_find_index(&dvert[i], defgrp_index_other); + tdw2[numIdx] = (defgrp_index_other >= 0) ? defvert_find_index(&dvert[i], defgrp_index_other) : NULL; tidx[numIdx++] = i; } } @@ -306,7 +306,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der case MOD_WVG_SET_B: /* All vertices in second vgroup. */ for (i = 0; i < numVerts; i++) { - MDeformWeight *dw = defvert_find_index(&dvert[i], defgrp_index_other); + MDeformWeight *dw = (defgrp_index_other >= 0) ? defvert_find_index(&dvert[i], defgrp_index_other) : NULL; if (dw) { tdw1[numIdx] = defvert_find_index(&dvert[i], defgrp_index); tdw2[numIdx] = dw; @@ -318,7 +318,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der /* All vertices in one vgroup or the other. */ for (i = 0; i < numVerts; i++) { MDeformWeight *adw = defvert_find_index(&dvert[i], defgrp_index); - MDeformWeight *bdw = defvert_find_index(&dvert[i], defgrp_index_other); + MDeformWeight *bdw = (defgrp_index_other >= 0) ? defvert_find_index(&dvert[i], defgrp_index_other) : NULL; if (adw || bdw) { tdw1[numIdx] = adw; tdw2[numIdx] = bdw; @@ -330,7 +330,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der /* All vertices in both vgroups. */ for (i = 0; i < numVerts; i++) { MDeformWeight *adw = defvert_find_index(&dvert[i], defgrp_index); - MDeformWeight *bdw = defvert_find_index(&dvert[i], defgrp_index_other); + MDeformWeight *bdw = (defgrp_index_other >= 0) ? defvert_find_index(&dvert[i], defgrp_index_other) : NULL; if (adw && bdw) { tdw1[numIdx] = adw; tdw2[numIdx] = bdw; @@ -343,7 +343,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der /* Use all vertices. */ for (i = 0; i < numVerts; i++) { tdw1[i] = defvert_find_index(&dvert[i], defgrp_index); - tdw2[i] = defvert_find_index(&dvert[i], defgrp_index_other); + tdw2[i] = (defgrp_index_other >= 0) ? defvert_find_index(&dvert[i], defgrp_index_other) : NULL; } numIdx = -1; break; -- cgit v1.2.3