[Bf-blender-cvs] [04d15f16254] blender-v2.83-release: Fix T76573: Make links with Multires leading to crash

Sergey Sharybin noreply at git.blender.org
Mon May 18 10:49:10 CEST 2020


Commit: 04d15f162546ea9269b08525dac66482b83e8fe2
Author: Sergey Sharybin
Date:   Mon May 18 10:48:45 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rB04d15f162546ea9269b08525dac66482b83e8fe2

Fix T76573: Make links with Multires leading to crash

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

M	source/blender/blenkernel/intern/multires_reshape.c

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

diff --git a/source/blender/blenkernel/intern/multires_reshape.c b/source/blender/blenkernel/intern/multires_reshape.c
index 02cd5f094a6..01e7b87cac0 100644
--- a/source/blender/blenkernel/intern/multires_reshape.c
+++ b/source/blender/blenkernel/intern/multires_reshape.c
@@ -188,7 +188,16 @@ void multiresModifier_subdivide_to_level(struct Object *object,
   if (!has_mdisps) {
     CustomData_add_layer(&coarse_mesh->ldata, CD_MDISPS, CD_CALLOC, NULL, coarse_mesh->totloop);
   }
-  if (!has_mdisps || top_level == 1) {
+
+  /* NOTE: Subdivision happens from the top level of the existing multires modifier. If it is set
+   * to 0 and there is mdisps layer it would mean that the modifier went out of sync with the data.
+   * This happens when, for example, linking modifiers from one object to another.
+   *
+   * In such cases simply ensure grids to be the proper level.
+   *
+   * If something smarter is needed it is up to the operators which does data synchronization, so
+   * that the mdisps layer is also synchronized. */
+  if (!has_mdisps || top_level == 1 || mmd->totlvl == 0) {
     multires_reshape_ensure_grids(coarse_mesh, top_level);
     multires_set_tot_level(object, mmd, top_level);
     return;



More information about the Bf-blender-cvs mailing list