Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/intern/data_transfer.c12
-rw-r--r--source/blender/blenkernel/intern/mesh_remap.c9
-rw-r--r--source/blender/modifiers/intern/MOD_datatransfer.c2
3 files changed, 11 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/data_transfer.c b/source/blender/blenkernel/intern/data_transfer.c
index 4c4d57ddbac..cf6a5a7233a 100644
--- a/source/blender/blenkernel/intern/data_transfer.c
+++ b/source/blender/blenkernel/intern/data_transfer.c
@@ -257,7 +257,7 @@ int BKE_object_data_transfer_dttype_to_srcdst_index(const int dtdata_type)
static void data_transfer_dtdata_type_preprocess(
Mesh *me_src, Mesh *me_dst,
- const int dtdata_type, const bool dirty_nors_dst, const bool is_modifier)
+ const int dtdata_type, const bool dirty_nors_dst)
{
if (dtdata_type == DT_TYPE_LNOR) {
/* Compute custom normals into regular loop normals, which will be used for the transfer. */
@@ -275,9 +275,9 @@ static void data_transfer_dtdata_type_preprocess(
const bool use_split_nors_dst = (me_dst->flag & ME_AUTOSMOOTH) != 0;
const float split_angle_dst = me_dst->smoothresh;
- if (!is_modifier) {
- BKE_mesh_calc_normals_split(me_src);
- }
+ /* This should be ensured by cddata_masks we pass to code generating/giving us me_src now. */
+ BLI_assert(CustomData_get_layer(&me_src->ldata, CD_NORMAL) != NULL);
+ BLI_assert(CustomData_get_layer(&me_src->pdata, CD_NORMAL) != NULL);
float (*poly_nors_dst)[3];
float (*loop_nors_dst)[3];
@@ -1121,6 +1121,8 @@ bool BKE_object_data_transfer_ex(
/* Get source evaluated mesh.*/
BKE_object_data_transfer_dttypes_to_cdmask(data_types, &me_src_mask);
+ BKE_mesh_remap_calc_source_cddata_masks_from_map_modes(
+ map_vert_mode, map_edge_mode, map_loop_mode, map_poly_mode, &me_src_mask);
if (is_modifier) {
me_src = BKE_modifier_get_evaluated_mesh_from_evaluated_object(ob_src, false);
@@ -1155,7 +1157,7 @@ bool BKE_object_data_transfer_ex(
continue;
}
- data_transfer_dtdata_type_preprocess(me_src, me_dst, dtdata_type, dirty_nors_dst, is_modifier);
+ data_transfer_dtdata_type_preprocess(me_src, me_dst, dtdata_type, dirty_nors_dst);
cddata_type = BKE_object_data_transfer_dttype_to_cdtype(dtdata_type);
diff --git a/source/blender/blenkernel/intern/mesh_remap.c b/source/blender/blenkernel/intern/mesh_remap.c
index 55e8a96fa16..7219332774a 100644
--- a/source/blender/blenkernel/intern/mesh_remap.c
+++ b/source/blender/blenkernel/intern/mesh_remap.c
@@ -1251,18 +1251,13 @@ void BKE_mesh_remap_calc_loops_from_mesh(
}
}
if (need_pnors_src || need_lnors_src) {
- /* Simpler for now, calcNormals never stores pnors :( */
- if (!CustomData_has_layer(&me_src->pdata, CD_NORMAL)) {
- CustomData_add_layer(&me_src->pdata, CD_NORMAL, CD_CALLOC, NULL, me_src->totpoly);
- CustomData_set_layer_flag(&me_src->pdata, CD_NORMAL, CD_FLAG_TEMPORARY);
- }
- BKE_mesh_calc_normals_split(me_src);
-
if (need_pnors_src) {
poly_nors_src = CustomData_get_layer(&me_src->pdata, CD_NORMAL);
+ BLI_assert(poly_nors_src != NULL);
}
if (need_lnors_src) {
loop_nors_src = CustomData_get_layer(&me_src->ldata, CD_NORMAL);
+ BLI_assert(loop_nors_src != NULL);
}
}
}
diff --git a/source/blender/modifiers/intern/MOD_datatransfer.c b/source/blender/modifiers/intern/MOD_datatransfer.c
index 3e461476eac..1371dd947bb 100644
--- a/source/blender/modifiers/intern/MOD_datatransfer.c
+++ b/source/blender/modifiers/intern/MOD_datatransfer.c
@@ -85,6 +85,8 @@ static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_Me
}
BKE_object_data_transfer_dttypes_to_cdmask(dtmd->data_types, r_cddata_masks);
+ BKE_mesh_remap_calc_source_cddata_masks_from_map_modes(
+ dtmd->vmap_mode, dtmd->emap_mode, dtmd->lmap_mode, dtmd->pmap_mode, r_cddata_masks);
}
static bool dependsOnNormals(ModifierData *md)