Fix T44627, black spots with lock alpha in projection paint:

Painting would revert alpha even on unpainted pixels, where values would
contain garbage.
This commit is contained in:
Antony Riakiotakis 2015-05-07 14:49:40 +02:00
parent e39ec27bba
commit e6a7fdd309

@ -4837,18 +4837,18 @@ static void *do_projectpaint_thread(void *ph_v)
else do_projectpaint_draw(ps, projPixel, texrgb, mask, ps->dither, projPixel->x_px, projPixel->y_px);
break;
}
}
if (lock_alpha) {
if (is_floatbuf) {
/* slightly more involved case since floats are in premultiplied space we need
* to make sure alpha is consistent, see T44627 */
float rgb_straight[4];
premul_to_straight_v4_v4(rgb_straight, projPixel->pixel.f_pt);
rgb_straight[3] = projPixel->origColor.f_pt[3];
straight_to_premul_v4_v4(projPixel->pixel.f_pt, rgb_straight);
if (lock_alpha) {
if (is_floatbuf) {
/* slightly more involved case since floats are in premultiplied space we need
* to make sure alpha is consistent, see T44627 */
float rgb_straight[4];
premul_to_straight_v4_v4(rgb_straight, projPixel->pixel.f_pt);
rgb_straight[3] = projPixel->origColor.f_pt[3];
straight_to_premul_v4_v4(projPixel->pixel.f_pt, rgb_straight);
}
else projPixel->pixel.ch_pt[3] = projPixel->origColor.ch_pt[3];
}
else projPixel->pixel.ch_pt[3] = projPixel->origColor.ch_pt[3];
}
/* done painting */