Fix: Grease Pencil: Assert duplicating layer with attributes
When duplicating a layer with layer attribute, caught an assert hit at `attribute_to_writer()` due to size mismatch between attribute domain (layers count) and attribute length. Now fixed by moving `add_node()` prior to `foreach_attribute()`. This way, extra node already added to runtime data and layer count is updated inside `ensure_nodes_cache` with the next layers() call Noticed it during review of !141090 Pull Request: https://projects.blender.org/blender/blender/pulls/141722
This commit is contained in:
committed by
Pratik Borhade
parent
3f6861f8f3
commit
f4dbe20940
@@ -3742,6 +3742,10 @@ blender::bke::greasepencil::Layer &GreasePencil::duplicate_layer(
|
||||
std::optional<int> duplicate_layer_idx = get_layer_index(duplicate_layer);
|
||||
BLI_assert(duplicate_layer_idx.has_value());
|
||||
const int numLayers = layers().size();
|
||||
bke::greasepencil::Layer *new_layer = MEM_new<bke::greasepencil::Layer>(__func__,
|
||||
duplicate_layer);
|
||||
root_group().add_node(new_layer->as_node());
|
||||
|
||||
this->attribute_storage.wrap().resize(bke::AttrDomain::Layer, numLayers + 1);
|
||||
bke::MutableAttributeAccessor attributes = this->attributes_for_write();
|
||||
attributes.foreach_attribute([&](const bke::AttributeIter &iter) {
|
||||
@@ -3749,9 +3753,7 @@ blender::bke::greasepencil::Layer &GreasePencil::duplicate_layer(
|
||||
GMutableSpan span = attr.span;
|
||||
span.type().copy_assign(span[*duplicate_layer_idx], span[numLayers]);
|
||||
});
|
||||
bke::greasepencil::Layer *new_layer = MEM_new<bke::greasepencil::Layer>(__func__,
|
||||
duplicate_layer);
|
||||
root_group().add_node(new_layer->as_node());
|
||||
|
||||
this->update_drawing_users_for_layer(*new_layer);
|
||||
new_layer->set_name(unique_name);
|
||||
return *new_layer;
|
||||
|
||||
Reference in New Issue
Block a user