[Bf-blender-cvs] [8469a69] mesh-transfer-data: WIP
Bastien Montagne
noreply at git.blender.org
Wed Oct 29 09:38:23 CET 2014
Commit: 8469a6985e1fcb8140ef0e8193caa062ee7c4568
Author: Bastien Montagne
Date: Mon Oct 27 17:10:42 2014 +0100
Branches: mesh-transfer-data
https://developer.blender.org/rB8469a6985e1fcb8140ef0e8193caa062ee7c4568
WIP
===================================================================
M source/blender/blenkernel/BKE_customdata.h
M source/blender/blenkernel/intern/customdata.c
M source/blender/editors/object/object_transfer_data.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h
index dbac8d1..ab13f82 100644
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@ -411,14 +411,11 @@ enum {
CDT_MIX_REPLACE_ALL = 0,
CDT_MIX_REPLACE_ABOVE_THRESHOLD = 1,
CDT_MIX_REPLACE_BELOW_THRESHOLD = 2,
-#if 0
CDT_MIX_MIX = 16,
CDT_MIX_ADD = 17,
CDT_MIX_SUB = 18,
CDT_MIX_MUL = 19,
- CDT_MIX_DIV = 20,
/* etc. etc. */
-#endif
};
typedef struct DataTransferLayerMapping {
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 93c794d..9ecf9fe 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -48,6 +48,7 @@
#include "BLI_string.h"
#include "BLI_path_util.h"
#include "BLI_math.h"
+#include "BLI_math_color_blend.h"
#include "BLI_mempool.h"
#include "BLF_translation.h"
@@ -664,26 +665,36 @@ static void layerCopyValue_mloopcol(const void *source, void *dest, const int mi
{
const MLoopCol *m1 = source;
MLoopCol *m2 = dest;
+ unsigned char tmp_col[4];
switch (mixmode) {
-#if 0
case CDT_MIX_MIX:
+ blend_color_interpolate_byte((unsigned char *)&m2->r, (unsigned char *)&m2->r,
+ (unsigned char *)&m1->r, mixfactor);
+ break;
case CDT_MIX_ADD:
+ blend_color_add_byte(tmp_col, (unsigned char *)&m2->r, (unsigned char *)&m1->r);
+ blend_color_interpolate_byte((unsigned char *)&m2->r, (unsigned char *)&m2->r, tmp_col, mixfactor);
+ break;
case CDT_MIX_SUB:
+ blend_color_sub_byte(tmp_col, (unsigned char *)&m2->r, (unsigned char *)&m1->r);
+ blend_color_interpolate_byte((unsigned char *)&m2->r, (unsigned char *)&m2->r, tmp_col, mixfactor);
+ break;
case CDT_MIX_MUL:
- case CDT_MIX_DIV:
+ blend_color_mul_byte(tmp_col, (unsigned char *)&m2->r, (unsigned char *)&m1->r);
+ blend_color_interpolate_byte((unsigned char *)&m2->r, (unsigned char *)&m2->r, tmp_col, mixfactor);
+ break;
/* etc. etc. */
-#endif
case CDT_MIX_REPLACE_ABOVE_THRESHOLD:
case CDT_MIX_REPLACE_BELOW_THRESHOLD:
{
/* TODO: Check for a real valid way to get 'factor' value of our dest color? */
const float f = ((float)m2->r + (float)m2->g + (float)m2->b) / 3.0f;
if (mixmode == CDT_MIX_REPLACE_ABOVE_THRESHOLD && f < mixfactor) {
- return;
+ break;
}
else if (mixmode == CDT_MIX_REPLACE_BELOW_THRESHOLD && f > mixfactor) {
- return;
+ break;
}
}
/* Fall through. */
@@ -3624,6 +3635,7 @@ static void customdata_data_transfer_interp_generic(const DataTransferLayerMappi
cd_copy copy_cd = NULL;
void *tmp_dst = data_dst;
+ bool free_tmp_dst = false;
if (data_type & CD_FAKE) {
data_size = laymap->data_size;
@@ -3638,6 +3650,7 @@ static void customdata_data_transfer_interp_generic(const DataTransferLayerMappi
if (laymap->mix_mode != CDT_MIX_REPLACE_ALL) {
tmp_dst = MEM_mallocN(data_size, __func__);
+ free_tmp_dst = true;
}
if (count > 1 && !interp_cd) {
@@ -3703,6 +3716,10 @@ static void customdata_data_transfer_interp_generic(const DataTransferLayerMappi
}
/* Else we can do nothing by default, needs custom interp func! */
}
+
+ if (free_tmp_dst) {
+ MEM_freeN(tmp_dst);
+ }
}
void CustomData_data_transfer(const Mesh2MeshMapping *m2mmap, const DataTransferLayerMapping *laymap)
diff --git a/source/blender/editors/object/object_transfer_data.c b/source/blender/editors/object/object_transfer_data.c
index 120844c..cd5b5cc 100644
--- a/source/blender/editors/object/object_transfer_data.c
+++ b/source/blender/editors/object/object_transfer_data.c
@@ -154,7 +154,6 @@ static EnumPropertyItem MDT_mix_mode_items[] = {
"Only replace dest elements where data is above given threshold (exact behavior depends on data type)"},
{CDT_MIX_REPLACE_BELOW_THRESHOLD, "BELOW_THRESHOLD", 0, "Below Threshold",
"Only replace dest elements where data is below given threshold (exact behavior depends on data type)"},
-#if 0
{CDT_MIX_MIX, "MIX", 0, "Mix",
"Mix source value into destination one, using given threshold as factor"},
{CDT_MIX_ADD, "ADD", 0, "Add",
@@ -163,10 +162,7 @@ static EnumPropertyItem MDT_mix_mode_items[] = {
"Subtract source value to destination one, using given threshold as factor"},
{CDT_MIX_MUL, "MUL", 0, "Multiply",
"Multiply source value to destination one, using given threshold as factor"},
- {CDT_MIX_DIV, "DIV", 0, "Divide",
- "Divide destination value by source one, using given threshold as factor"},
/* etc. etc. */
-#endif
{0, NULL, 0, NULL, NULL}
};
More information about the Bf-blender-cvs
mailing list