[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