[Bf-blender-cvs] [c29f9e14e41] blender-v3.0-release: Fix T92780: Lost material in case of local object, and missing linked obdata.

Bastien Montagne noreply at git.blender.org
Wed Nov 3 18:16:02 CET 2021


Commit: c29f9e14e4180af0fbba83d66e08c9852da7fa9c
Author: Bastien Montagne
Date:   Wed Nov 3 17:57:45 2021 +0100
Branches: blender-v3.0-release
https://developer.blender.org/rBc29f9e14e4180af0fbba83d66e08c9852da7fa9c

Fix T92780: Lost material in case of local object, and missing linked obdata.

By default, when syncing materials slots between object and its obdata,
the amount of slots in obdata is the reference.

Missing linked obdata is replaced by an empty placeholder that has no
material. In that specific case, if we have a valid object ID, we want
to update the (placeholder) obdata's material count from the object one,
and not the other way around.

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

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

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

diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index d3b34639d8a..d82559a27cb 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -900,7 +900,17 @@ void BKE_object_materials_test(Main *bmain, Object *ob, ID *id)
     return;
   }
 
-  BKE_object_material_resize(bmain, ob, *totcol, false);
+  if ((ob->id.tag & LIB_TAG_MISSING) == 0 && (id->tag & LIB_TAG_MISSING) != 0) {
+    /* Exception: In case the object is a valid data, but its obdata is an empty place-holder,
+     * use object's material slots amount as reference.
+     * This avoids loosing materials in a local object when its linked obdata gets missing.
+     * See T92780. */
+    BKE_id_material_resize(bmain, id, (short)ob->totcol, false);
+  }
+  else {
+    /* Normal case: the use the obdata amount of materials slots to update the object's one. */
+    BKE_object_material_resize(bmain, ob, *totcol, false);
+  }
 }
 
 void BKE_objects_materials_test_all(Main *bmain, ID *id)



More information about the Bf-blender-cvs mailing list