[Bf-blender-cvs] [275abd1] master: OpenGL: combine multiple GL_LINES into fewer draw calls

Mike Erwin noreply at git.blender.org
Sat Jan 23 08:30:02 CET 2016


Commit: 275abd14a0963a42aeb6e7fcd9b61ac8bc00da42
Author: Mike Erwin
Date:   Sat Jan 23 02:27:32 2016 -0500
Branches: master
https://developer.blender.org/rB275abd14a0963a42aeb6e7fcd9b61ac8bc00da42

OpenGL: combine multiple GL_LINES into fewer draw calls

Incidentally, one of the removed glBegin(GL_LINE) calls should’ve used
GL_LINES with an S, which was a GL_INVALID_ENUM error.

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

M	source/blender/editors/space_view3d/drawobject.c

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

diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 29f0ff2..732d699 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -1383,6 +1383,7 @@ static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
 
 		/* draw clip start, useful for wide cones where its not obvious where the start is */
 		glTranslatef(0.0, 0.0, -x);  /* reverse translation above */
+		glBegin(GL_LINES);
 		if (la->type == LA_SPOT && (la->mode & LA_SHAD_BUF)) {
 			float lvec_clip[3];
 			float vvec_clip[3];
@@ -1391,18 +1392,15 @@ static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
 			interp_v3_v3v3(lvec_clip, vec, lvec, clipsta_fac);
 			interp_v3_v3v3(vvec_clip, vec, vvec, clipsta_fac);
 
-			glBegin(GL_LINES);
 			glVertex3fv(lvec_clip);
 			glVertex3fv(vvec_clip);
-			glEnd();
 		}
 		/* Else, draw spot direction (using distance as end limit, same as for Area lamp). */
 		else {
-			glBegin(GL_LINES);
 			glVertex3f(0.0, 0.0, -circrad);
 			glVertex3f(0.0, 0.0, -la->dist);
-			glEnd();
 		}
+		glEnd();
 	}
 	else if (ELEM(la->type, LA_HEMI, LA_SUN)) {
 		
@@ -5831,8 +5829,9 @@ static void ob_draw_RE_motion(float com[3], float rotscale[3][3], float itw, flo
 	float tw = itw * drw_size;
 	float th = ith * drw_size;
 
-	glColor4ub(0x7F, 0x00, 0x00, 155);
 	glBegin(GL_LINES);
+
+	glColor4ub(0x7F, 0x00, 0x00, 155);
 	root[1] = root[2] = 0.0f;
 	root[0] = -drw_size;
 	mul_m3_v3(tr, root);
@@ -5843,47 +5842,37 @@ static void ob_draw_RE_motion(float com[3], float rotscale[3][3], float itw, flo
 	mul_m3_v3(tr, tip);
 	add_v3_v3(tip, com);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[1] = 0.0f; root[2] = tw;
 	root[0] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[1] = 0.0f; root[2] = -tw;
 	root[0] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[1] = tw; root[2] = 0.0f;
 	root[0] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[1] = -tw; root[2] = 0.0f;
 	root[0] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
-	glEnd();
 
 	glColor4ub(0x00, 0x7F, 0x00, 155);
 
-	glBegin(GL_LINES);
 	root[0] = root[2] = 0.0f;
 	root[1] = -drw_size;
 	mul_m3_v3(tr, root);
@@ -5894,46 +5883,36 @@ static void ob_draw_RE_motion(float com[3], float rotscale[3][3], float itw, flo
 	mul_m3_v3(tr, tip);
 	add_v3_v3(tip, com);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[0] = 0.0f; root[2] = tw;
 	root[1] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[0] = 0.0f; root[2] = -tw;
 	root[1] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[0] = tw; root[2] = 0.0f;
 	root[1] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[0] = -tw; root[2] = 0.0f;
 	root[1] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
-	glEnd();
 
 	glColor4ub(0x00, 0x00, 0x7F, 155);
-	glBegin(GL_LINES);
 	root[0] = root[1] = 0.0f;
 	root[2] = -drw_size;
 	mul_m3_v3(tr, root);
@@ -5944,42 +5923,35 @@ static void ob_draw_RE_motion(float com[3], float rotscale[3][3], float itw, flo
 	mul_m3_v3(tr, tip);
 	add_v3_v3(tip, com);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[0] = 0.0f; root[1] = tw;
 	root[2] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[0] = 0.0f; root[1] = -tw;
 	root[2] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[0] = tw; root[1] = 0.0f;
 	root[2] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
-	glEnd();
 
 	root[0] = -tw; root[1] = 0.0f;
 	root[2] = th;
-	glBegin(GL_LINES);
 	mul_m3_v3(tr, root);
 	add_v3_v3(root, com);
 	glVertex3fv(root);
 	glVertex3fv(tip);
+
 	glEnd();
 }
 
@@ -6232,6 +6204,8 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
 						editnurb_draw_active_nurbs(nu);
 					}
 
+					glBegin(GL_LINES);
+
 					bp = nu->bp;
 					for (b = 0; b < nu->pntsv; b++) {
 						bp1 = bp;
@@ -6242,11 +6216,8 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
 									if ((bp->f1 & SELECT) && (bp1->f1 & SELECT)) {
 										UI_ThemeColor(TH_NURB_SEL_ULINE);
 
-										/* TODO: pull glBegin out of loop */
-										glBegin(GL_LINES);
 										glVertex3fv(bp->vec);
 										glVertex3fv(bp1->vec);
-										glEnd();
 									}
 								}
 								else {
@@ -6256,18 +6227,16 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
 									else {
 										UI_ThemeColor(TH_NURB_ULINE);
 
-										glBegin(GL_LINES);
 										glVertex3fv(bp->vec);
 										glVertex3fv(bp1->vec);
-										glEnd();
 									}
 								}
 							}
 							bp1 = bp;
 						}
 					}
-					if (nu->pntsv > 1) {    /* surface */
 
+					if (nu->pntsv > 1) {    /* surface */
 						int ofs = nu->pntsu;
 						for (b = 0; b < nu->pntsu; b++) {
 							bp1 = nu->bp + b;
@@ -6278,11 +6247,8 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
 										if ((bp->f1 & SELECT) && (bp1->f1 & SELECT)) {
 											UI_ThemeColor(TH_NURB_SEL_VLINE);
 
-											/* TODO: pull glBegin out of loop */
-											glBegin(GL_LINE);
 											glVertex3fv(bp->vec);
 											glVertex3fv(bp1->vec);
-											glEnd();
 										}
 									}
 									else {
@@ -6292,10 +6258,8 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
 										else {
 											UI_ThemeColor(TH_NURB_VLINE);
 
-											glBegin(GL_LINES);
 											glVertex3fv(bp->vec);
 											glVertex3fv(bp1->vec);
-											glEnd();
 										}
 									}
 								}
@@ -6303,6 +6267,8 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
 							}
 						}
 					}
+
+					glEnd();
 					break;
 			}
 		}




More information about the Bf-blender-cvs mailing list