Merge branch 'master' into blender2.8
[blender.git] / source / blender / blenkernel / intern / deform.c
index 9f0024c01fd32c4083462297682fb0b503587fbd..584942628fac012ea2977e025d13e5d76421fd14 100644 (file)
@@ -74,7 +74,7 @@ bDeformGroup *BKE_defgroup_new(Object *ob, const char *name)
        BLI_addtail(&ob->defbase, defgroup);
        defgroup_unique_name(defgroup, ob);
 
-       BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_PAINT);
+       BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_NOCHECK);
 
        return defgroup;
 }
@@ -624,8 +624,17 @@ float defvert_find_weight(const struct MDeformVert *dvert, const int defgroup)
  */
 float defvert_array_find_weight_safe(const struct MDeformVert *dvert, const int index, const int defgroup)
 {
-       if (defgroup == -1 || dvert == NULL)
+       /* Invalid defgroup index means the vgroup selected is invalid, does not exist, in that case it is OK to return 1.0
+        * (i.e. maximum weight, as if no vgroup was selected).
+        * But in case of valid defgroup and NULL dvert data pointer, it means that vgroup **is** valid,
+        * and just totally empty, so we shall return '0.0' value then!
+       */
+       if (defgroup == -1) {
                return 1.0f;
+       }
+       else if (dvert == NULL) {
+               return 0.0f;
+       }
 
        return defvert_find_weight(dvert + index, defgroup);
 }