[Bf-blender-cvs] [70391ff991a] custom-manipulators: OpenGL: Port arrow_manipulator.c to gawain

Dalai Felinto noreply at git.blender.org
Fri Apr 7 12:42:17 CEST 2017


Commit: 70391ff991a8ddae24700ed861e4101b86ff937e
Author: Dalai Felinto
Date:   Fri Apr 7 10:58:18 2017 +0200
Branches: custom-manipulators
https://developer.blender.org/rB70391ff991a8ddae24700ed861e4101b86ff937e

OpenGL: Port arrow_manipulator.c to gawain

The conversion of wm_manipulator_geometryinfo_draw is still pending.

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

M	source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c

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

diff --git a/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c b/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c
index 3fb5059cae5..b013f9f241b 100644
--- a/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c
+++ b/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c
@@ -101,20 +101,19 @@ static void manipulator_arrow_get_final_pos(wmManipulator *manipulator, float r_
 
 static void arrow_draw_geom(const ArrowManipulator *arrow, const bool select, const float color[4])
 {
-	/* USE_IMM for other arrow types */
-	glColor4fv(color);
-
 	if (arrow->style & MANIPULATOR_ARROW_STYLE_CROSS) {
-		glPushAttrib(GL_ENABLE_BIT);
-		glDisable(GL_LIGHTING);
-		glBegin(GL_LINES);
-		glVertex2f(-1.0, 0.f);
-		glVertex2f(1.0, 0.f);
-		glVertex2f(0.f, -1.0);
-		glVertex2f(0.f, 1.0);
-		glEnd();
-
-		glPopAttrib();
+		immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+		unsigned int pos = VertexFormat_add_attrib(immVertexFormat(), "pos", COMP_F32, 2, KEEP_FLOAT);
+		immUniformColor4fv(color);
+
+		immBegin(GL_LINES, 4);
+		immVertex2f(pos, -1.0, 0.f);
+		immVertex2f(pos, 1.0, 0.f);
+		immVertex2f(pos, 0.f, -1.0);
+		immVertex2f(pos, 0.f, 1.0);
+		immEnd();
+
+		immUnbindProgram();
 	}
 	else if (arrow->style & MANIPULATOR_ARROW_STYLE_CONE) {
 		const float unitx = arrow->aspect[0];
@@ -126,29 +125,48 @@ static void arrow_draw_geom(const ArrowManipulator *arrow, const bool select, co
 			{-unitx,  unity, 0},
 		};
 
+		unsigned int pos = VertexFormat_add_attrib(immVertexFormat(), "pos", COMP_F32, 3, KEEP_FLOAT);
+
+		immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+		immUniformColor4fv(color);
+
 		glLineWidth(arrow->manipulator.line_width);
-		glEnableClientState(GL_VERTEX_ARRAY);
-		glVertexPointer(3, GL_FLOAT, 0, vec);
-		glDrawArrays(GL_LINE_LOOP, 0, ARRAY_SIZE(vec));
-		glDisableClientState(GL_VERTEX_ARRAY);
+
+		const int vec_size = ARRAY_SIZE(vec);
+		immBegin(PRIM_LINE_STRIP, vec_size);
+		for (int i = 0; i < vec_size; i++) {
+			immVertex3fv(pos, vec[i]);
+		}
+		immEnd();
+
 		glLineWidth(1.0);
+		immUnbindProgram();
+
 	}
 	else {
 #ifdef USE_MANIPULATOR_CUSTOM_ARROWS
 		wm_manipulator_geometryinfo_draw(&wm_manipulator_geom_data_arrow, select);
 #else
+		unsigned int pos = VertexFormat_add_attrib(immVertexFormat(), "pos", COMP_F32, 3, KEEP_FLOAT);
+
+		immBindBuiltinProgram(GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR);
+		immUniformColor4fv(color);
+
 		const float vec[2][3] = {
 			{0.0f, 0.0f, 0.0f},
 			{0.0f, 0.0f, arrow->len},
 		};
 
 		glLineWidth(arrow->manipulator.line_width);
-		glEnableClientState(GL_VERTEX_ARRAY);
-		glVertexPointer(3, GL_FLOAT, 0, vec);
-		glDrawArrays(GL_LINE_STRIP, 0, ARRAY_SIZE(vec));
-		glDisableClientState(GL_VERTEX_ARRAY);
-		glLineWidth(1.0);
 
+		const int vec_size = ARRAY_SIZE(vec);
+		immBegin(PRIM_LINE_STRIP, vec_size);
+		for (int i = 0; i < vec_size; i++) {
+			immVertex3fv(pos, vec[i]);
+		}
+		immEnd();
+
+		glLineWidth(1.0);
 
 		/* *** draw arrow head *** */
 
@@ -163,6 +181,7 @@ static void arrow_draw_geom(const ArrowManipulator *arrow, const bool select, co
 			gpuScale3f(size, size, size);
 
 			/* draw cube */
+			immUnbindProgram();
 			wm_manipulator_geometryinfo_draw(&wm_manipulator_geom_data_cube, select);
 		}
 		else {
@@ -171,12 +190,8 @@ static void arrow_draw_geom(const ArrowManipulator *arrow, const bool select, co
 			const bool use_lighting = select == false && ((U.manipulator_flag & V3D_SHADED_MANIPULATORS) != 0);
 
 			/* translate to line end */
-			unsigned int pos = VertexFormat_add_attrib(immVertexFormat(), "pos", GL_FLOAT, 3, KEEP_FLOAT);
 			gpuTranslate3f(0.0f, 0.0f, arrow->len);
 
-			immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
-			immUniformColor4fv(color);
-
 			if (use_lighting) {
 				glShadeModel(GL_SMOOTH);
 			}
@@ -184,15 +199,15 @@ static void arrow_draw_geom(const ArrowManipulator *arrow, const bool select, co
 			imm_draw_circle_fill_3d(pos, 0.0, 0.0, width, 8);
 			imm_draw_cylinder_fill_3d(pos, width, 0.0, len, 8, 1);
 
-			immUnbindProgram();
-
 			if (use_lighting) {
 				glShadeModel(GL_FLAT);
 			}
+			immUnbindProgram();
 		}
 
 		gpuPopMatrix();
 
+
 #endif  /* USE_MANIPULATOR_CUSTOM_ARROWS */
 	}
 }




More information about the Bf-blender-cvs mailing list