Commit: ac7618d0dc75147a542bf910077e4a895fe8e2ef
Author: Charlie Jolly
Date:   Mon Dec 10 16:23:03 2018 +0000
Branches: greasepencil-object
https://developer.blender.org/rBac7618d0dc75147a542bf910077e4a895fe8e2ef

GP: Primitives: tidy up control point code

The display of control points is temporary as this is still wip.

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

M       source/blender/editors/gpencil/drawgpencil.c
M       source/blender/editors/gpencil/gpencil_primitive.c
M       source/blender/editors/include/ED_gpencil.h

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

diff --git a/source/blender/editors/gpencil/drawgpencil.c 
b/source/blender/editors/gpencil/drawgpencil.c
index be664888719..8bcb8a2b4dd 100644
--- a/source/blender/editors/gpencil/drawgpencil.c
+++ b/source/blender/editors/gpencil/drawgpencil.c
@@ -1430,21 +1430,34 @@ void ED_gp_draw_interpolation(const bContext *C, 
tGPDinterpolate *tgpi, const in
        glDisable(GL_BLEND);
 }
 
-static void gp_primitive_draw_point(const tGPcontrolpoint *cp)
+/* draw points, this is temporary code */
+static void gp_primitive_draw_point(const tGPDprimitive *tgpi)
 {
        GPUVertFormat *format = immVertexFormat();
        uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 3, 
GPU_FETCH_FLOAT);
-       float color[4];
-       UI_GetThemeColor3fv(cp->color, color);
-       color[3] = 0.6f;
-       /* if drawing a single point, draw it larger */
-       GPU_point_size((float)cp->size);
-       
immBindBuiltinProgram(GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA);
-       immUniformColor4fv(color);
-       immBegin(GPU_PRIM_POINTS, 1);
-       immVertex3fv(pos, &cp->x);
+       uint size = GPU_vertformat_attr_add(format, "size", GPU_COMP_F32, 1, 
GPU_FETCH_FLOAT);
+       uint color = GPU_vertformat_attr_add(format, "color", GPU_COMP_F32, 4, 
GPU_FETCH_FLOAT);
+
+       //glEnable(GL_BLEND);
+       immBindBuiltinProgram(GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR);
+       GPU_enable_program_point_size();
+       immBegin(GPU_PRIM_POINTS, tgpi->tot_cp_points);
+
+       tGPcontrolpoint *cps = tgpi->cp_points;
+       for (int i = 0; i < tgpi->tot_cp_points; i++) {
+               tGPcontrolpoint *cp = &cps[i];
+               float ink[4];
+               UI_GetThemeColor4fv(cp->color, ink);
+               ink[3] = 0.5f;
+               immAttr4fv(color, ink);
+               immAttr1f(size, (float)cp->size); 
+               immVertex3fv(pos, &cp->x);
+       }
+
        immEnd();
        immUnbindProgram();
+       GPU_disable_program_point_size();
+       //glDisable(GL_BLEND);
 }
 
 /* draw interpolate strokes (used only while operator is running) */
@@ -1504,12 +1517,7 @@ void ED_gp_draw_primitives(const bContext *C, 
tGPDprimitive *tgpi, const int typ
 
        /* draw cps, this is temporary code */
        if (tgpi->draw_cp_points) {
-               tGPcontrolpoint *cps = tgpi->cp_points;
-               for (int i = 0; i < tgpi->tot_cp_points; i++) {
-                       tGPcontrolpoint *cp = &cps[i];
-                       if (cp->display)
-                               gp_primitive_draw_point(cp);
-               }
+               gp_primitive_draw_point(tgpi);
        }
 
        GPU_blend(false);
diff --git a/source/blender/editors/gpencil/gpencil_primitive.c 
b/source/blender/editors/gpencil/gpencil_primitive.c
index c3f167d5a49..17423cee2f7 100644
--- a/source/blender/editors/gpencil/gpencil_primitive.c
+++ b/source/blender/editors/gpencil/gpencil_primitive.c
@@ -294,8 +294,7 @@ static void gp_primitive_set_cp(tGPDprimitive *tgpi, float 
p[2], int color, int
                tGPcontrolpoint *cp = &tgpi->cp_points[tgpi->tot_cp_points];
                copy_v2_v2(&cp->x, p);
                cp->color = color;
-               cp->display = true;
-               cp->size = MAX2(5, size);
+               cp->size = CLAMP(size, 5, 20);
                tgpi->tot_cp_points += 1;
        }
 }
@@ -453,6 +452,10 @@ static void gp_primitive_arc(tGPDprimitive *tgpi, 
tGPspoint *points2D)
                p2d->y = (end[1] - cosf(a) * length[1]);
                a += step;
        }
+
+       gp_primitive_set_cp(tgpi, tgpi->start, TH_ACTIVE_VERT, 20);
+       gp_primitive_set_cp(tgpi, tgpi->end, TH_ACTIVE_VERT, 20);
+       gp_primitive_set_cp(tgpi, tgpi->origin, TH_REDALERT, 10);
 }
 
 /* create a bezier */
@@ -476,6 +479,12 @@ static void gp_primitive_bezier(tGPDprimitive *tgpi, 
tGPspoint *points2D)
                interp_v2_v2v2v2v2_cubic(&p2d->x, bcp1, bcp2, bcp3, bcp4, a);
                a += step;
        }
+
+       gp_primitive_set_cp(tgpi, tgpi->start, TH_ACTIVE_VERT, 20);
+       gp_primitive_set_cp(tgpi, tgpi->end, TH_ACTIVE_VERT, 20);
+       gp_primitive_set_cp(tgpi, tgpi->origin, TH_REDALERT, 10);
+       gp_primitive_set_cp(tgpi, tgpi->cp1, TH_GP_VERTEX_SELECT, 20);
+       gp_primitive_set_cp(tgpi, tgpi->cp2, TH_GP_VERTEX_SELECT, 20);
 }
 
 /* create a circle */
@@ -499,6 +508,13 @@ static void gp_primitive_circle(tGPDprimitive *tgpi, 
tGPspoint *points2D)
                p2d->y = (center[1] + sinf(a) * radius[1]);
                a += step;
        }
+
+       gp_primitive_set_cp(tgpi, tgpi->start, TH_ACTIVE_VERT, 20);
+       gp_primitive_set_cp(tgpi, tgpi->end, TH_ACTIVE_VERT, 20);
+       gp_primitive_set_cp(tgpi, tgpi->origin, TH_REDALERT, 10);
+       gp_primitive_set_cp(tgpi, center, TH_REDALERT, 15);
+       gp_primitive_set_cp(tgpi, radius, TH_REDALERT, 15);
+
 }
 
 /* Helper: Update shape of the stroke */
@@ -683,22 +699,13 @@ static void gp_primitive_update_strokes(bContext *C, 
tGPDprimitive *tgpi)
        }
 
        /* store cps and convert coords, this is temporary code */
-       tgpi->draw_cp_points = ELEM(tgpi->flag, IN_PROGRESS, IN_CURVE_EDIT);
-       if (tgpi->draw_cp_points) {
-               gp_primitive_set_cp(tgpi, tgpi->start, TH_ACTIVE_VERT, 20);
-               gp_primitive_set_cp(tgpi, tgpi->end, TH_ACTIVE_VERT, 20);
-               gp_primitive_set_cp(tgpi, tgpi->origin, TH_REDALERT, 10);
-               if (tgpi->type == GP_STROKE_BEZIER) {
-                       gp_primitive_set_cp(tgpi, tgpi->cp2, 
TH_GP_VERTEX_SELECT, 20);
-                       gp_primitive_set_cp(tgpi, tgpi->cp1, 
TH_GP_VERTEX_SELECT, 20);
-               }
-
+       if (tgpi->tot_cp_points > 0) {
                tGPcontrolpoint *cps = tgpi->cp_points;
                for (int i = 0; i < tgpi->tot_cp_points; i++) {
                        tGPcontrolpoint *cp = &cps[i];
-                       if(cp->display)
-                               gp_stroke_convertcoords_tpoint(tgpi->scene, 
tgpi->ar, tgpi->ob, tgpi->gpl, (tGPspoint *)cp, NULL, &cp->x);
+                       gp_stroke_convertcoords_tpoint(tgpi->scene, tgpi->ar, 
tgpi->ob, tgpi->gpl, (tGPspoint *)cp, NULL, &cp->x);
                }
+               tgpi->draw_cp_points = true;
        }
 
        /* if axis locked, reproject to plane locked */
diff --git a/source/blender/editors/include/ED_gpencil.h 
b/source/blender/editors/include/ED_gpencil.h
index 3ee8b04589a..376a3bd01ee 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -86,7 +86,6 @@ typedef struct tGPcontrolpoint {
        float x, y, z;          /* x and y coordinates of control point */
        int color;              /* theme color */
        int size;               /* radius */
-       bool display;            /* display */
 } tGPcontrolpoint;
 
 /* used to sort by zdepth gpencil objects in viewport */

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

Reply via email to