[Bf-blender-cvs] [2f100c13ee1] blender2.8: Getting rid of setlinestyle: FCurves drawing.

Bastien Montagne noreply at git.blender.org
Mon May 1 17:44:48 CEST 2017


Commit: 2f100c13ee14cc6876423d1ac39ef9c565fb8987
Author: Bastien Montagne
Date:   Mon May 1 17:43:20 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB2f100c13ee14cc6876423d1ac39ef9c565fb8987

Getting rid of setlinestyle: FCurves drawing.

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

M	source/blender/editors/space_graph/graph_draw.c

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

diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c
index a732cc77aa9..e8d033b7a06 100644
--- a/source/blender/editors/space_graph/graph_draw.c
+++ b/source/blender/editors/space_graph/graph_draw.c
@@ -85,45 +85,58 @@ static void draw_fcurve_modifier_controls_envelope(FModifier *fcm, View2D *v2d)
 	const float fac = 0.05f * BLI_rctf_size_x(&v2d->cur);
 	int i;
 
-	unsigned int pos = VertexFormat_add_attrib(immVertexFormat(), "pos", COMP_F32, 2, KEEP_FLOAT);
-	immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+	const uint shdr_pos = VertexFormat_add_attrib(immVertexFormat(), "pos", COMP_F32, 2, KEEP_FLOAT);
 
-	/* draw two black lines showing the standard reference levels */
+	glLineWidth(1.0f);
+
+	immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_COLOR);
+
+	float viewport_size[4];
+	glGetFloatv(GL_VIEWPORT, viewport_size);
+	immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+	immUniform1i("num_colors", 0);  /* Simple dashes. */
 	immUniformColor3f(0.0f, 0.0f, 0.0f);
-	glLineWidth(1);
-	setlinestyle(5);
-	
+	immUniform1f("dash_width", 10.0f);
+	immUniform1f("dash_factor", 0.5f);
+
+	/* draw two black lines showing the standard reference levels */
+
 	immBegin(PRIM_LINES, 4);
-	immVertex2f(pos, v2d->cur.xmin, env->midval + env->min);
-	immVertex2f(pos, v2d->cur.xmax, env->midval + env->min);
-		
-	immVertex2f(pos, v2d->cur.xmin, env->midval + env->max);
-	immVertex2f(pos, v2d->cur.xmax, env->midval + env->max);
+	immVertex2f(shdr_pos, v2d->cur.xmin, env->midval + env->min);
+	immVertex2f(shdr_pos, v2d->cur.xmax, env->midval + env->min);
+
+	immVertex2f(shdr_pos, v2d->cur.xmin, env->midval + env->max);
+	immVertex2f(shdr_pos, v2d->cur.xmax, env->midval + env->max);
 	immEnd();
 
-	setlinestyle(0);
+	immUnbindProgram();
 
-	/* set size of vertices (non-adjustable for now) */
-	glPointSize(2.0f);
-	
-	/* for now, point color is fixed, and is white */
-	immUniformColor3f(1.0f, 1.0f, 1.0f);
-	
-	immBeginAtMost(PRIM_POINTS, env->totvert * 2);
+	if (env->totvert > 0) {
+		/* set size of vertices (non-adjustable for now) */
+		glPointSize(2.0f);
 
-	for (i = 0, fed = env->data; i < env->totvert; i++, fed++) {
-		/* only draw if visible
-		 *	- min/max here are fixed, not relative
-		 */
-		if (IN_RANGE(fed->time, (v2d->cur.xmin - fac), (v2d->cur.xmax + fac))) {
-			immVertex2f(pos, fed->time, fed->min);
-			immVertex2f(pos, fed->time, fed->max);
+		immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+		/* for now, point color is fixed, and is white */
+		immUniformColor3f(1.0f, 1.0f, 1.0f);
+
+		immBeginAtMost(PRIM_POINTS, env->totvert * 2);
+
+		for (i = 0, fed = env->data; i < env->totvert; i++, fed++) {
+			/* only draw if visible
+			 *	- min/max here are fixed, not relative
+			 */
+			if (IN_RANGE(fed->time, (v2d->cur.xmin - fac), (v2d->cur.xmax + fac))) {
+				immVertex2f(shdr_pos, fed->time, fed->min);
+				immVertex2f(shdr_pos, fed->time, fed->max);
+			}
 		}
-	}
 
-	immEnd();
+		immEnd();
 
-	immUnbindProgram();
+		immUnbindProgram();
+	}
 }
 
 /* *************************** */
@@ -549,7 +562,7 @@ static void draw_fcurve_curve(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d
 }
 
 /* helper func - draw a samples-based F-Curve */
-static void draw_fcurve_curve_samples(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d, unsigned int pos)
+static void draw_fcurve_curve_samples(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d, const uint shdr_pos)
 {
 	FPoint *prevfpt = fcu->fpt;
 	FPoint *fpt = prevfpt + 1;
@@ -591,14 +604,14 @@ static void draw_fcurve_curve_samples(bAnimContext *ac, ID *id, FCurve *fcu, Vie
 			v[1] = prevfpt->vec[1] - fac * (prevfpt->vec[1] - fpt->vec[1]);
 		}
 		
-		immVertex2fv(pos, v);
+		immVertex2fv(shdr_pos, v);
 	}
 	
 	/* loop over samples, drawing segments */
 	/* draw curve between first and last keyframe (if there are enough to do so) */
 	while (b--) {
 		/* Linear interpolation: just add one point (which should add a new line segment) */
-		immVertex2fv(pos, prevfpt->vec);
+		immVertex2fv(shdr_pos, prevfpt->vec);
 		
 		/* get next pointers */
 		if (b > 0) {
@@ -623,7 +636,7 @@ static void draw_fcurve_curve_samples(bAnimContext *ac, ID *id, FCurve *fcu, Vie
 			v[1] = prevfpt->vec[1] - fac * (prevfpt->vec[1] - fpt->vec[1]);
 		}
 		
-		immVertex2fv(pos, v);
+		immVertex2fv(shdr_pos, v);
 	}
 	
 	immEnd();
@@ -832,8 +845,14 @@ static void graph_draw_driver_debug(bAnimContext *ac, ID *id, FCurve *fcu)
 	//if ((driver->flag & DRIVER_FLAG_SHOWDEBUG) == 0)
 	//	return;
 
-	unsigned int pos = VertexFormat_add_attrib(immVertexFormat(), "pos", COMP_F32, 2, KEEP_FLOAT);
-	immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+	const uint shdr_pos = VertexFormat_add_attrib(immVertexFormat(), "pos", COMP_F32, 2, KEEP_FLOAT);
+	immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_COLOR);
+
+	float viewport_size[4];
+	glGetFloatv(GL_VIEWPORT, viewport_size);
+	immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+	immUniform1i("num_colors", 0);  /* Simple dashes. */
 
 	/* No curve to modify/visualize the result?
 	 * => We still want to show the 1-1 default... 
@@ -844,7 +863,8 @@ static void graph_draw_driver_debug(bAnimContext *ac, ID *id, FCurve *fcu)
 		/* draw with thin dotted lines in style of what curve would have been */
 		immUniformColor3fv(fcu->color);
 		
-		setlinestyle(20);
+		immUniform1f("dash_width", 40.0f);
+		immUniform1f("dash_factor", 0.5f);
 		glLineWidth(2.0f);
 		
 		/* draw 1-1 line, stretching just past the screen limits 
@@ -853,15 +873,12 @@ static void graph_draw_driver_debug(bAnimContext *ac, ID *id, FCurve *fcu)
 		immBegin(PRIM_LINES, 2);
 
 		t = v2d->cur.xmin;
-		immVertex2f(pos, t, (t + offset) * unitfac);
+		immVertex2f(shdr_pos, t, (t + offset) * unitfac);
 
 		t = v2d->cur.xmax;
-		immVertex2f(pos, t, (t + offset) * unitfac);
+		immVertex2f(shdr_pos, t, (t + offset) * unitfac);
 
 		immEnd();
-		
-		/* cleanup line drawing */
-		setlinestyle(0);
 	}
 	
 	/* draw driver only if actually functional */
@@ -876,8 +893,9 @@ static void graph_draw_driver_debug(bAnimContext *ac, ID *id, FCurve *fcu)
 			
 			/* draw dotted lines leading towards this point from both axes ....... */
 			immUniformColor3f(0.9f, 0.9f, 0.9f);
-			setlinestyle(5);
-			
+			immUniform1f("dash_width", 10.0f);
+			immUniform1f("dash_factor", 0.5f);
+
 			immBegin(PRIM_LINES, (y >= v2d->cur.ymin) ? 4 : 2);
 
 			/* x-axis lookup */
@@ -885,32 +903,35 @@ static void graph_draw_driver_debug(bAnimContext *ac, ID *id, FCurve *fcu)
 
 			if (y >= v2d->cur.ymin) {
 				co[1] = v2d->cur.ymin - 1.0f;
-				immVertex2fv(pos, co);
+				immVertex2fv(shdr_pos, co);
 
 				co[1] = y;
-				immVertex2fv(pos, co);
+				immVertex2fv(shdr_pos, co);
 			}
 
 			/* y-axis lookup */
 			co[1] = y;
 
 			co[0] = v2d->cur.xmin - 1.0f;
-			immVertex2fv(pos, co);
+			immVertex2fv(shdr_pos, co);
 
 			co[0] = x;
-			immVertex2fv(pos, co);
+			immVertex2fv(shdr_pos, co);
 
 			immEnd();
 			
-			setlinestyle(0);
-			
+			immUnbindProgram();
+
+			/* PRIM_POINTS do not survive dashed line geometry shader... */
+			immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
 			/* x marks the spot .................................................... */
 			/* -> outer frame */
 			immUniformColor3f(0.9f, 0.9f, 0.9f);
 			glPointSize(7.0);
 			
 			immBegin(PRIM_POINTS, 1);
-			immVertex2f(pos, x, y);
+			immVertex2f(shdr_pos, x, y);
 			immEnd();
 			
 			/* inner frame */
@@ -918,7 +939,7 @@ static void graph_draw_driver_debug(bAnimContext *ac, ID *id, FCurve *fcu)
 			glPointSize(3.0);
 			
 			immBegin(PRIM_POINTS, 1);
-			immVertex2f(pos, x, y);
+			immVertex2f(shdr_pos, x, y);
 			immEnd();
 		}
 	}
@@ -936,15 +957,25 @@ void graph_draw_ghost_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar)
 	FCurve *fcu;
 	
 	/* draw with thick dotted lines */
-	setlinestyle(10);
 	glLineWidth(3.0f);
 	
 	/* anti-aliased lines for less jagged appearance */
-	if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) glEnable(GL_LINE_SMOOTH);
+	if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) {
+		glEnable(GL_LINE_SMOOTH);
+	}
 	glEnable(GL_BLEND);
 
-	unsigned int pos = VertexFormat_add_attrib(immVertexFormat(), "pos", COMP_F32, 2, KEEP_FLOAT);
-	immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+	const uint shdr_pos = VertexFormat_add_attrib(immVertexFormat(), "pos", COMP_F32, 2, KEEP_FLOAT);
+
+	immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_COLOR);
+
+	float viewport_size[4];
+	glGetFloatv(GL_VIEWPORT, viewport_size);
+	immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+	immUniform1i("num_colors", 0);  /* Simple dashes. */
+	immUniform1f("dash_width", 20.0f);
+	immUniform1f("dash_factor", 0.5f);
 
 	/* the ghost curves are simply sampled F-Curves stored in sipo->ghostCurves */
 	for (fcu = sipo->ghostCurves.first; fcu; fcu = fcu->next) {
@@ -955,15 +986,14 @@ void graph_draw_ghost_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar)
 		immUniformColor3fvAlpha(fcu->color, 0.5f);
 		
 		/* simply draw the stored samples */
-		draw_fcurve_curve_samples(ac, NULL, fcu, &ar->v2d, pos);
+		draw_fcurve_curve_samples(ac, NULL, fcu, &ar->v2d, shdr_pos);
 	}
 
 	immUnbindProgram();
 
-	/* restore settings */
-	setlinestyle(0);
-	
-	if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) glDisable(GL_LINE_SMOOTH);
+	if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) {
+		glDisable(GL_LINE_SMOOTH);
+	}
 	glDisable(GL_BLEND);
 }
 
@@ -1007,11 +1037,6 @@ void graph_draw_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid
 		    (((fcu->bezt) || (fcu->fpt)) && (fcu->totvert)))
 		{
 			/* set color/drawing style for curve itself */
-			if (BKE_fcurve_is_protected(fcu)) {
-				/* protected curves (non editable) are drawn with dotted lines */
-				setlinestyle(2);
-			}
-			
 			/* draw active F-Curve thicker than the rest to make it stand out */
 			if (fcu->flag & FCURVE_ACTIVE) {
 				glLineWidth(2.0);
@@ -1021,11 +1046,29 @@ void graph_draw_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid
 			}
 			
 			/* anti-aliased lines for less jagged appearance */
-			if ((sipo->flag & SIPO_BEAUT

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list