Merge branch 'master' into blender2.8
[blender.git] / source / blender / editors / sculpt_paint / paint_image_2d.c
index eb6eebf3c548a8949508df77c06d6c36ffb8d83e..30830e4e7bc21a3e903b569c6eede5d3a6fb3a22 100644 (file)
@@ -798,6 +798,7 @@ static void paint_2d_ibuf_rgb_set(ImBuf *ibuf, int x, int y, const bool is_torus
                float map_alpha = (rgb[3] == 0.0f) ? rrgbf[3] : rrgbf[3] / rgb[3];
 
                mul_v3_v3fl(rrgbf, rgb, map_alpha);
+               rrgbf[3] = rgb[3];
        }
        else {
                unsigned char straight[4];
@@ -807,6 +808,7 @@ static void paint_2d_ibuf_rgb_set(ImBuf *ibuf, int x, int y, const bool is_torus
                rrgb[0] = straight[0];
                rrgb[1] = straight[1];
                rrgb[2] = straight[2];
+               rrgb[3] = straight[3];
        }
 }
 
@@ -996,7 +998,7 @@ static void paint_2d_lift_smear(ImBuf *ibuf, ImBuf *ibufb, int *pos, short tile)
                IMB_rectblend(ibufb, ibufb, ibuf, NULL, NULL, NULL, 0, region[a].destx, region[a].desty,
                              region[a].destx, region[a].desty,
                              region[a].srcx, region[a].srcy,
-                             region[a].width, region[a].height, IMB_BLEND_COPY_RGB, false);
+                             region[a].width, region[a].height, IMB_BLEND_COPY, false);
 }
 
 static ImBuf *paint_2d_lift_clone(ImBuf *ibuf, ImBuf *ibufb, int *pos)
@@ -1097,6 +1099,7 @@ static int paint_2d_op(void *state, ImBuf *ibufb, unsigned short *curveb, unsign
        /* lift from canvas */
        if (s->tool == PAINT_TOOL_SOFTEN) {
                paint_2d_lift_soften(s, s->canvas, ibufb, bpos, tile);
+               blend = IMB_BLEND_INTERPOLATE;
        }
        else if (s->tool == PAINT_TOOL_SMEAR) {
                if (lastpos[0] == pos[0] && lastpos[1] == pos[1])
@@ -1104,6 +1107,7 @@ static int paint_2d_op(void *state, ImBuf *ibufb, unsigned short *curveb, unsign
 
                paint_2d_convert_brushco(ibufb, lastpos, blastpos);
                paint_2d_lift_smear(s->canvas, ibufb, blastpos, tile);
+               blend = IMB_BLEND_INTERPOLATE;
        }
        else if (s->tool == PAINT_TOOL_CLONE && s->clonecanvas) {
                liftpos[0] = pos[0] - offset[0] * s->canvas->x;