[Bf-blender-cvs] [4565f3d] blender2.8: use new immediate mode for UI_draw_box_shadow

Mike Erwin noreply at git.blender.org
Thu Aug 11 07:06:53 CEST 2016


Commit: 4565f3d0c823e08780ea00375285c437b95911ca
Author: Mike Erwin
Date:   Thu Aug 11 01:06:17 2016 -0400
Branches: blender2.8
https://developer.blender.org/rB4565f3d0c823e08780ea00375285c437b95911ca

use new immediate mode for UI_draw_box_shadow

This serves as a good example of the Gawain API. (I’ve thought of a
better way to draw drop shadows, but that can wait!)

Part of T49043.

This is what I had in mind for D1753.

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

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

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

diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index 9ce863d..c6f7224 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -57,6 +57,8 @@
 
 #include "GPU_draw.h"
 #include "GPU_basic_shader.h"
+#include "GPU_shader.h"
+#include "GPU_immediate.h"
 
 #include "UI_interface.h"
 
@@ -1668,46 +1670,54 @@ void ui_draw_but_NODESOCKET(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol
 /* ****************************************************** */
 
 
-static void ui_shadowbox(float minx, float miny, float maxx, float maxy, float shadsize, unsigned char alpha)
+static void ui_shadowbox(unsigned pos, unsigned color, float minx, float miny, float maxx, float maxy, float shadsize, unsigned char alpha)
 {
 	/* right quad */
-	glColor4ub(0, 0, 0, alpha);
-	glVertex2f(maxx, miny);
-	glVertex2f(maxx, maxy - 0.3f * shadsize);
-	glColor4ub(0, 0, 0, 0);
-	glVertex2f(maxx + shadsize, maxy - 0.75f * shadsize);
-	glVertex2f(maxx + shadsize, miny);
+	immAttrib4ub(color, 0, 0, 0, alpha);
+	immVertex2f(pos, maxx, miny);
+	immVertex2f(pos, maxx, maxy - 0.3f * shadsize);
+	immAttrib4ub(color, 0, 0, 0, 0);
+	immVertex2f(pos, maxx + shadsize, maxy - 0.75f * shadsize);
+	immVertex2f(pos, maxx + shadsize, miny);
 	
 	/* corner shape */
-	glColor4ub(0, 0, 0, alpha);
-	glVertex2f(maxx, miny);
-	glColor4ub(0, 0, 0, 0);
-	glVertex2f(maxx + shadsize, miny);
-	glVertex2f(maxx + 0.7f * shadsize, miny - 0.7f * shadsize);
-	glVertex2f(maxx, miny - shadsize);
+	immAttrib4ub(color, 0, 0, 0, alpha);
+	immVertex2f(pos, maxx, miny);
+	immAttrib4ub(color, 0, 0, 0, 0);
+	immVertex2f(pos, maxx + shadsize, miny);
+	immVertex2f(pos, maxx + 0.7f * shadsize, miny - 0.7f * shadsize);
+	immVertex2f(pos, maxx, miny - shadsize);
 	
 	/* bottom quad */
-	glColor4ub(0, 0, 0, alpha);
-	glVertex2f(minx + 0.3f * shadsize, miny);
-	glVertex2f(maxx, miny);
-	glColor4ub(0, 0, 0, 0);
-	glVertex2f(maxx, miny - shadsize);
-	glVertex2f(minx + 0.5f * shadsize, miny - shadsize);
+	immAttrib4ub(color, 0, 0, 0, alpha);
+	immVertex2f(pos, minx + 0.3f * shadsize, miny);
+	immVertex2f(pos, maxx, miny);
+	immAttrib4ub(color, 0, 0, 0, 0);
+	immVertex2f(pos, maxx, miny - shadsize);
+	immVertex2f(pos, minx + 0.5f * shadsize, miny - shadsize);
 }
 
 void UI_draw_box_shadow(unsigned char alpha, float minx, float miny, float maxx, float maxy)
 {
 	glEnable(GL_BLEND);
-	
-	glBegin(GL_QUADS);
+
+	VertexFormat *format = immVertexFormat();
+	unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT);
+	unsigned color = add_attrib(format, "color", GL_UNSIGNED_BYTE, 4, NORMALIZE_INT_TO_FLOAT);
+
+	immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+
+	immBegin(GL_QUADS, 36);
 
 	/* accumulated outline boxes to make shade not linear, is more pleasant */
-	ui_shadowbox(minx, miny, maxx, maxy, 11.0, (20 * alpha) >> 8);
-	ui_shadowbox(minx, miny, maxx, maxy, 7.0, (40 * alpha) >> 8);
-	ui_shadowbox(minx, miny, maxx, maxy, 5.0, (80 * alpha) >> 8);
-	
-	glEnd();
+	ui_shadowbox(pos, color, minx, miny, maxx, maxy, 11.0, (20 * alpha) >> 8);
+	ui_shadowbox(pos, color, minx, miny, maxx, maxy, 7.0, (40 * alpha) >> 8);
+	ui_shadowbox(pos, color, minx, miny, maxx, maxy, 5.0, (80 * alpha) >> 8);
 	
+	immEnd();
+
+	immUnbindProgram();
+
 	glDisable(GL_BLEND);
 }




More information about the Bf-blender-cvs mailing list