Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenlib/intern/math_color_blend_inline.c
| Show First 20 Lines • Show All 698 Lines • ▼ Show 20 Lines | MINLINE void blend_color_darken_float(float dst[4], const float src1[4], const float src2[4]) | ||||
| } | } | ||||
| } | } | ||||
| MINLINE void blend_color_erase_alpha_float(float dst[4], const float src1[4], const float src2[4]) | MINLINE void blend_color_erase_alpha_float(float dst[4], const float src1[4], const float src2[4]) | ||||
| { | { | ||||
| if (src2[3] != 0.0f && src1[3] > 0.0f) { | if (src2[3] != 0.0f && src1[3] > 0.0f) { | ||||
| /* subtract alpha and remap RGB channels to match */ | /* subtract alpha and remap RGB channels to match */ | ||||
| float alpha = max_ff(src1[3] - src2[3], 0.0f); | float alpha = max_ff(src1[3] - src2[3], 0.0f); | ||||
| float map_alpha; | |||||
| if (alpha <= EPS_ALPHA) { | if (alpha <= EPS_ALPHA) { | ||||
| alpha = 0.0f; | alpha = 0.0f; | ||||
| } | } | ||||
| map_alpha = alpha / src1[3]; | dst[0] = src1[0]; | ||||
| dst[1] = src1[1]; | |||||
| dst[0] = src1[0] * map_alpha; | dst[2] = src1[2]; | ||||
| dst[1] = src1[1] * map_alpha; | |||||
| dst[2] = src1[2] * map_alpha; | |||||
| dst[3] = alpha; | dst[3] = alpha; | ||||
| } | } | ||||
| else { | else { | ||||
| /* no op */ | /* no op */ | ||||
| copy_v4_v4(dst, src1); | copy_v4_v4(dst, src1); | ||||
| } | } | ||||
| } | } | ||||
| MINLINE void blend_color_add_alpha_float(float dst[4], const float src1[4], const float src2[4]) | MINLINE void blend_color_add_alpha_float(float dst[4], const float src1[4], const float src2[4]) | ||||
| { | { | ||||
| if (src2[3] != 0.0f && src1[3] < 1.0f) { | if (src2[3] != 0.0f && src1[3] < 1.0f) { | ||||
| /* add alpha and remap RGB channels to match */ | /* add alpha and remap RGB channels to match */ | ||||
| float alpha = min_ff(src1[3] + src2[3], 1.0f); | float alpha = min_ff(src1[3] + src2[3], 1.0f); | ||||
| float map_alpha; | |||||
| if (alpha >= 1.0f - EPS_ALPHA) { | if (alpha >= 1.0f - EPS_ALPHA) { | ||||
| alpha = 1.0f; | alpha = 1.0f; | ||||
| } | } | ||||
| map_alpha = (src1[3] > 0.0f) ? alpha / src1[3] : 1.0f; | dst[0] = src1[0]; | ||||
| dst[1] = src1[1]; | |||||
| dst[0] = src1[0] * map_alpha; | dst[2] = src1[2]; | ||||
| dst[1] = src1[1] * map_alpha; | |||||
| dst[2] = src1[2] * map_alpha; | |||||
| dst[3] = alpha; | dst[3] = alpha; | ||||
| } | } | ||||
| else { | else { | ||||
| /* no op */ | /* no op */ | ||||
| copy_v4_v4(dst, src1); | copy_v4_v4(dst, src1); | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 381 Lines • Show Last 20 Lines | |||||