GPencil 2D Drawing: get rid of PRIM_QUAD_XXX.
Here we can easily use a PRIM_TRIANGLE_STRIP instead!
This commit is contained in:
@@ -726,7 +726,7 @@ static void gp_draw_stroke_2d(const bGPDspoint *points, int totpoints, short thi
|
|||||||
|
|
||||||
/* TODO: fancy++ with the magic of shaders */
|
/* TODO: fancy++ with the magic of shaders */
|
||||||
|
|
||||||
/* tessellation code - draw stroke as series of connected quads with connection
|
/* tessellation code - draw stroke as series of connected quads (triangle strips in fact) with connection
|
||||||
* edges rotated to minimize shrinking artifacts, and rounded endcaps
|
* edges rotated to minimize shrinking artifacts, and rounded endcaps
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
@@ -741,8 +741,7 @@ static void gp_draw_stroke_2d(const bGPDspoint *points, int totpoints, short thi
|
|||||||
unsigned int color = VertexFormat_add_attrib(format, "color", COMP_U8, 4, NORMALIZE_INT_TO_FLOAT);
|
unsigned int color = VertexFormat_add_attrib(format, "color", COMP_U8, 4, NORMALIZE_INT_TO_FLOAT);
|
||||||
|
|
||||||
immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
|
immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
|
||||||
#ifdef WITH_GL_PROFILE_COMPAT
|
immBegin(PRIM_TRIANGLE_STRIP, totpoints * 2 + 4);
|
||||||
immBegin(PRIM_QUADS_XXX, (totpoints - 2) * 4 + 12);
|
|
||||||
|
|
||||||
/* get x and y coordinates from first point */
|
/* get x and y coordinates from first point */
|
||||||
mul_v3_m4v3(fpt, diff_mat, &points->x);
|
mul_v3_m4v3(fpt, diff_mat, &points->x);
|
||||||
@@ -786,6 +785,7 @@ static void gp_draw_stroke_2d(const bGPDspoint *points, int totpoints, short thi
|
|||||||
t1[0] = sc[0] + mt[0];
|
t1[0] = sc[0] + mt[0];
|
||||||
t1[1] = sc[1] + mt[1];
|
t1[1] = sc[1] + mt[1];
|
||||||
|
|
||||||
|
/* First two points of cap. */
|
||||||
immVertex2fv(pos, t0);
|
immVertex2fv(pos, t0);
|
||||||
immVertex2fv(pos, t1);
|
immVertex2fv(pos, t1);
|
||||||
|
|
||||||
@@ -798,9 +798,7 @@ static void gp_draw_stroke_2d(const bGPDspoint *points, int totpoints, short thi
|
|||||||
t1[0] = s0[0] + mt[0];
|
t1[0] = s0[0] + mt[0];
|
||||||
t1[1] = s0[1] + mt[1];
|
t1[1] = s0[1] + mt[1];
|
||||||
|
|
||||||
/* draw this line twice (first to finish off start cap, then for stroke) */
|
/* Last two points of start cap (and first two points of first segment). */
|
||||||
immVertex2fv(pos, t1);
|
|
||||||
immVertex2fv(pos, t0);
|
|
||||||
immVertex2fv(pos, t0);
|
immVertex2fv(pos, t0);
|
||||||
immVertex2fv(pos, t1);
|
immVertex2fv(pos, t1);
|
||||||
}
|
}
|
||||||
@@ -834,9 +832,7 @@ static void gp_draw_stroke_2d(const bGPDspoint *points, int totpoints, short thi
|
|||||||
t1[0] = s0[0] + mt[0];
|
t1[0] = s0[0] + mt[0];
|
||||||
t1[1] = s0[1] + mt[1];
|
t1[1] = s0[1] + mt[1];
|
||||||
|
|
||||||
/* draw this line twice (once for end of current segment, and once for start of next) */
|
/* Last two points of previous segment, and first two points of current segment. */
|
||||||
immVertex2fv(pos, t1);
|
|
||||||
immVertex2fv(pos, t0);
|
|
||||||
immVertex2fv(pos, t0);
|
immVertex2fv(pos, t0);
|
||||||
immVertex2fv(pos, t1);
|
immVertex2fv(pos, t1);
|
||||||
}
|
}
|
||||||
@@ -858,9 +854,7 @@ static void gp_draw_stroke_2d(const bGPDspoint *points, int totpoints, short thi
|
|||||||
t1[0] = s1[0] + mt[0];
|
t1[0] = s1[0] + mt[0];
|
||||||
t1[1] = s1[1] + mt[1];
|
t1[1] = s1[1] + mt[1];
|
||||||
|
|
||||||
/* draw this line twice (once for end of stroke, and once for endcap)*/
|
/* Last two points of last segment (and first two points of end cap). */
|
||||||
immVertex2fv(pos, t1);
|
|
||||||
immVertex2fv(pos, t0);
|
|
||||||
immVertex2fv(pos, t0);
|
immVertex2fv(pos, t0);
|
||||||
immVertex2fv(pos, t1);
|
immVertex2fv(pos, t1);
|
||||||
|
|
||||||
@@ -877,8 +871,9 @@ static void gp_draw_stroke_2d(const bGPDspoint *points, int totpoints, short thi
|
|||||||
t1[0] = sc[0] + mt[0];
|
t1[0] = sc[0] + mt[0];
|
||||||
t1[1] = sc[1] + mt[1];
|
t1[1] = sc[1] + mt[1];
|
||||||
|
|
||||||
immVertex2fv(pos, t1);
|
/* Last two points of end cap. */
|
||||||
immVertex2fv(pos, t0);
|
immVertex2fv(pos, t0);
|
||||||
|
immVertex2fv(pos, t1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* store computed point2 coordinates as point1 ones of next segment. */
|
/* store computed point2 coordinates as point1 ones of next segment. */
|
||||||
@@ -886,7 +881,6 @@ static void gp_draw_stroke_2d(const bGPDspoint *points, int totpoints, short thi
|
|||||||
/* store stroke's 'natural' normal for next stroke to use */
|
/* store stroke's 'natural' normal for next stroke to use */
|
||||||
copy_v2_v2(pm, m2);
|
copy_v2_v2(pm, m2);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
immEnd();
|
immEnd();
|
||||||
immUnbindProgram();
|
immUnbindProgram();
|
||||||
|
Reference in New Issue
Block a user