[Bf-blender-cvs] [934ff1a] mesh-transfer-data: Fix stupid typo bug, and vcol color mixing.
Bastien Montagne
noreply at git.blender.org
Sun Nov 9 18:45:19 CET 2014
Commit: 934ff1a475536c84c2096f3790545704f836ed53
Author: Bastien Montagne
Date: Sun Nov 9 17:34:46 2014 +0100
Branches: mesh-transfer-data
https://developer.blender.org/rB934ff1a475536c84c2096f3790545704f836ed53
Fix stupid typo bug, and vcol color mixing.
===================================================================
M source/blender/blenkernel/intern/customdata.c
M source/blender/blenkernel/intern/data_transfer.c
===================================================================
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index f066c1d..bae757b 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -644,22 +644,29 @@ static void layerCopyValue_mloopcol(const void *source, void *dest, const int mi
m2->b = m1->b;
}
else { /* Modes that support 'real' mix factor. */
+ unsigned char src[4] = {m1->r, m1->g, m1->b, m1->a};
+ unsigned char dst[4] = {m2->r, m2->g, m2->b, m2->a};
+
if (mixmode == CDT_MIX_MIX) {
- blend_color_mix_byte(tmp_col, (unsigned char *)&m2->r, (unsigned char *)&m1->r);
+ blend_color_mix_byte(tmp_col, dst, src);
}
else if (mixmode == CDT_MIX_ADD) {
- blend_color_add_byte(tmp_col, (unsigned char *)&m2->r, (unsigned char *)&m1->r);
+ blend_color_add_byte(tmp_col, dst, src);
}
else if (mixmode == CDT_MIX_SUB) {
- blend_color_sub_byte(tmp_col, (unsigned char *)&m2->r, (unsigned char *)&m1->r);
+ blend_color_sub_byte(tmp_col, dst, src);
}
else if (mixmode == CDT_MIX_MUL) {
- blend_color_mul_byte(tmp_col, (unsigned char *)&m2->r, (unsigned char *)&m1->r);
+ blend_color_mul_byte(tmp_col, dst, src);
}
else {
- memcpy(tmp_col, (unsigned char *)&m1->r, sizeof(tmp_col));
+ memcpy(tmp_col, src, sizeof(tmp_col));
}
- blend_color_interpolate_byte((unsigned char *)&m2->r, tmp_col, (unsigned char *)&m2->r, mixfactor);
+ blend_color_interpolate_byte(dst, dst, tmp_col, mixfactor);
+
+ m2->r = (char)dst[0];
+ m2->g = (char)dst[1];
+ m2->b = (char)dst[2];
}
m2->a = m1->a;
}
diff --git a/source/blender/blenkernel/intern/data_transfer.c b/source/blender/blenkernel/intern/data_transfer.c
index 0a156ef..5b3d806 100644
--- a/source/blender/blenkernel/intern/data_transfer.c
+++ b/source/blender/blenkernel/intern/data_transfer.c
@@ -352,7 +352,7 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(
}
data_src = CustomData_get_layer_n(cd_src, cddata_type, idx_src);
/* If dest is a derivedmesh, we do not want to overwrite cdlayers of org mesh! */
- data_dst = dup_dst ? CustomData_duplicate_referenced_layer_n(cd_dst, cddata_type, num_create, idx_src) :
+ data_dst = dup_dst ? CustomData_duplicate_referenced_layer_n(cd_dst, cddata_type, idx_src, num_create) :
CustomData_get_layer_n(cd_dst, cddata_type, idx_src);
data_transfer_layersmapping_add_item_cd(r_map, cddata_type, mix_mode, mix_factor, mix_weights, data_src, data_dst);
}
@@ -367,6 +367,8 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(
}
name = CustomData_get_layer_name(cd_src, cddata_type, idx_src);
+ data_src = CustomData_get_layer_n(cd_src, cddata_type, idx_src);
+
if ((idx_dst = CustomData_get_named_layer(cd_dst, cddata_type, name)) == -1) {
if (!num_create) {
BLI_freelistN(r_map);
@@ -375,9 +377,8 @@ static bool data_transfer_layersmapping_cdlayers_multisrc_to_dst(
CustomData_add_layer_named(cd_dst, cddata_type, CD_CALLOC, NULL, num_create, name);
idx_dst = CustomData_get_named_layer(cd_dst, cddata_type, name);
}
- data_src = CustomData_get_layer_n(cd_src, cddata_type, idx_src);
/* If dest is a derivedmesh, we do not want to overwrite cdlayers of org mesh! */
- data_dst = dup_dst ? CustomData_duplicate_referenced_layer_n(cd_dst, cddata_type, num_create, idx_dst) :
+ data_dst = dup_dst ? CustomData_duplicate_referenced_layer_n(cd_dst, cddata_type, idx_dst, num_create) :
CustomData_get_layer_n(cd_dst, cddata_type, idx_dst);
data_transfer_layersmapping_add_item_cd(r_map, cddata_type, mix_mode, mix_factor, mix_weights, data_src, data_dst);
}
@@ -441,7 +442,7 @@ static bool data_transfer_layersmapping_cdlayers(
else {
/* If dest is a derivedmesh, we do not want to overwrite cdlayers of org mesh! */
if (dup_dst) {
- data_dst = CustomData_duplicate_referenced_layer_n(cd_dst, cddata_type, num_create, idx_dst);
+ data_dst = CustomData_duplicate_referenced_layer_n(cd_dst, cddata_type, idx_dst, num_create);
}
else {
data_dst = CustomData_get_layer_n(cd_dst, cddata_type, idx_dst);
@@ -462,7 +463,7 @@ static bool data_transfer_layersmapping_cdlayers(
}
/* If dest is a derivedmesh, we do not want to overwrite cdlayers of org mesh! */
if (dup_dst) {
- data_dst = CustomData_duplicate_referenced_layer_n(cd_dst, cddata_type, num_create, idx_dst);
+ data_dst = CustomData_duplicate_referenced_layer_n(cd_dst, cddata_type, idx_dst, num_create);
}
else {
data_dst = CustomData_get_layer_n(cd_dst, cddata_type, idx_dst);
@@ -479,7 +480,7 @@ static bool data_transfer_layersmapping_cdlayers(
}
/* If dest is a derivedmesh, we do not want to overwrite cdlayers of org mesh! */
if (dup_dst) {
- data_dst = CustomData_duplicate_referenced_layer_n(cd_dst, cddata_type, num_create, idx_dst);
+ data_dst = CustomData_duplicate_referenced_layer_n(cd_dst, cddata_type, idx_dst, num_create);
}
else {
data_dst = CustomData_get_layer_n(cd_dst, cddata_type, idx_dst);
More information about the Bf-blender-cvs
mailing list