diff --git a/source/blender/blenkernel/BKE_grease_pencil.hh b/source/blender/blenkernel/BKE_grease_pencil.hh index 764563b9561..e124c2548ea 100644 --- a/source/blender/blenkernel/BKE_grease_pencil.hh +++ b/source/blender/blenkernel/BKE_grease_pencil.hh @@ -826,6 +826,7 @@ Material *BKE_grease_pencil_object_material_ensure_from_active_input_brush(Main Brush *brush); Material *BKE_grease_pencil_object_material_ensure_from_active_input_material(Object *ob); Material *BKE_grease_pencil_object_material_ensure_active(Object *ob); +void BKE_grease_pencil_material_remap(GreasePencil *grease_pencil, const uint *remap, int totcol); bool BKE_grease_pencil_references_cyclic_check(const GreasePencil *id_reference, const GreasePencil *grease_pencil); diff --git a/source/blender/blenkernel/intern/grease_pencil.cc b/source/blender/blenkernel/intern/grease_pencil.cc index 9697b4f3233..c0401515c0a 100644 --- a/source/blender/blenkernel/intern/grease_pencil.cc +++ b/source/blender/blenkernel/intern/grease_pencil.cc @@ -1386,6 +1386,29 @@ Material *BKE_grease_pencil_object_material_ensure_active(Object *ob) return ma; } +void BKE_grease_pencil_material_remap(GreasePencil *grease_pencil, const uint *remap, int totcol) +{ + using namespace blender::bke; + + for (GreasePencilDrawingBase *base : grease_pencil->drawings()) { + if (base->type != GP_DRAWING) { + continue; + } + greasepencil::Drawing &drawing = reinterpret_cast(base)->wrap(); + MutableAttributeAccessor attributes = drawing.strokes_for_write().attributes_for_write(); + SpanAttributeWriter material_indices = attributes.lookup_or_add_for_write_span( + "material_index", ATTR_DOMAIN_CURVE); + if (!material_indices) { + return; + } + for (const int i : material_indices.span.index_range()) { + BLI_assert(IndexRange(totcol).contains(remap[material_indices.span[i]])); + material_indices.span[i] = remap[material_indices.span[i]]; + } + material_indices.finish(); + } +} + /** \} */ /* ------------------------------------------------------------------- */ diff --git a/source/blender/blenkernel/intern/material.cc b/source/blender/blenkernel/intern/material.cc index 050e7200763..4d60e759683 100644 --- a/source/blender/blenkernel/intern/material.cc +++ b/source/blender/blenkernel/intern/material.cc @@ -53,6 +53,7 @@ #include "BKE_displist.h" #include "BKE_editmesh.h" #include "BKE_gpencil_legacy.h" +#include "BKE_grease_pencil.hh" #include "BKE_icons.h" #include "BKE_idtype.h" #include "BKE_image.h" @@ -1112,6 +1113,9 @@ void BKE_object_material_remap(Object *ob, const uint *remap) else if (ob->type == OB_GPENCIL_LEGACY) { BKE_gpencil_material_remap(static_cast(ob->data), remap, ob->totcol); } + else if (ob->type == OB_GREASE_PENCIL) { + BKE_grease_pencil_material_remap(static_cast(ob->data), remap, ob->totcol); + } else { /* add support for this object data! */ BLI_assert(matar == nullptr); diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_add.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_add.cc index 6b57c720fe2..4a45f910dee 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_add.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_add.cc @@ -1226,7 +1226,7 @@ void create_suzanne(Main &bmain, Object &object, float4x4 matrix, const int fram int color_skin_light = add_material_from_template(bmain, object, gp_monkey_material_skin_light); int color_skin_shadow = add_material_from_template( bmain, object, gp_monkey_material_skin_shadow); - object.actcol = color_black; + object.actcol = color_black + 1; const std::array monkey_line_materials({ color_black,