[Bf-blender-cvs] [34d3ae9d5b] blender2.8: OpenGL immediate mode: clip_draw.c

Luca Rood noreply at git.blender.org
Thu Feb 16 21:53:00 CET 2017


Commit: 34d3ae9d5ba51e086fe59fac41be026926b33af5
Author: Luca Rood
Date:   Thu Feb 16 00:56:13 2017 -0200
Branches: blender2.8
https://developer.blender.org/rB34d3ae9d5ba51e086fe59fac41be026926b33af5

OpenGL immediate mode: clip_draw.c

Part of T49043

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

M	source/blender/editors/space_clip/clip_draw.c

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

diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c
index 695d04d385..670ed2f29e 100644
--- a/source/blender/editors/space_clip/clip_draw.c
+++ b/source/blender/editors/space_clip/clip_draw.c
@@ -59,6 +59,8 @@
 #include "BIF_glutil.h"
 
 #include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
 
 #include "WM_types.h"
 
@@ -73,19 +75,19 @@
 
 /*********************** main area drawing *************************/
 
-static void draw_keyframe(int frame, int cfra, int sfra, float framelen, int width)
+static void draw_keyframe(int frame, int cfra, int sfra, float framelen, int width, unsigned int pos)
 {
 	int height = (frame == cfra) ? 22 : 10;
 	int x = (frame - sfra) * framelen;
 
 	if (width == 1) {
-		glBegin(GL_LINES);
-		glVertex2i(x, 0);
-		glVertex2i(x, height * UI_DPI_FAC);
-		glEnd();
+		immBegin(GL_LINES, 2);
+		immVertex2i(pos, x, 0);
+		immVertex2i(pos, x, height * UI_DPI_FAC);
+		immEnd();
 	}
 	else {
-		glRecti(x, 0, x + width, height * UI_DPI_FAC);
+		immRecti(pos, x, 0, x + width, height * UI_DPI_FAC);
 	}
 }
 
@@ -166,6 +168,9 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc
 	BKE_movieclip_get_cache_segments(clip, &sc->user, &totseg, &points);
 	ED_region_cache_draw_cached_segments(ar, totseg, points, sfra, efra);
 
+	unsigned int pos = add_attrib(immVertexFormat(), "pos", COMP_I32, 2, CONVERT_INT_TO_FLOAT);
+	immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
 	/* track */
 	if (act_track || act_plane_track) {
 		for (i = sfra - clip->start_frame + 1, a = 0; i <= efra - clip->start_frame + 1; i++) {
@@ -189,14 +194,17 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc
 			if (generic_track_is_marker_enabled(act_track, act_plane_track, a)) {
 				framenr = generic_track_get_marker_framenr(act_track, act_plane_track, a);
 
-				if (framenr != i)
-					glColor4ub(128, 128, 0, 96);
-				else if (generic_track_is_marker_keyframed(act_track, act_plane_track, a))
-					glColor4ub(255, 255, 0, 196);
-				else
-					glColor4ub(255, 255, 0, 96);
+				if (framenr != i) {
+					immUniformColor4ub(128, 128, 0, 96);
+				}
+				else if (generic_track_is_marker_keyframed(act_track, act_plane_track, a)) {
+					immUniformColor4ub(255, 255, 0, 196);
+				}
+				else {
+					immUniformColor4ub(255, 255, 0, 96);
+				}
 
-				glRecti((i - sfra + clip->start_frame - 1) * framelen, 0, (i - sfra + clip->start_frame) * framelen, 4 * UI_DPI_FAC);
+				immRecti(pos, (i - sfra + clip->start_frame - 1) * framelen, 0, (i - sfra + clip->start_frame) * framelen, 4 * UI_DPI_FAC);
 			}
 		}
 	}
@@ -206,7 +214,7 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc
 		int n = reconstruction->camnr;
 		MovieReconstructedCamera *cameras = reconstruction->cameras;
 
-		glColor4ub(255, 0, 0, 96);
+		immUniformColor4ub(255, 0, 0, 96);
 
 		for (i = sfra, a = 0; i <= efra; i++) {
 			bool ok = false;
@@ -223,8 +231,9 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc
 				a++;
 			}
 
-			if (!ok)
-				glRecti((i - sfra + clip->start_frame - 1) * framelen, 0, (i - sfra + clip->start_frame) * framelen, 8 * UI_DPI_FAC);
+			if (!ok) {
+				immRecti(pos, (i - sfra + clip->start_frame - 1) * framelen, 0, (i - sfra + clip->start_frame) * framelen, 8 * UI_DPI_FAC);
+			}
 		}
 	}
 
@@ -233,15 +242,22 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc
 	/* current frame */
 	x = (sc->user.framenr - sfra) / (efra - sfra + 1) * ar->winx;
 
-	UI_ThemeColor(TH_CFRAME);
-	glRecti(x, 0, x + ceilf(framelen), 8 * UI_DPI_FAC);
+	immUniformThemeColor(TH_CFRAME);
+	immRecti(pos, x, 0, x + ceilf(framelen), 8 * UI_DPI_FAC);
+
+	immUnbindProgram();
 
 	ED_region_cache_draw_curfra_label(sc->user.framenr, x, 8.0f * UI_DPI_FAC);
 
+	pos = add_attrib(immVertexFormat(), "pos", COMP_I32, 2, CONVERT_INT_TO_FLOAT);
+	immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
 	/* solver keyframes */
-	glColor4ub(175, 255, 0, 255);
-	draw_keyframe(act_object->keyframe1 + clip->start_frame - 1, CFRA, sfra, framelen, 2);
-	draw_keyframe(act_object->keyframe2 + clip->start_frame - 1, CFRA, sfra, framelen, 2);
+	immUniformColor4ub(175, 255, 0, 255);
+	draw_keyframe(act_object->keyframe1 + clip->start_frame - 1, CFRA, sfra, framelen, 2, pos);
+	draw_keyframe(act_object->keyframe2 + clip->start_frame - 1, CFRA, sfra, framelen, 2, pos);
+
+	immUnbindProgram();
 
 	/* movie clip animation */
 	if ((sc->mode == SC_MODE_MASKEDIT) && sc->mask_info.mask) {
@@ -275,11 +291,16 @@ static void draw_movieclip_muted(ARegion *ar, int width, int height, float zoomx
 {
 	int x, y;
 
+	unsigned int pos = add_attrib(immVertexFormat(), "pos", GL_FLOAT, 2, KEEP_FLOAT);
+	immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
 	/* find window pixel coordinates of origin */
 	UI_view2d_view_to_region(&ar->v2d, 0.0f, 0.0f, &x, &y);
 
-	glColor3f(0.0f, 0.0f, 0.0f);
-	glRectf(x, y, x + zoomx * width, y + zoomy * height);
+	immUniformColor3f(0.0f, 0.0f, 0.0f);
+	immRectf(pos, x, y, x + zoomx * width, y + zoomy * height);
+
+	immUnbindProgram();
 }
 
 static void draw_movieclip_buffer(const bContext *C, SpaceClip *sc, ARegion *ar, ImBuf *ibuf,
@@ -297,7 +318,7 @@ static void draw_movieclip_buffer(const bContext *C, SpaceClip *sc, ARegion *ar,
 		glEnable(GL_BLEND);
 		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
-		fdrawcheckerboard(x, y, x + zoomx * ibuf->x, y + zoomy * ibuf->y);
+		imm_draw_checker_box(x, y, x + zoomx * ibuf->x, y + zoomy * ibuf->y);
 	}
 
 	/* non-scaled proxy shouldn't use filtering */
@@ -335,10 +356,7 @@ static void draw_stabilization_border(SpaceClip *sc, ARegion *ar, int width, int
 
 	/* draw boundary border for frame if stabilization is enabled */
 	if (sc->flag & SC_SHOW_STABLE && clip->tracking.stabilization.flag & TRACKING_2D_STABILIZATION) {
-		glColor3f(0.0f, 0.0f, 0.0f);
-
-		GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
-		GPU_basic_shader_line_stipple(3, 0xAAAA);
+		setlinestyle(3);
 
 		glEnable(GL_COLOR_LOGIC_OP);
 		glLogicOp(GL_NOR);
@@ -349,17 +367,20 @@ static void draw_stabilization_border(SpaceClip *sc, ARegion *ar, int width, int
 		glScalef(zoomx, zoomy, 1.0f);
 		glMultMatrixf(sc->stabmat);
 
-		glBegin(GL_LINE_LOOP);
-		glVertex2f(0.0f, 0.0f);
-		glVertex2f(width, 0.0f);
-		glVertex2f(width, height);
-		glVertex2f(0.0f, height);
-		glEnd();
+		unsigned int pos = add_attrib(immVertexFormat(), "pos", GL_FLOAT, 2, KEEP_FLOAT);
+
+		immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+		immUniformColor3f(0.0f, 0.0f, 0.0f);
+
+		imm_draw_line_box(pos, 0.0f, 0.0f, width, height);
+
+		immUnbindProgram();
 
 		glPopMatrix();
 
 		glDisable(GL_COLOR_LOGIC_OP);
-		GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
+
+		setlinestyle(0);
 	}
 }
 
@@ -423,69 +444,113 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin
 		i++;
 	}
 
+	unsigned int pos = add_attrib(immVertexFormat(), "pos", GL_FLOAT, 2, KEEP_FLOAT);
+
+	immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
 	if (!tiny) {
-		UI_ThemeColor(TH_MARKER_OUTLINE);
+		immUniformThemeColor(TH_MARKER_OUTLINE);
 
 		if (TRACK_VIEW_SELECTED(sc, track)) {
-			glPointSize(5.0f);
-			glBegin(GL_POINTS);
-			for (i = a; i < b; i++) {
-				if (i != curindex)
-					glVertex2f(path[i][0], path[i][1]);
+			if ((b - a - 1) >= 1) {
+				glPointSize(5.0f);
+
+				immBegin(GL_POINTS, b - a - 1);
+
+				for (i = a; i < b; i++) {
+					if (i != curindex) {
+						immVertex2f(pos, path[i][0], path[i][1]);
+					}
+				}
+
+				immEnd();
 			}
-			glEnd();
 		}
 
-		glLineWidth(3.0f);
-		glBegin(GL_LINE_STRIP);
-		for (i = a; i < b; i++)
-			glVertex2f(path[i][0], path[i][1]);
-		glEnd();
-	}
+		if ((b - a) >= 2) {
+			glLineWidth(3.0f);
+
+			immBegin(GL_LINE_STRIP, b - a);
+
+			for (i = a; i < b; i++) {
+				immVertex2f(pos, path[i][0], path[i][1]);
+			}
 
-	UI_ThemeColor(TH_PATH_BEFORE);
+			immEnd();
+		}
+	}
 
 	if (TRACK_VIEW_SELECTED(sc, track)) {
 		glPointSize(3.0f);
-		glBegin(GL_POINTS);
-		for (i = a; i < b; i++) {
-			if (i == count + 1)
-				UI_ThemeColor(TH_PATH_AFTER);
 
-			if (i != curindex)
-				glVertex2f(path[i][0], path[i][1]);
+		if ((curindex - a) >= 1) {
+			immUniformThemeColor(TH_PATH_BEFORE);
+
+			immBegin(GL_POINTS, curindex - a);
+
+			for (i = a; i < curindex; i++) {
+				immVertex2f(pos, path[i][0], path[i][1]);
+			}
+
+			immEnd();
 		}
-		glEnd();
-	}
 
-	UI_ThemeColor(TH_PATH_BEFORE);
+		if ((b - curindex - 1) >= 1) {
+			immUniformThemeColor(TH_PATH_AFTER);
+
+			immBegin(GL_POINTS, b - curindex - 1);
+
+			for (i = curindex + 1; i < b; i++) {
+				immVertex2f(pos, path[i][0], path[i][1]);
+			}
+
+			immEnd();
+		}
+	}
 
 	glLineWidth(1);
 
-	glBegin(GL_LINE_STRIP);
-	for (i = a; i < b; i++) {
-		if (i == count + 1)
-			UI_ThemeColor(TH_PATH_AFTER);
+	if ((curindex - a + 1) >= 2) {
+		immUniformThemeColor(TH_PATH_BEFORE);
 
-		glVertex2f(path[i][0], path[i][1]);
+		immBegin(GL_LINE_STRIP, curindex - a + 1);
+
+		for (i = a; i <= curindex; i++) {
+			immVertex2f(pos, path[i][0], path[i][1]);
+		}
+
+		immEnd();
 	}
-	glEnd();
+
+	if ((b - curindex) >= 2) {
+		immUniformThemeColor(TH_PATH_AFTER);
+
+		immBegin(GL_LINE_STRIP, b - curindex);
+
+		for (i = curindex; i < b; i++) {
+			immVertex2f(pos, path[i][0], path[i][1]);
+		}
+
+		immEnd();
+	}
+
+	immUnbindProgram();
 }
 
 static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker,
-                                const float marker_pos[2], int width, int height)
+                                const float marker_pos[2], int width, int height, unsigned int position)
 {
 	int tiny = sc->flag & SC_SHOW_TINY_MARKER;
 	bool show_search = false;
 	float px[2];
 
-	UI_ThemeColor(TH_MARKER_OUTLINE);
-
 	px[0] = 1.0f / width / sc->zoom;
 	px[1] = 1.0f / height / sc->zoom;
 
 	glLineWidth(tiny ? 1.0f : 3.0f);
 
+	immUniformThemeColor(TH_MARKER_OUTLINE);
+
 	if ((marker->flag & MARKER_DISABLED) == 0) {
 		float pos[2];
 		float p[2];
@@ -500,51 +565,56 @@ static void draw_marker_outline(SpaceClip *sc, MovieTrackin

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list