source = 0.5, 0.5, 0.5, 0.5
dest = 0.25, 0.25, 0.25, 0.25
bm_zero = 0, 0, 0, 0 regardless of the colors
bm_inv_src_color = (0.5, 0.5, 0.5, 0.5)
add those together, you get 0.5 all around. 0.5 - 0.25 is not 0.5. Maybe my logic is wrong or I'm missing something.
EDIT********************************
I was missing something, but it still isn't adding up.
Source 0.25, 0.25, 0.25, 0.25
Dest 0.75, 0.75, 0.75, 0.75
Should result in 0.5, 0.5, 0.5, 0.5
bm_zero = 0, 0, 0, 0
bm_inv_src_color = 0.75, 0.75, 0.75, 0.75
color1 = 0*0.25, 0*0.25, 0*0.25, 0*0.25 = 0, 0, 0, 0
color2 = 0.75 * 0.75, 0.75 * 0.75, 0.75 * 0.75, 0.75 * 0.75 = 0.5625, 0.5625, 0.5625, 0.5625
color1 + color2 = the same as color2 since color1 is 0.
0.5626 != 0.5.
Source 0.33, 0.33, 0.33, 1
Destination 0.75, 0.75, 0.75, 1
Should give 0.42, 0.42, 0.42, 0
bm_zero = 0, 0, 0, 0
bm_inv_src_color = 0.67, 0.67, 0.67, 0
color1 = 0*0.33, 0*0.33, 0*0.33, 0*1 = 0, 0, 0, 0
color2 = 0.75 * 0.67, 0.75 * 0.67, 0.75 * 0.67, 1 * 0 = 0.5025, 0.5025, 0.5025, 0
color1 + color2 = color2(color1 = 0 anyway), but 0.5025 != 0.42 that should be the result.