diff --git a/source/blender/blenkernel/intern/grease_pencil.cc b/source/blender/blenkernel/intern/grease_pencil.cc index 44afcfc9eb2..5d048a6bf5d 100644 --- a/source/blender/blenkernel/intern/grease_pencil.cc +++ b/source/blender/blenkernel/intern/grease_pencil.cc @@ -3243,7 +3243,7 @@ blender::bke::greasepencil::Layer &GreasePencil::add_layer(const blender::String using namespace blender; std::string unique_name = check_name_is_unique ? unique_layer_name(*this, name) : name.c_str(); const int numLayers = layers().size(); - CustomData_realloc(&layers_data, numLayers, numLayers + 1); + CustomData_realloc(&layers_data, numLayers, numLayers + 1, CD_SET_DEFAULT); bke::greasepencil::Layer *new_layer = MEM_new(__func__, unique_name); /* Hide masks by default. */ new_layer->base.flag |= GP_LAYER_TREE_NODE_HIDE_MASKS; @@ -3288,8 +3288,15 @@ blender::bke::greasepencil::Layer &GreasePencil::duplicate_layer( { using namespace blender; std::string unique_name = unique_layer_name(*this, duplicate_layer.name()); + std::optional duplicate_layer_idx = get_layer_index(duplicate_layer); const int numLayers = layers().size(); CustomData_realloc(&layers_data, numLayers, numLayers + 1); + if (duplicate_layer_idx.has_value()) { + for (const int layer_index : IndexRange(layers_data.totlayer)) { + CustomData_copy_data_layer( + &layers_data, &layers_data, layer_index, layer_index, *duplicate_layer_idx, numLayers, 1); + } + } bke::greasepencil::Layer *new_layer = MEM_new(__func__, duplicate_layer); root_group().add_node(new_layer->as_node());