Fix wrong alpha blending for datablock preview icons.
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Wed, 2 Jan 2019 19:10:48 +0000 (20:10 +0100)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Wed, 2 Jan 2019 19:11:10 +0000 (20:11 +0100)
source/blender/editors/interface/interface_icons.c
source/blender/editors/space_file/file_draw.c

index 24a12950badfbc49b4f21b202fe1d4121133ef50..a077a91a4b95dccbeae24af9a3c0d0b8ccacbc9e 100644 (file)
@@ -1602,9 +1602,8 @@ static void icon_draw_size(
                        /* no create icon on this level in code */
                        if (!pi->rect[size]) return;  /* something has gone wrong! */
 
-                       /* preview images use premul alpha ... */
-                       GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
-
+                       /* Preview images use premultiplied alpha. */
+                       GPU_blend_set_func_separate(GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
                        icon_draw_rect(x, y, w, h, aspect, pi->w[size], pi->h[size], pi->rect[size], alpha, rgb, desaturate);
                        GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
                }
index 2ae432fbc4e7958106f865a9598e646e97f21c18..08dafe0cb881df882fb64865f89949e67223ce60 100644 (file)
@@ -378,8 +378,6 @@ static void file_draw_preview(
        xco = sx + (int)dx;
        yco = sy - layout->prv_h + (int)dy;
 
-       GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
-
        /* shadow */
        if (use_dropshadow) {
                UI_draw_box_shadow(220, (float)xco, (float)yco, (float)(xco + ex), (float)(yco + ey));
@@ -392,10 +390,15 @@ static void file_draw_preview(
                UI_GetThemeColor4fv(TH_TEXT, col);
        }
 
+       /* Preview images use premultiplied alpha. */
+       GPU_blend_set_func_separate(GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
+
        IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
        immDrawPixelsTexScaled(&state, (float)xco, (float)yco, imb->x, imb->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, imb->rect,
                               scale, scale, 1.0f, 1.0f, col);
 
+       GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
+
        if (icon) {
                UI_icon_draw_aspect((float)xco, (float)yco, icon, icon_aspect, 1.0f, NULL);
        }