Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/customdata.c
| Show First 20 Lines • Show All 745 Lines • ▼ Show 20 Lines | if (ELEM(mixmode, CDT_MIX_REPLACE_ABOVE_THRESHOLD, CDT_MIX_REPLACE_BELOW_THRESHOLD)) { | ||||
| } | } | ||||
| if (mixmode == CDT_MIX_REPLACE_BELOW_THRESHOLD && f > mixfactor) { | if (mixmode == CDT_MIX_REPLACE_BELOW_THRESHOLD && f > mixfactor) { | ||||
| return; /* Do Nothing! */ | return; /* Do Nothing! */ | ||||
| } | } | ||||
| } | } | ||||
| m2->r = m1->r; | m2->r = m1->r; | ||||
| m2->g = m1->g; | m2->g = m1->g; | ||||
| m2->b = m1->b; | m2->b = m1->b; | ||||
| m2->a = m1->a; | |||||
| } | } | ||||
| else { /* Modes that support 'real' mix factor. */ | else { /* Modes that support 'real' mix factor. */ | ||||
| unsigned char src[4] = {m1->r, m1->g, m1->b, m1->a}; | unsigned char src[4] = {m1->r, m1->g, m1->b, m1->a}; | ||||
| unsigned char dst[4] = {m2->r, m2->g, m2->b, m2->a}; | unsigned char dst[4] = {m2->r, m2->g, m2->b, m2->a}; | ||||
| if (mixmode == CDT_MIX_MIX) { | if (mixmode == CDT_MIX_MIX) { | ||||
| blend_color_mix_byte(tmp_col, dst, src); | blend_color_mix_byte(tmp_col, dst, src); | ||||
| } | } | ||||
| else if (mixmode == CDT_MIX_ADD) { | else if (mixmode == CDT_MIX_ADD) { | ||||
| blend_color_add_byte(tmp_col, dst, src); | blend_color_add_byte(tmp_col, dst, src); | ||||
| } | } | ||||
| else if (mixmode == CDT_MIX_SUB) { | else if (mixmode == CDT_MIX_SUB) { | ||||
| blend_color_sub_byte(tmp_col, dst, src); | blend_color_sub_byte(tmp_col, dst, src); | ||||
| } | } | ||||
| else if (mixmode == CDT_MIX_MUL) { | else if (mixmode == CDT_MIX_MUL) { | ||||
| blend_color_mul_byte(tmp_col, dst, src); | blend_color_mul_byte(tmp_col, dst, src); | ||||
| } | } | ||||
| else { | else { | ||||
| memcpy(tmp_col, src, sizeof(tmp_col)); | memcpy(tmp_col, src, sizeof(tmp_col)); | ||||
| } | } | ||||
| blend_color_interpolate_byte(dst, dst, tmp_col, mixfactor); | blend_color_interpolate_byte(dst, dst, tmp_col, mixfactor); | ||||
| m2->r = (char)dst[0]; | m2->r = (char)dst[0]; | ||||
| m2->g = (char)dst[1]; | m2->g = (char)dst[1]; | ||||
| m2->b = (char)dst[2]; | m2->b = (char)dst[2]; | ||||
| m2->a = (char)dst[3]; | |||||
| } | } | ||||
| m2->a = m1->a; | |||||
| } | } | ||||
| static bool layerEqual_mloopcol(const void *data1, const void *data2) | static bool layerEqual_mloopcol(const void *data1, const void *data2) | ||||
| { | { | ||||
| const MLoopCol *m1 = data1, *m2 = data2; | const MLoopCol *m1 = data1, *m2 = data2; | ||||
| float r, g, b, a; | float r, g, b, a; | ||||
| r = m1->r - m2->r; | r = m1->r - m2->r; | ||||
| ▲ Show 20 Lines • Show All 487 Lines • ▼ Show 20 Lines | if (ELEM(mixmode, CDT_MIX_REPLACE_ABOVE_THRESHOLD, CDT_MIX_REPLACE_BELOW_THRESHOLD)) { | ||||
| const float f = (m2->color[0] + m2->color[1] + m2->color[2]) / 3.0f; | const float f = (m2->color[0] + m2->color[1] + m2->color[2]) / 3.0f; | ||||
| if (mixmode == CDT_MIX_REPLACE_ABOVE_THRESHOLD && f < mixfactor) { | if (mixmode == CDT_MIX_REPLACE_ABOVE_THRESHOLD && f < mixfactor) { | ||||
| return; /* Do Nothing! */ | return; /* Do Nothing! */ | ||||
| } | } | ||||
| if (mixmode == CDT_MIX_REPLACE_BELOW_THRESHOLD && f > mixfactor) { | if (mixmode == CDT_MIX_REPLACE_BELOW_THRESHOLD && f > mixfactor) { | ||||
| return; /* Do Nothing! */ | return; /* Do Nothing! */ | ||||
| } | } | ||||
| } | } | ||||
| copy_v3_v3(m2->color, m1->color); | copy_v4_v4(m2->color, m1->color); | ||||
| } | } | ||||
| else { /* Modes that support 'real' mix factor. */ | else { /* Modes that support 'real' mix factor. */ | ||||
| if (mixmode == CDT_MIX_MIX) { | if (mixmode == CDT_MIX_MIX) { | ||||
| blend_color_mix_float(tmp_col, m2->color, m1->color); | blend_color_mix_float(tmp_col, m2->color, m1->color); | ||||
| } | } | ||||
| else if (mixmode == CDT_MIX_ADD) { | else if (mixmode == CDT_MIX_ADD) { | ||||
| blend_color_add_float(tmp_col, m2->color, m1->color); | blend_color_add_float(tmp_col, m2->color, m1->color); | ||||
| } | } | ||||
| else if (mixmode == CDT_MIX_SUB) { | else if (mixmode == CDT_MIX_SUB) { | ||||
| blend_color_sub_float(tmp_col, m2->color, m1->color); | blend_color_sub_float(tmp_col, m2->color, m1->color); | ||||
| } | } | ||||
| else if (mixmode == CDT_MIX_MUL) { | else if (mixmode == CDT_MIX_MUL) { | ||||
| blend_color_mul_float(tmp_col, m2->color, m1->color); | blend_color_mul_float(tmp_col, m2->color, m1->color); | ||||
| } | } | ||||
| else { | else { | ||||
| memcpy(tmp_col, m1->color, sizeof(tmp_col)); | memcpy(tmp_col, m1->color, sizeof(tmp_col)); | ||||
| } | } | ||||
| blend_color_interpolate_float(m2->color, m2->color, tmp_col, mixfactor); | blend_color_interpolate_float(m2->color, m2->color, tmp_col, mixfactor); | ||||
| copy_v3_v3(m2->color, m1->color); | copy_v4_v4(m2->color, m1->color); | ||||
| } | } | ||||
| m2->color[3] = m1->color[3]; | |||||
| } | } | ||||
| static bool layerEqual_propcol(const void *data1, const void *data2) | static bool layerEqual_propcol(const void *data1, const void *data2) | ||||
| { | { | ||||
| const MPropCol *m1 = data1, *m2 = data2; | const MPropCol *m1 = data1, *m2 = data2; | ||||
| float tot = 0; | float tot = 0; | ||||
| for (int i = 0; i < 4; i++) { | for (int i = 0; i < 4; i++) { | ||||
| ▲ Show 20 Lines • Show All 3,876 Lines • Show Last 20 Lines | |||||