[Bf-blender-cvs] [d119166] GPU_data_request: draw camera in 1 GL call (2 for active cam)

Mike Erwin noreply at git.blender.org
Mon Mar 30 02:51:15 CEST 2015


Commit: d119166464b98548d9d25fa202d6ada61734f085
Author: Mike Erwin
Date:   Sun Mar 29 01:51:13 2015 -0400
Branches: GPU_data_request
https://developer.blender.org/rBd119166464b98548d9d25fa202d6ada61734f085

draw camera in 1 GL call (2 for active cam)

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

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 2c3f1db..3178560 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -1943,35 +1943,18 @@ static void drawcamera_new(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *
 
 	if (is_view) {
 		/* camera frame */
-		glBegin(GL_LINE_LOOP);
-		glArrayElement(0);
-		glArrayElement(1);
-		glArrayElement(2);
-		glArrayElement(3);
-		glEnd();
+		glDrawArrays(GL_LINE_LOOP, 0, 4);
 	}
 	else {
 		int i;
 
-		/* camera frame (minus top segment) */
-		glBegin(GL_LINE_STRIP);
-		glArrayElement(0);
-		glArrayElement(1);
-		glArrayElement(2);
-		glArrayElement(3);
-		glEnd();
-
-		/* center point to camera frame */
-		zero_v3(vec[4]);
+		const GLubyte line_indices[] = {
+			0,1, 1,2, 2,3, 3,0, /* camera frame */
+			0,4, 1,4, 2,4, 3,4, /* center point to camera frame */
+			5,6, 6,7, 7,5       /* arrow on top */
+		};
 
-		glBegin(GL_LINE_STRIP);
-		glArrayElement(1);
-		glArrayElement(4);
-		glArrayElement(0);
-		glArrayElement(3);
-		glArrayElement(4);
-		glArrayElement(2);
-		glEnd();
+		zero_v3(vec[4]); /* center point */
 
 		/* arrow on top */
 		{
@@ -1991,22 +1974,14 @@ static void drawcamera_new(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *
 			copy_v3_v3(vec[7], tvec); /* left */
 		}
 
+		glDrawElements(GL_LINES, 22, GL_UNSIGNED_BYTE, line_indices);
+
 		/* draw an outline arrow for inactive cameras and filled
 		 * for active cameras. We actually draw both outline+filled
 		 * for active cameras so the wire can be seen side-on */
-		for (i = 0; i < 2; i++) {
-			if (i == 0) glBegin(GL_LINE_LOOP);
-			else if (i == 1 && (ob == v3d->camera)) {
-				glDisable(GL_CULL_FACE); /* TODO: use new state tracking instead (draw front AND back) */
-				glBegin(GL_TRIANGLES);
-			}
-			else break;
-
-			glArrayElement(5);
-			glArrayElement(6);
-			glArrayElement(7);
-
-			glEnd();
+		if (ob == v3d->camera) {
+			glDisable(GL_CULL_FACE); /* TODO: use new state tracking instead (draw front AND back) */
+			glDrawArrays(GL_TRIANGLES, 5, 3);
 		}
 
 #if 0 /* TODO: revisit later */




More information about the Bf-blender-cvs mailing list