[Bf-blender-cvs] [192a99f4778] blender2.8: Fix incorrect alpha blending for icon drawing outside buttons.

Brecht Van Lommel noreply at git.blender.org
Mon Oct 8 19:49:32 CEST 2018


Commit: 192a99f47784277baa9eab4864bae1b4382b243c
Author: Brecht Van Lommel
Date:   Mon Oct 8 13:28:14 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB192a99f47784277baa9eab4864bae1b4382b243c

Fix incorrect alpha blending for icon drawing outside buttons.

This was not so noticeable for old icons with black outline, but with
white outline it's problematic.

===================================================================

M	source/blender/editors/interface/interface_icons.c

===================================================================

diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index fb8c6ec4c56..64f3a8a31d8 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -1358,6 +1358,7 @@ void UI_icon_draw_cache_end(void)
 		return;
 
 	GPU_blend(true);
+	GPU_blend_set_func(GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
 
 	icon_draw_cache_flush_ex();
 
@@ -1405,9 +1406,10 @@ static void icon_draw_texture(
 	}
 
 	/* We need to flush widget base first to ensure correct ordering. */
-	GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
 	UI_widgetbase_draw_cache_flush();
 
+	GPU_blend_set_func(GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
+
 	float x1, x2, y1, y2;
 
 	x1 = ix * icongltex.invw;
@@ -1431,6 +1433,8 @@ static void icon_draw_texture(
 	GPU_draw_primitive(GPU_PRIM_TRI_STRIP, 4);
 
 	glBindTexture(GL_TEXTURE_2D, 0);
+
+	GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
 }
 
 /* Drawing size for preview images */
@@ -1518,10 +1522,8 @@ static void icon_draw_size(
 	}
 	else if (di->type == ICON_TYPE_TEXTURE) {
 		/* texture image use premul alpha for correct scaling */
-		GPU_blend_set_func(GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
 		icon_draw_texture(x, y, (float)w, (float)h, di->data.texture.x, di->data.texture.y,
 		                  di->data.texture.w, di->data.texture.h, alpha, rgb);
-		GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
 	}
 	else if (di->type == ICON_TYPE_MONO_TEXTURE) {
 		/* icon that matches text color, assumed to be white */
@@ -1539,10 +1541,8 @@ static void icon_draw_size(
 
 		mul_v4_fl(color, alpha);
 
-		GPU_blend_set_func(GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
 		icon_draw_texture(x, y, (float)w, (float)h, di->data.texture.x, di->data.texture.y,
 		                  di->data.texture.w, di->data.texture.h, color[3], color);
-		GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
 	}
 
 	else if (di->type == ICON_TYPE_BUFFER) {



More information about the Bf-blender-cvs mailing list