diff options
author | Jacques Lucke <jacques@blender.org> | 2022-11-08 18:28:11 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2022-11-08 18:28:11 +0300 |
commit | bbb1d3e5e7eb4059a0324ae786e1e793852963a9 (patch) | |
tree | 1a2d7d18febae7041916c8041761d05c6bf4fea6 | |
parent | 6a14ca18d04de41cc785a9fc38a3ff723215bae3 (diff) | |
parent | 0a7308a0f1493a5b0d8ab7b764893f1772ab1008 (diff) |
Merge branch 'blender-v3.4-release'
-rw-r--r-- | source/blender/blenkernel/intern/customdata.cc | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index 8b791eb4a00..84aa2207400 100644 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@ -2799,11 +2799,6 @@ static CustomDataLayer *customData_add_layer__internal(CustomData *data, const LayerTypeInfo *typeInfo = layerType_getInfo(type); int flag = 0; - if (!typeInfo->defaultname && CustomData_has_layer(data, type)) { - MEM_SAFE_FREE(layerdata); - return &data->layers[CustomData_get_layer_index(data, type)]; - } - void *newlayerdata = nullptr; switch (alloctype) { case CD_SET_DEFAULT: @@ -2856,6 +2851,21 @@ static CustomDataLayer *customData_add_layer__internal(CustomData *data, break; } + /* Some layer types only support a single layer. */ + const bool reuse_existing_layer = !typeInfo->defaultname && CustomData_has_layer(data, type); + if (reuse_existing_layer) { + CustomDataLayer &layer = data->layers[CustomData_get_layer_index(data, type)]; + if (layer.data != nullptr) { + if (typeInfo->free) { + typeInfo->free(layer.data, totelem, typeInfo->size); + } + MEM_SAFE_FREE(layer.data); + } + layer.data = newlayerdata; + layer.flag = flag; + return &layer; + } + int index = data->totlayer; if (index >= data->maxlayer) { if (!customData_resize(data, CUSTOMDATA_GROW)) { |