From 5e6f3b85646fe96031c3eafe65e9bc7b55468685 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Wed, 19 May 2021 11:02:25 +0200 Subject: Geometry Nodes: take materials into account when joining geometries Materials are now kept intact when using the Join Geometry node or when realizing instaces. --- source/blender/blenkernel/intern/material.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'source/blender/blenkernel/intern/material.c') diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index 73afea98163..73a7a69f5a5 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -768,6 +768,31 @@ int BKE_object_material_count_eval(Object *ob) return len_p ? *len_p : 0; } +void BKE_id_material_eval_assign(ID *id, int slot, Material *material) +{ + Material ***materials_ptr = BKE_id_material_array_p(id); + short *len_ptr = BKE_id_material_len_p(id); + if (ELEM(NULL, materials_ptr, len_ptr)) { + BLI_assert_unreachable(); + return; + } + + const int slot_index = slot - 1; + const int old_length = *len_ptr; + + if (slot_index >= old_length) { + /* Need to grow slots array. */ + const int new_length = slot_index + 1; + *materials_ptr = MEM_reallocN(*materials_ptr, sizeof(void *) * new_length); + *len_ptr = new_length; + for (int i = old_length; i < new_length; i++) { + (*materials_ptr)[i] = NULL; + } + } + + (*materials_ptr)[slot_index] = material; +} + Material *BKE_gpencil_material(Object *ob, short act) { Material *ma = BKE_object_material_get(ob, act); -- cgit v1.2.3