void IMB_blend_color_float(float dst[4], float src1[4], float src2[4], IMB_BlendMode mode) { switch (mode) { case IMB_BLEND_MIX: blend_color_mix_float(dst, src1, src2); break; case IMB_BLEND_ADD: blend_color_add_float(dst, src1, src2); break; case IMB_BLEND_SUB: blend_color_sub_float(dst, src1, src2); break; case IMB_BLEND_MUL: blend_color_mul_float(dst, src1, src2); break; case IMB_BLEND_LIGHTEN: blend_color_lighten_float(dst, src1, src2); break; case IMB_BLEND_DARKEN: blend_color_darken_float(dst, src1, src2); break; case IMB_BLEND_ERASE_ALPHA: blend_color_erase_alpha_float(dst, src1, src2); break; case IMB_BLEND_ADD_ALPHA: blend_color_add_alpha_float(dst, src1, src2); break; default: dst[0] = src1[0]; dst[1] = src1[1]; dst[2] = src1[2]; dst[3] = src1[3]; break; } }
void IMB_blend_color_float(float dst[4], float src1[4], float src2[4], IMB_BlendMode mode) { switch (mode) { case IMB_BLEND_MIX: blend_color_mix_float(dst, src1, src2); break; case IMB_BLEND_ADD: blend_color_add_float(dst, src1, src2); break; case IMB_BLEND_SUB: blend_color_sub_float(dst, src1, src2); break; case IMB_BLEND_MUL: blend_color_mul_float(dst, src1, src2); break; case IMB_BLEND_LIGHTEN: blend_color_lighten_float(dst, src1, src2); break; case IMB_BLEND_DARKEN: blend_color_darken_float(dst, src1, src2); break; case IMB_BLEND_ERASE_ALPHA: blend_color_erase_alpha_float(dst, src1, src2); break; case IMB_BLEND_ADD_ALPHA: blend_color_add_alpha_float(dst, src1, src2); break; case IMB_BLEND_OVERLAY: blend_color_overlay_float(dst, src1, src2); break; case IMB_BLEND_HARDLIGHT: blend_color_hardlight_float(dst, src1, src2); break; case IMB_BLEND_COLORBURN: blend_color_burn_float(dst, src1, src2); break; case IMB_BLEND_LINEARBURN: blend_color_linearburn_float(dst, src1, src2); break; case IMB_BLEND_COLORDODGE: blend_color_dodge_float(dst, src1, src2); break; case IMB_BLEND_SCREEN: blend_color_screen_float(dst, src1, src2); break; case IMB_BLEND_SOFTLIGHT: blend_color_softlight_float(dst, src1, src2); break; case IMB_BLEND_PINLIGHT: blend_color_pinlight_float(dst, src1, src2); break; case IMB_BLEND_LINEARLIGHT: blend_color_linearlight_float(dst, src1, src2); break; case IMB_BLEND_VIVIDLIGHT: blend_color_vividlight_float(dst, src1, src2); break; case IMB_BLEND_DIFFERENCE: blend_color_difference_float(dst, src1, src2); break; case IMB_BLEND_EXCLUSION: blend_color_exclusion_float(dst, src1, src2); break; case IMB_BLEND_COLOR: blend_color_color_float(dst, src1, src2); break; case IMB_BLEND_HUE: blend_color_hue_float(dst, src1, src2); break; case IMB_BLEND_SATURATION: blend_color_saturation_float(dst, src1, src2); break; case IMB_BLEND_LUMINOSITY: blend_color_luminosity_float(dst, src1, src2); break; default: dst[0] = src1[0]; dst[1] = src1[1]; dst[2] = src1[2]; dst[3] = src1[3]; break; } }
void IMB_blend_color_float(float *dst, float *src1, float *src2, float fac, IMB_BlendMode mode) { if (fac==0) { dst[0]= src1[0]; dst[1]= src1[1]; dst[2]= src1[2]; dst[3]= src1[3]; return; } switch (mode) { case IMB_BLEND_MIX: blend_color_mix_float(dst, src1, src2, fac); break; case IMB_BLEND_ADD: blend_color_add_float(dst, src1, src2, fac); break; case IMB_BLEND_SUB: blend_color_sub_float(dst, src1, src2, fac); break; case IMB_BLEND_MUL: blend_color_mul_float(dst, src1, src2, fac); break; case IMB_BLEND_LIGHTEN: blend_color_lighten_float(dst, src1, src2, fac); break; case IMB_BLEND_DARKEN: blend_color_darken_float(dst, src1, src2, fac); break; default: dst[0]= src1[0]; dst[1]= src1[1]; dst[2]= src1[2]; } if (mode == IMB_BLEND_ERASE_ALPHA) { dst[3]= (src1[3] - fac*src2[3]); if (dst[3] < 0.0f) dst[3] = 0.0f; } else { /* this does ADD_ALPHA also */ dst[3]= (src1[3] + fac*src2[3]); if (dst[3] > 1.0f) dst[3] = 1.0f; } }