[Bf-blender-cvs] [a29e2c3] master: OpenGL: simplify some UI draw calls

Mike Erwin noreply at git.blender.org
Sat Jan 16 07:19:50 CET 2016


Commit: a29e2c379e6ab22afd4abdedffe5e4fa15472a49
Author: Mike Erwin
Date:   Sat Jan 16 01:17:51 2016 -0500
Branches: master
https://developer.blender.org/rBa29e2c379e6ab22afd4abdedffe5e4fa15472a49

OpenGL: simplify some UI draw calls

- vectorscope grid
- color ramp handles
- box shadows (image file preview)

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

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 749fa22..4067f2b 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -836,12 +836,11 @@ static void vectorscope_draw_target(float centerx, float centery, float diam, co
 	glColor4f(1.0f, 1.0f, 1.0, 0.12f);
 	dangle = DEG2RADF(2.5f);
 	dampli = 2.5f / 200.0f;
-	glBegin(GL_LINE_STRIP);
+	glBegin(GL_LINE_LOOP);
 	glVertex2f(polar_to_x(centerx, diam, tampli + dampli, tangle + dangle), polar_to_y(centery, diam, tampli + dampli, tangle + dangle));
 	glVertex2f(polar_to_x(centerx, diam, tampli - dampli, tangle + dangle), polar_to_y(centery, diam, tampli - dampli, tangle + dangle));
 	glVertex2f(polar_to_x(centerx, diam, tampli - dampli, tangle - dangle), polar_to_y(centery, diam, tampli - dampli, tangle - dangle));
 	glVertex2f(polar_to_x(centerx, diam, tampli + dampli, tangle - dangle), polar_to_y(centery, diam, tampli + dampli, tangle - dangle));
-	glVertex2f(polar_to_x(centerx, diam, tampli + dampli, tangle + dangle), polar_to_y(centery, diam, tampli + dampli, tangle + dangle));
 	glEnd();
 	/* big target vary by 10 degree and 20% amplitude */
 	glColor4f(1.0f, 1.0f, 1.0, 0.12f);
@@ -918,8 +917,9 @@ void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wco
 	fdrawline(centerx, centery - (diam / 2) - 5, centerx, centery + (diam / 2) + 5);
 	/* circles */
 	for (j = 0; j < 5; j++) {
-		glBegin(GL_LINE_STRIP);
-		for (i = 0; i <= 360; i = i + 15) {
+		glBegin(GL_LINE_LOOP);
+		const int increment = 15;
+		for (i = 0; i <= 360 - increment; i += increment) {
 			const float a = DEG2RADF((float)i);
 			const float r = (j + 1) / 10.0f;
 			glVertex2f(polar_to_x(centerx, diam, r, a), polar_to_y(centery, diam, r, a));
@@ -961,17 +961,12 @@ void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wco
 
 static void ui_draw_colorband_handle_tri_hlight(float x1, float y1, float halfwidth, float height)
 {
-	float v[2];
-
 	glEnable(GL_LINE_SMOOTH);
 
 	glBegin(GL_LINE_STRIP);
-	copy_v2_fl2(v, x1 + halfwidth, y1);
-	glVertex2fv(v);
-	copy_v2_fl2(v, x1, y1 + height);
-	glVertex2fv(v);
-	copy_v2_fl2(v, x1 - halfwidth, y1);
-	glVertex2fv(v);
+	glVertex2f(x1 + halfwidth, y1);
+	glVertex2f(x1, y1 + height);
+	glVertex2f(x1 - halfwidth, y1);
 	glEnd();
 
 	glDisable(GL_LINE_SMOOTH);
@@ -979,60 +974,25 @@ static void ui_draw_colorband_handle_tri_hlight(float x1, float y1, float halfwi
 
 static void ui_draw_colorband_handle_tri(float x1, float y1, float halfwidth, float height, bool fill)
 {
-	float v[2];
-
-	if (fill) {
-		glPolygonMode(GL_FRONT, GL_FILL);
-		glEnable(GL_POLYGON_SMOOTH);
-	}
-	else {
-		glPolygonMode(GL_FRONT, GL_LINE);
-		glEnable(GL_LINE_SMOOTH);
-	}
+	glEnable(fill ? GL_POLYGON_SMOOTH : GL_LINE_SMOOTH);
 
-	glBegin(GL_TRIANGLES);
-	copy_v2_fl2(v, x1 + halfwidth, y1);
-	glVertex2fv(v);
-	copy_v2_fl2(v, x1, y1 + height);
-	glVertex2fv(v);
-	copy_v2_fl2(v, x1 - halfwidth, y1);
-	glVertex2fv(v);
+	glBegin(fill ? GL_TRIANGLES : GL_LINE_LOOP);
+	glVertex2f(x1 + halfwidth, y1);
+	glVertex2f(x1, y1 + height);
+	glVertex2f(x1 - halfwidth, y1);
 	glEnd();
 
-	if (fill) {
-		glDisable(GL_POLYGON_SMOOTH);
-	}
-	else {
-		glDisable(GL_LINE_SMOOTH);
-		glPolygonMode(GL_FRONT, GL_FILL);
-	}
+	glDisable(fill ? GL_POLYGON_SMOOTH : GL_LINE_SMOOTH);
 }
 
 static void ui_draw_colorband_handle_box(float x1, float y1, float x2, float y2, bool fill)
 {
-	float v[2];
-
-	if (fill) {
-		glPolygonMode(GL_FRONT, GL_FILL);
-	}
-	else {
-		glPolygonMode(GL_FRONT, GL_LINE);
-	}
-
-	glBegin(GL_QUADS);
-	copy_v2_fl2(v, x1, y1);
-	glVertex2fv(v);
-	copy_v2_fl2(v, x1, y2);
-	glVertex2fv(v);
-	copy_v2_fl2(v, x2, y2);
-	glVertex2fv(v);
-	copy_v2_fl2(v, x2, y1);
-	glVertex2fv(v);
+	glBegin(fill ? GL_QUADS : GL_LINE_LOOP);
+	glVertex2f(x1, y1);
+	glVertex2f(x1, y2);
+	glVertex2f(x2, y2);
+	glVertex2f(x2, y1);
 	glEnd();
-
-	if (!fill) {
-		glPolygonMode(GL_FRONT, GL_FILL);
-	}
 }
 
 static void ui_draw_colorband_handle(
@@ -1433,6 +1393,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, const rcti
 	/* sample option */
 
 	if (cumap->flag & CUMA_DRAW_SAMPLE) {
+		glBegin(GL_LINES); /* will draw one of the following 3 lines */
 		if (but->a1 == UI_GRAD_H) {
 			float tsample[3];
 			float hsv[3];
@@ -1440,19 +1401,15 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, const rcti
 			rgb_to_hsv_v(tsample, hsv);
 			glColor3ub(240, 240, 240);
 
-			glBegin(GL_LINES);
 			glVertex2f(rect->xmin + zoomx * (hsv[0] - offsx), rect->ymin);
 			glVertex2f(rect->xmin + zoomx * (hsv[0] - offsx), rect->ymax);
-			glEnd();
 		}
 		else if (cumap->cur == 3) {
 			float lum = IMB_colormanagement_get_luminance(cumap->sample);
 			glColor3ub(240, 240, 240);
 			
-			glBegin(GL_LINES);
 			glVertex2f(rect->xmin + zoomx * (lum - offsx), rect->ymin);
 			glVertex2f(rect->xmin + zoomx * (lum - offsx), rect->ymax);
-			glEnd();
 		}
 		else {
 			if (cumap->cur == 0)
@@ -1462,11 +1419,10 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, const rcti
 			else
 				glColor3ub(100, 100, 240);
 			
-			glBegin(GL_LINES);
 			glVertex2f(rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymin);
 			glVertex2f(rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymax);
-			glEnd();
 		}
+		glEnd();
 	}
 
 	/* the curve */
@@ -1726,50 +1682,47 @@ 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)
 {
-	glEnable(GL_BLEND);
-	glShadeModel(GL_SMOOTH);
-	
 	/* right quad */
-	glBegin(GL_POLYGON);
 	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);
-	glEnd();
 	
 	/* corner shape */
-	glBegin(GL_POLYGON);
 	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);
-	glEnd();
 	
 	/* bottom quad */
-	glBegin(GL_POLYGON);
 	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);
-	glEnd();
-	
-	glDisable(GL_BLEND);
-	glShadeModel(GL_FLAT);
 }
 
 void UI_draw_box_shadow(unsigned char alpha, float minx, float miny, float maxx, float maxy)
 {
+	glEnable(GL_BLEND);
+	glShadeModel(GL_SMOOTH);
+	
+	glBegin(GL_QUADS);
+
 	/* 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();
+	
+	glDisable(GL_BLEND);
+	glShadeModel(GL_FLAT);
 }




More information about the Bf-blender-cvs mailing list