[Bf-blender-cvs] [6c95e97e64] blender2.8: OpenGL: convert clip_dopesheet_draw to new imm mode

Mike Erwin noreply at git.blender.org
Tue Feb 7 05:25:01 CET 2017


Commit: 6c95e97e64fa9f4490ade0866412482766da002a
Author: Mike Erwin
Date:   Wed Feb 1 22:42:50 2017 -0500
Branches: blender2.8
https://developer.blender.org/rB6c95e97e64fa9f4490ade0866412482766da002a

OpenGL: convert clip_dopesheet_draw to new imm mode

D2486 by @TCMBoby, part of T49043

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

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

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

diff --git a/source/blender/editors/space_clip/clip_dopesheet_draw.c b/source/blender/editors/space_clip/clip_dopesheet_draw.c
index 4bf4c1e7ba..19007702f9 100644
--- a/source/blender/editors/space_clip/clip_dopesheet_draw.c
+++ b/source/blender/editors/space_clip/clip_dopesheet_draw.c
@@ -54,6 +54,8 @@
 
 #include "RNA_access.h"
 
+#include "GPU_immediate.h"
+
 #include "clip_intern.h"  /* own include */
 
 static void track_channel_color(MovieTrackingTrack *track, float default_color[3], float color[3])
@@ -84,32 +86,9 @@ static void draw_keyframe_shape(float x, float y, float xscale, float yscale, bo
 	static GLuint displist1 = 0;
 	static GLuint displist2 = 0;
 	int hsize = STRIP_HEIGHT_HALF;
-
-	/* initialize 2 display lists for diamond shape - one empty, one filled */
-	if (displist1 == 0) {
-		displist1 = glGenLists(1);
-		glNewList(displist1, GL_COMPILE);
-
-		glBegin(GL_LINE_LOOP);
-		glVertex2fv(_unit_diamond_shape[0]);
-		glVertex2fv(_unit_diamond_shape[1]);
-		glVertex2fv(_unit_diamond_shape[2]);
-		glVertex2fv(_unit_diamond_shape[3]);
-		glEnd();
-		glEndList();
-	}
-	if (displist2 == 0) {
-		displist2 = glGenLists(1);
-		glNewList(displist2, GL_COMPILE);
-
-		glBegin(GL_QUADS);
-		glVertex2fv(_unit_diamond_shape[0]);
-		glVertex2fv(_unit_diamond_shape[1]);
-		glVertex2fv(_unit_diamond_shape[2]);
-		glVertex2fv(_unit_diamond_shape[3]);
-		glEnd();
-		glEndList();
-	}
+	
+	VertexFormat *format = immVertexFormat();
+	unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT);
 
 	glPushMatrix();
 
@@ -120,16 +99,29 @@ static void draw_keyframe_shape(float x, float y, float xscale, float yscale, bo
 	/* anti-aliased lines for more consistent appearance */
 	glEnable(GL_LINE_SMOOTH);
 
+	immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+	/* interior */
 	if (sel)
-		UI_ThemeColorShadeAlpha(TH_STRIP_SELECT, 50, -255 * (1.0f - alpha));
+		immUniformThemeColorShadeAlpha(TH_STRIP_SELECT, 50, -255 * (1.0f - alpha));
 	else
-		glColor4f(0.91f, 0.91f, 0.91f, alpha);
+		immUniformColor4f(0.91f, 0.91f, 0.91f, alpha);
 
-	glCallList(displist2);
+	immBegin(GL_QUADS, 4);
+	immVertex2fv(pos, _unit_diamond_shape[0]);
+	immVertex2fv(pos, _unit_diamond_shape[1]);
+	immVertex2fv(pos, _unit_diamond_shape[2]);
+	immVertex2fv(pos, _unit_diamond_shape[3]);
+	immEnd();
 
 	/* exterior - black frame */
-	glColor4f(0.0f, 0.0f, 0.0f, alpha);
-	glCallList(displist1);
+	immUniformColor4f(0.0f, 0.0f, 0.0f, alpha);
+	immBegin(GL_LINE_LOOP, 4);
+	immVertex2fv(pos, _unit_diamond_shape[0]);
+	immVertex2fv(pos, _unit_diamond_shape[1]);
+	immVertex2fv(pos, _unit_diamond_shape[2]);
+	immVertex2fv(pos, _unit_diamond_shape[3]);
+	immEnd();
+	immUnbindProgram();
 
 	glDisable(GL_LINE_SMOOTH);
 
@@ -143,7 +135,11 @@ static void clip_draw_dopesheet_background(ARegion *ar, MovieClip *clip)
 	MovieTracking *tracking = &clip->tracking;
 	MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
 	MovieTrackingDopesheetCoverageSegment *coverage_segment;
+	
+	VertexFormat *format = immVertexFormat();
+	unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT);
 
+	immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
 	for (coverage_segment = dopesheet->coverage_segments.first;
 	     coverage_segment;
 	     coverage_segment = coverage_segment->next)
@@ -153,14 +149,15 @@ static void clip_draw_dopesheet_background(ARegion *ar, MovieClip *clip)
 			int end_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, coverage_segment->end_frame);
 
 			if (coverage_segment->coverage == TRACKING_COVERAGE_BAD) {
-				glColor4f(1.0f, 0.0f, 0.0f, 0.07f);
+				immUniformColor4f(1.0f, 0.0f, 0.0f, 0.07f);
 			}
 			else
-				glColor4f(1.0f, 1.0f, 0.0f, 0.07f);
+				immUniformColor4f(1.0f, 1.0f, 0.0f, 0.07f);
 
-			glRectf(start_frame, v2d->cur.ymin, end_frame, v2d->cur.ymax);
+			immRectf(pos, start_frame, v2d->cur.ymin, end_frame, v2d->cur.ymax);
 		}
 	}
+	immUnbindProgram();
 }
 
 void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene)
@@ -178,6 +175,9 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene)
 		float y, xscale, yscale;
 		float strip[4], selected_strip[4];
 		float height = (dopesheet->tot_channel * CHANNEL_STEP) + (CHANNEL_HEIGHT);
+		
+		VertexFormat *format = immVertexFormat();
+		unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT);
 
 		/* don't use totrect set, as the width stays the same
 		 * (NOTE: this is ok here, the configuration is pretty straightforward)
@@ -218,10 +218,12 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene)
 					float default_color[4] = {0.8f, 0.93f, 0.8f, 0.3f};
 
 					track_channel_color(track, default_color, color);
-					glColor4fv(color);
+					immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+					immUniformColor4fv(color);
 
-					glRectf(v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF,
+					immRectf(pos, v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF,
 					        v2d->cur.xmax + EXTRA_SCROLL_PAD, (float) y + CHANNEL_HEIGHT_HALF);
+					immUnbindProgram();
 				}
 
 				alpha = (track->flag & TRACK_LOCKED) ? 0.5f : 1.0f;
@@ -231,18 +233,21 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene)
 					int start_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, channel->segments[2 * i]);
 					int end_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, channel->segments[2 * i + 1]);
 
+					immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
 					if (sel)
-						glColor4fv(selected_strip);
+						immUniformColor4fv(selected_strip);
 					else
-						glColor4fv(strip);
+						immUniformColor4fv(strip);
 
 					if (start_frame != end_frame) {
-						glRectf(start_frame, (float) y - STRIP_HEIGHT_HALF,
+						immRectf(pos, start_frame, (float) y - STRIP_HEIGHT_HALF,
 						        end_frame, (float) y + STRIP_HEIGHT_HALF);
+						immUnbindProgram();
 						draw_keyframe_shape(start_frame, y, xscale, yscale, sel, alpha);
 						draw_keyframe_shape(end_frame, y, xscale, yscale, sel, alpha);
 					}
 					else {
+						immUnbindProgram();
 						draw_keyframe_shape(start_frame, y, xscale, yscale, sel, alpha);
 					}
 				}
@@ -288,6 +293,9 @@ void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar)
 	int height;
 	float y;
 	PropertyRNA *chan_prop_lock;
+	
+	VertexFormat *format = immVertexFormat();
+	unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT);
 
 	if (!clip)
 		return;
@@ -326,15 +334,14 @@ void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar)
 			bool sel = (track->flag & TRACK_DOPE_SEL) != 0;
 
 			track_channel_color(track, NULL, color);
-			glColor3fv(color);
+			immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+			immUniformColor3fv(color);
 
-			glRectf(v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF,
+			immRectf(pos, v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF,
 			        v2d->cur.xmax + EXTRA_SCROLL_PAD, (float) y + CHANNEL_HEIGHT_HALF);
+			immUnbindProgram();
 
-			if (sel)
-				UI_ThemeColor(TH_TEXT_HI);
-			else
-				UI_ThemeColor(TH_TEXT);
+			UI_ThemeColor(sel ? TH_TEXT_HI : TH_TEXT);
 
 			font_height = BLF_height(fontid, channel->name, sizeof(channel->name));
 			BLF_position(fontid, v2d->cur.xmin + CHANNEL_PAD,




More information about the Bf-blender-cvs mailing list