Cleanup: Use references for CustomData arguments in data transfer

This commit is contained in:
Hans Goudey
2025-07-01 16:35:38 -04:00
committed by Hans Goudey
parent 325ceabb09
commit c21a98d76a
3 changed files with 66 additions and 85 deletions

View File

@@ -544,8 +544,8 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(ListBase *r_map
const int num_elem_dst,
const bool use_create,
const bool use_delete,
const CustomData *cd_src,
CustomData *cd_dst,
const CustomData &cd_src,
CustomData &cd_dst,
const int tolayers,
const bool *use_layers_src,
const int num_layers_src,
@@ -555,7 +555,7 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(ListBase *r_map
const void *data_src;
void *data_dst = nullptr;
int idx_src = num_layers_src;
int idx_dst, tot_dst = CustomData_number_of_layers(cd_dst, cddata_type);
int idx_dst, tot_dst = CustomData_number_of_layers(&cd_dst, cddata_type);
bool *data_dst_to_delete = nullptr;
if (!use_layers_src) {
@@ -563,7 +563,7 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(ListBase *r_map
if (use_delete) {
idx_dst = tot_dst;
while (idx_dst--) {
CustomData_free_layer(cd_dst, cddata_type, idx_dst);
CustomData_free_layer(&cd_dst, cddata_type, idx_dst);
}
}
return true;
@@ -584,7 +584,7 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(ListBase *r_map
/* Create as much data layers as necessary! */
for (; idx_dst < idx_src; idx_dst++) {
CustomData_add_layer(
cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst);
&cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst);
}
}
else {
@@ -594,7 +594,7 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(ListBase *r_map
}
else if (use_delete && idx_dst > idx_src) {
while (idx_dst-- > idx_src) {
CustomData_free_layer(cd_dst, cddata_type, idx_dst);
CustomData_free_layer(&cd_dst, cddata_type, idx_dst);
}
}
if (r_map) {
@@ -602,8 +602,8 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(ListBase *r_map
if (!use_layers_src[idx_src]) {
continue;
}
data_src = CustomData_get_layer_n(cd_src, cddata_type, idx_src);
data_dst = CustomData_get_layer_n_for_write(cd_dst, cddata_type, idx_src, num_elem_dst);
data_src = CustomData_get_layer_n(&cd_src, cddata_type, idx_src);
data_dst = CustomData_get_layer_n_for_write(&cd_dst, cddata_type, idx_src, num_elem_dst);
data_transfer_layersmapping_add_item_cd(r_map,
cddata_type,
mix_mode,
@@ -631,14 +631,14 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(ListBase *r_map
continue;
}
name = CustomData_get_layer_name(cd_src, cddata_type, idx_src);
data_src = CustomData_get_layer_n(cd_src, cddata_type, idx_src);
idx_dst = CustomData_get_named_layer(cd_dst, cddata_type, name);
name = CustomData_get_layer_name(&cd_src, cddata_type, idx_src);
data_src = CustomData_get_layer_n(&cd_src, cddata_type, idx_src);
idx_dst = CustomData_get_named_layer(&cd_dst, cddata_type, name);
if (idx_dst == -1) {
if (use_create) {
CustomData_add_layer_named(
cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst, name);
idx_dst = CustomData_get_named_layer(cd_dst, cddata_type, name);
&cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst, name);
idx_dst = CustomData_get_named_layer(&cd_dst, cddata_type, name);
}
else {
/* If we are not allowed to create missing dst data layers,
@@ -650,7 +650,7 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(ListBase *r_map
data_dst_to_delete[idx_dst] = false;
}
if (r_map) {
data_dst = CustomData_get_layer_n_for_write(cd_dst, cddata_type, idx_dst, num_elem_dst);
data_dst = CustomData_get_layer_n_for_write(&cd_dst, cddata_type, idx_dst, num_elem_dst);
data_transfer_layersmapping_add_item_cd(r_map,
cddata_type,
mix_mode,
@@ -670,7 +670,7 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(ListBase *r_map
* from index shifting when deleting a layer. */
for (idx_dst = tot_dst; idx_dst--;) {
if (data_dst_to_delete[idx_dst]) {
CustomData_free_layer(cd_dst, cddata_type, idx_dst);
CustomData_free_layer(&cd_dst, cddata_type, idx_dst);
}
}
@@ -692,8 +692,8 @@ static bool data_transfer_layersmapping_cdlayers(ListBase *r_map,
const int num_elem_dst,
const bool use_create,
const bool use_delete,
const CustomData *cd_src,
CustomData *cd_dst,
const CustomData &cd_src,
CustomData &cd_dst,
const int fromlayers,
const int tolayers,
cd_datatransfer_interp interp,
@@ -702,21 +702,21 @@ static bool data_transfer_layersmapping_cdlayers(ListBase *r_map,
void *data_dst = nullptr;
if (CustomData_layertype_is_singleton(cddata_type)) {
const void *data_src = CustomData_get_layer(cd_src, cddata_type);
const void *data_src = CustomData_get_layer(&cd_src, cddata_type);
if (!data_src) {
if (use_delete) {
CustomData_free_layer(cd_dst, cddata_type, 0);
CustomData_free_layer(&cd_dst, cddata_type, 0);
}
return true;
}
data_dst = CustomData_get_layer_for_write(cd_dst, cddata_type, num_elem_dst);
data_dst = CustomData_get_layer_for_write(&cd_dst, cddata_type, num_elem_dst);
if (!data_dst) {
if (!use_create) {
return true;
}
data_dst = CustomData_add_layer(
cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst);
&cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst);
}
if (r_map) {
@@ -739,12 +739,12 @@ static bool data_transfer_layersmapping_cdlayers(ListBase *r_map,
idx_src = fromlayers;
}
else {
idx_src = CustomData_get_active_layer(cd_src, cddata_type);
idx_src = CustomData_get_active_layer(&cd_src, cddata_type);
if (idx_src == -1) {
return true;
}
}
const void *data_src = CustomData_get_layer_n(cd_src, cddata_type, idx_src);
const void *data_src = CustomData_get_layer_n(&cd_src, cddata_type, idx_src);
if (!data_src) {
return true;
}
@@ -752,23 +752,23 @@ static bool data_transfer_layersmapping_cdlayers(ListBase *r_map,
int idx_dst;
if (tolayers >= 0) { /* Real-layer index */
idx_dst = tolayers;
data_dst = CustomData_get_layer_n_for_write(cd_dst, cddata_type, idx_dst, num_elem_dst);
data_dst = CustomData_get_layer_n_for_write(&cd_dst, cddata_type, idx_dst, num_elem_dst);
}
else if (tolayers == DT_LAYERS_ACTIVE_DST) {
idx_dst = CustomData_get_active_layer(cd_dst, cddata_type);
idx_dst = CustomData_get_active_layer(&cd_dst, cddata_type);
if (idx_dst == -1) {
if (!use_create) {
return true;
}
data_dst = CustomData_add_layer(
cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst);
&cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst);
}
else {
data_dst = CustomData_get_layer_n_for_write(cd_dst, cddata_type, idx_dst, num_elem_dst);
data_dst = CustomData_get_layer_n_for_write(&cd_dst, cddata_type, idx_dst, num_elem_dst);
}
}
else if (tolayers == DT_LAYERS_INDEX_DST) {
int num = CustomData_number_of_layers(cd_dst, cddata_type);
int num = CustomData_number_of_layers(&cd_dst, cddata_type);
idx_dst = idx_src;
if (num <= idx_dst) {
if (!use_create) {
@@ -776,23 +776,24 @@ static bool data_transfer_layersmapping_cdlayers(ListBase *r_map,
}
/* Create as much data layers as necessary! */
for (; num <= idx_dst; num++) {
CustomData_add_layer(cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst);
CustomData_add_layer(
&cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst);
}
}
data_dst = CustomData_get_layer_n_for_write(cd_dst, cddata_type, idx_dst, num_elem_dst);
data_dst = CustomData_get_layer_n_for_write(&cd_dst, cddata_type, idx_dst, num_elem_dst);
}
else if (tolayers == DT_LAYERS_NAME_DST) {
const char *name = CustomData_get_layer_name(cd_src, cddata_type, idx_src);
idx_dst = CustomData_get_named_layer(cd_dst, cddata_type, name);
const char *name = CustomData_get_layer_name(&cd_src, cddata_type, idx_src);
idx_dst = CustomData_get_named_layer(&cd_dst, cddata_type, name);
if (idx_dst == -1) {
if (!use_create) {
return true;
}
CustomData_add_layer_named(
cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst, name);
idx_dst = CustomData_get_named_layer(cd_dst, cddata_type, name);
&cd_dst, eCustomDataType(cddata_type), CD_SET_DEFAULT, num_elem_dst, name);
idx_dst = CustomData_get_named_layer(&cd_dst, cddata_type, name);
}
data_dst = CustomData_get_layer_n_for_write(cd_dst, cddata_type, idx_dst, num_elem_dst);
data_dst = CustomData_get_layer_n_for_write(&cd_dst, cddata_type, idx_dst, num_elem_dst);
}
else {
return false;
@@ -815,7 +816,7 @@ static bool data_transfer_layersmapping_cdlayers(ListBase *r_map,
}
}
else if (fromlayers == DT_LAYERS_ALL_SRC) {
int num_src = CustomData_number_of_layers(cd_src, eCustomDataType(cddata_type));
int num_src = CustomData_number_of_layers(&cd_src, eCustomDataType(cddata_type));
bool *use_layers_src = num_src ? MEM_malloc_arrayN<bool>(size_t(num_src), __func__) : nullptr;
bool ret;
@@ -869,18 +870,13 @@ static bool data_transfer_layersmapping_generate(ListBase *r_map,
SpaceTransform *space_transform)
{
using namespace blender;
const CustomData *cd_src;
CustomData *cd_dst;
cd_datatransfer_interp interp = nullptr;
void *interp_data = nullptr;
if (elem_type == ME_VERT) {
if (!(cddata_type & CD_FAKE)) {
cd_src = &me_src->vert_data;
cd_dst = &me_dst->vert_data;
if (!data_transfer_layersmapping_cdlayers(r_map,
if (!data_transfer_layersmapping_cdlayers(r_map,
eCustomDataType(cddata_type),
mix_mode,
mix_factor,
@@ -888,8 +884,8 @@ static bool data_transfer_layersmapping_generate(ListBase *r_map,
num_elem_dst,
use_create,
use_delete,
cd_src,
cd_dst,
me_src->vert_data,
me_dst->vert_data,
fromlayers,
tolayers,
interp,
@@ -901,12 +897,7 @@ static bool data_transfer_layersmapping_generate(ListBase *r_map,
return true;
}
if (cddata_type == CD_FAKE_MDEFORMVERT) {
bool ret;
cd_src = &me_src->vert_data;
cd_dst = &me_dst->vert_data;
ret = data_transfer_layersmapping_vgroups(r_map,
return data_transfer_layersmapping_vgroups(r_map,
mix_mode,
mix_factor,
mix_weights,
@@ -915,13 +906,12 @@ static bool data_transfer_layersmapping_generate(ListBase *r_map,
use_delete,
ob_src,
ob_dst,
cd_src,
cd_dst,
me_src->vert_data,
me_dst->vert_data,
me_dst != ob_dst->data,
fromlayers,
tolayers);
return ret;
}
}
if (cddata_type == CD_FAKE_SHAPEKEY) {
/* TODO: leaving shape-keys aside for now, quite specific case,
* since we can't access them from mesh vertices :/ */
@@ -951,10 +941,7 @@ static bool data_transfer_layersmapping_generate(ListBase *r_map,
}
else if (elem_type == ME_EDGE) {
if (!(cddata_type & CD_FAKE)) { /* Unused for edges, currently... */
cd_src = &me_src->edge_data;
cd_dst = &me_dst->edge_data;
if (!data_transfer_layersmapping_cdlayers(r_map,
if (!data_transfer_layersmapping_cdlayers(r_map,
eCustomDataType(cddata_type),
mix_mode,
mix_factor,
@@ -962,8 +949,8 @@ static bool data_transfer_layersmapping_generate(ListBase *r_map,
num_elem_dst,
use_create,
use_delete,
cd_src,
cd_dst,
me_src->edge_data,
me_dst->edge_data,
fromlayers,
tolayers,
interp,
@@ -1084,10 +1071,7 @@ static bool data_transfer_layersmapping_generate(ListBase *r_map,
}
if (!(cddata_type & CD_FAKE)) {
cd_src = &me_src->corner_data;
cd_dst = &me_dst->corner_data;
if (!data_transfer_layersmapping_cdlayers(r_map,
if (!data_transfer_layersmapping_cdlayers(r_map,
eCustomDataType(cddata_type),
mix_mode,
mix_factor,
@@ -1095,8 +1079,8 @@ static bool data_transfer_layersmapping_generate(ListBase *r_map,
num_elem_dst,
use_create,
use_delete,
cd_src,
cd_dst,
me_src->corner_data,
me_dst->corner_data,
fromlayers,
tolayers,
interp,
@@ -1116,10 +1100,7 @@ static bool data_transfer_layersmapping_generate(ListBase *r_map,
}
if (!(cddata_type & CD_FAKE)) {
cd_src = &me_src->face_data;
cd_dst = &me_dst->face_data;
if (!data_transfer_layersmapping_cdlayers(r_map,
if (!data_transfer_layersmapping_cdlayers(r_map,
eCustomDataType(cddata_type),
mix_mode,
mix_factor,
@@ -1127,8 +1108,8 @@ static bool data_transfer_layersmapping_generate(ListBase *r_map,
num_elem_dst,
use_create,
use_delete,
cd_src,
cd_dst,
me_src->face_data,
me_dst->face_data,
fromlayers,
tolayers,
interp,

View File

@@ -72,8 +72,8 @@ bool data_transfer_layersmapping_vgroups(ListBase *r_map,
bool use_delete,
Object *ob_src,
Object *ob_dst,
const CustomData *cd_src,
CustomData *cd_dst,
const CustomData &cd_src,
CustomData &cd_dst,
bool use_dupref_dst,
int fromlayers,
int tolayers);

View File

@@ -1269,8 +1269,8 @@ static bool data_transfer_layersmapping_vgroups_multisrc_to_dst(ListBase *r_map,
Object *ob_dst,
const MDeformVert *data_src,
MDeformVert *data_dst,
const CustomData * /*cd_src*/,
CustomData *cd_dst,
const CustomData & /*cd_src*/,
CustomData &cd_dst,
const bool /*use_dupref_dst*/,
const int tolayers,
const bool *use_layers_src,
@@ -1318,7 +1318,7 @@ static bool data_transfer_layersmapping_vgroups_multisrc_to_dst(ListBase *r_map,
* Again, use_create is not relevant in this case */
if (!data_dst) {
data_dst = static_cast<MDeformVert *>(
CustomData_add_layer(cd_dst, CD_MDEFORMVERT, CD_SET_DEFAULT, num_elem_dst));
CustomData_add_layer(&cd_dst, CD_MDEFORMVERT, CD_SET_DEFAULT, num_elem_dst));
}
while (idx_src--) {
@@ -1382,7 +1382,7 @@ static bool data_transfer_layersmapping_vgroups_multisrc_to_dst(ListBase *r_map,
* use_create is not relevant in this case */
if (!data_dst) {
data_dst = static_cast<MDeformVert *>(
CustomData_add_layer(cd_dst, CD_MDEFORMVERT, CD_SET_DEFAULT, num_elem_dst));
CustomData_add_layer(&cd_dst, CD_MDEFORMVERT, CD_SET_DEFAULT, num_elem_dst));
}
data_transfer_layersmapping_add_item(r_map,
@@ -1420,8 +1420,8 @@ bool data_transfer_layersmapping_vgroups(ListBase *r_map,
const bool use_delete,
Object *ob_src,
Object *ob_dst,
const CustomData *cd_src,
CustomData *cd_dst,
const CustomData &cd_src,
CustomData &cd_dst,
const bool use_dupref_dst,
const int fromlayers,
const int tolayers)
@@ -1449,14 +1449,14 @@ bool data_transfer_layersmapping_vgroups(ListBase *r_map,
}
const MDeformVert *data_src = static_cast<const MDeformVert *>(
CustomData_get_layer(cd_src, CD_MDEFORMVERT));
CustomData_get_layer(&cd_src, CD_MDEFORMVERT));
MDeformVert *data_dst = static_cast<MDeformVert *>(
CustomData_get_layer_for_write(cd_dst, CD_MDEFORMVERT, num_elem_dst));
CustomData_get_layer_for_write(&cd_dst, CD_MDEFORMVERT, num_elem_dst));
if (data_dst && use_dupref_dst && r_map) {
/* If dest is an evaluated mesh, we do not want to overwrite cdlayers of org mesh! */
data_dst = static_cast<MDeformVert *>(
CustomData_get_layer_for_write(cd_dst, CD_MDEFORMVERT, num_elem_dst));
CustomData_get_layer_for_write(&cd_dst, CD_MDEFORMVERT, num_elem_dst));
}
if (fromlayers == DT_LAYERS_ACTIVE_SRC || fromlayers >= 0) {
@@ -1527,7 +1527,7 @@ bool data_transfer_layersmapping_vgroups(ListBase *r_map,
* use_create is not relevant in this case */
if (!data_dst) {
data_dst = static_cast<MDeformVert *>(
CustomData_add_layer(cd_dst, CD_MDEFORMVERT, CD_SET_DEFAULT, num_elem_dst));
CustomData_add_layer(&cd_dst, CD_MDEFORMVERT, CD_SET_DEFAULT, num_elem_dst));
}
data_transfer_layersmapping_add_item(r_map,