[Bf-blender-cvs] [633a2a3592a] blender2.8: Move arrow2d_manipulator to new immediate mode GL.

Bastien Montagne noreply at git.blender.org
Tue Apr 11 13:01:11 CEST 2017


Commit: 633a2a3592a7966c06302830715b5c5c38a6f04a
Author: Bastien Montagne
Date:   Tue Apr 11 12:46:49 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB633a2a3592a7966c06302830715b5c5c38a6f04a

Move arrow2d_manipulator to new immediate mode GL.

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

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

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

diff --git a/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow2d_manipulator.c b/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow2d_manipulator.c
index 9edff5b6107..a12617ba94f 100644
--- a/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow2d_manipulator.c
+++ b/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow2d_manipulator.c
@@ -44,6 +44,8 @@
 
 #include "ED_screen.h"
 
+#include "GPU_draw.h"
+#include "GPU_immediate.h"
 #include "GPU_matrix.h"
 
 #include "MEM_guardedalloc.h"
@@ -68,13 +70,15 @@ typedef struct ArrowManipulator2D {
 } ArrowManipulator2D;
 
 
-static void arrow2d_draw_geom(ArrowManipulator2D *arrow, const float origin[2])
+static void arrow2d_draw_geom(ArrowManipulator2D *arrow, const float origin[2], const float color[4])
 {
 	const float size = 0.11f;
 	const float size_h = size / 2.0f;
 	const float len = arrow->line_len;
 	const float draw_line_ofs = (arrow->manipulator.line_width * 0.5f) / arrow->manipulator.scale;
 
+	unsigned int pos = VertexFormat_add_attrib(immVertexFormat(), "pos", COMP_F32, 3, KEEP_FLOAT);
+
 	gpuPushMatrix();
 	gpuTranslate2fv(origin);
 	gpuScaleUniform(arrow->manipulator.scale);
@@ -82,16 +86,22 @@ static void arrow2d_draw_geom(ArrowManipulator2D *arrow, const float origin[2])
 	/* local offset */
 	gpuTranslate2f(arrow->manipulator.offset[0] + draw_line_ofs, arrow->manipulator.offset[1]);
 
-	/* TODO get rid of immediate mode */
-	glBegin(GL_LINES);
-	glVertex2f(0.0f, 0.0f);
-	glVertex2f(0.0f, len);
-	glEnd();
-	glBegin(GL_TRIANGLES);
-	glVertex2f(size_h, len);
-	glVertex2f(-size_h, len);
-	glVertex2f(0.0f, len + size * 1.7f);
-	glEnd();
+	immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+	immUniformColor4fv(color);
+
+	immBegin(PRIM_LINES, 2);
+	immVertex2f(pos, 0.0f, 0.0f);
+	immVertex2f(pos, 0.0f, len);
+	immEnd();
+
+	immBegin(PRIM_TRIANGLES, 3);
+	immVertex2f(pos, size_h, len);
+	immVertex2f(pos, -size_h, len);
+	immVertex2f(pos, 0.0f, len + size * 1.7f);
+	immEnd();
+
+	immUnbindProgram();
 
 	gpuPopMatrix();
 }
@@ -103,18 +113,16 @@ static void manipulator_arrow2d_draw(const bContext *UNUSED(C), struct wmManipul
 
 	manipulator_color_get(manipulator, manipulator->state & WM_MANIPULATOR_HIGHLIGHT, col);
 
-	glColor4fv(col);
 	glLineWidth(manipulator->line_width);
 	glEnable(GL_BLEND);
-	arrow2d_draw_geom(arrow, manipulator->origin);
+	arrow2d_draw_geom(arrow, manipulator->origin, col);
 	glDisable(GL_BLEND);
 
 	if (arrow->manipulator.interaction_data) {
 		ManipulatorInteraction *inter = arrow->manipulator.interaction_data;
 
-		glColor4f(0.5f, 0.5f, 0.5f, 0.5f);
 		glEnable(GL_BLEND);
-		arrow2d_draw_geom(arrow, inter->init_origin);
+		arrow2d_draw_geom(arrow, inter->init_origin, (const float[4]){0.5f, 0.5f, 0.5f, 0.5f});
 		glDisable(GL_BLEND);
 	}
 }




More information about the Bf-blender-cvs mailing list