Commit: 1b4b4dfd0cbc766b026296b7a0460fae6a18d117
Author: Mike Erwin
Date:   Thu Oct 6 20:51:05 2016 -0400
Branches: blender2.8
https://developer.blender.org/rB1b4b4dfd0cbc766b026296b7a0460fae6a18d117

OpenGL/GPencil: draw stroke-in-progress with new imm mode

We should revisit this later and use geometry shader to draw one continuous 
tapered stroke.

Part of T49043

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

M       source/blender/editors/gpencil/drawgpencil.c

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

diff --git a/source/blender/editors/gpencil/drawgpencil.c 
b/source/blender/editors/gpencil/drawgpencil.c
index a7e30cc7..9d6920f 100644
--- a/source/blender/editors/gpencil/drawgpencil.c
+++ b/source/blender/editors/gpencil/drawgpencil.c
@@ -157,16 +157,24 @@ static void gp_draw_stroke_buffer(const tGPspoint 
*points, int totpoints, short
        if (dflag & (GP_DRAWDATA_ONLY3D | GP_DRAWDATA_ONLYV2D))
                return;
 
+       if (sflag & GP_STROKE_ERASER) {
+               /* don't draw stroke at all! */
+               return;
+       }
+
+       VertexFormat *format = immVertexFormat();
+       unsigned pos = add_attrib(format, "pos", GL_INT, 2, 
CONVERT_INT_TO_FLOAT);
+       unsigned color = add_attrib(format, "color", GL_UNSIGNED_BYTE, 4, 
NORMALIZE_INT_TO_FLOAT);
+
+       const tGPspoint *pt = points;
+
        if (totpoints == 1) {
                /* if drawing a single point, draw it larger */
                glPointSize((float)(thickness + 2) * points->pressure);
-               glBegin(GL_POINTS);
-
-               gp_set_color_and_tpoint(points, ink);
-               glEnd();
-       }
-       else if (sflag & GP_STROKE_ERASER) {
-               /* don't draw stroke at all! */
+               
immBindBuiltinProgram(GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR);
+               immBegin(GL_POINTS, 1);
+               gp_set_tpoint_varying_color(pt, ink, color);
+               immVertex2iv(pos, &pt->x);
        }
        else {
                float oldpressure = points[0].pressure;
@@ -175,36 +183,39 @@ static void gp_draw_stroke_buffer(const tGPspoint 
*points, int totpoints, short
                if (G.debug & G_DEBUG) setlinestyle(2);
 
                glLineWidth(max_ff(oldpressure * thickness, 1.0));
-               glBegin(GL_LINE_STRIP);
+               immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+               immBeginAtMost(GL_LINE_STRIP, totpoints);
+
+               /* TODO: implement this with a geometry shader to draw one 
continuous tapered stroke */
 
-               const tGPspoint *pt = points;
                for (int i = 0; i < totpoints; i++, pt++) {
                        /* if there was a significant pressure change, stop the 
curve, change the thickness of the stroke,
                         * and continue drawing again (since line-width cannot 
change in middle of GL_LINE_STRIP)
                         */
                        if (fabsf(pt->pressure - oldpressure) > 0.2f) {
-                               glEnd();
+                               immEnd();
                                glLineWidth(max_ff(pt->pressure * thickness, 
1.0f));
-                               glBegin(GL_LINE_STRIP);
+                               immBeginAtMost(GL_LINE_STRIP, totpoints - i + 
1);
 
                                /* need to roll-back one point to ensure that 
there are no gaps in the stroke */
                                if (i != 0) { 
-                                       gp_set_color_and_tpoint((pt - 1), ink);
+                                       gp_set_tpoint_varying_color(pt - 1, 
ink, color);
+                                       immVertex2iv(pos, &(pt - 1)->x);
                                }
 
-                               /* now the point we want... */
-                               gp_set_color_and_tpoint(pt, ink);
-
-                               oldpressure = pt->pressure;
-                       }
-                       else {
-                               gp_set_color_and_tpoint(pt, ink);
+                               oldpressure = pt->pressure; /* reset our 
threshold */
                        }
+
+                       /* now the point we want */
+                       gp_set_tpoint_varying_color(pt, ink, color);
+                       immVertex2iv(pos, &pt->x);
                }
-               glEnd();
 
                if (G.debug & G_DEBUG) setlinestyle(0);
        }
+
+       immEnd();
+       immUnbindProgram();
 }
 
 /* --------- 2D Stroke Drawing Helpers --------- */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to