Merge branch 'master' into blender2.8
authorBastien Montagne <montagne29@wanadoo.fr>
Mon, 10 Apr 2017 14:53:12 +0000 (16:53 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Mon, 10 Apr 2017 14:53:12 +0000 (16:53 +0200)
Conflicts:
source/blender/editors/gpencil/drawgpencil.c

1  2 
build_files/build_environment/install_deps.sh
source/blender/blenkernel/intern/idprop.c
source/blender/editors/gpencil/drawgpencil.c
source/blender/editors/space_clip/clip_utils.c

index 19c717b4ecb788c0f14dac0dc0f19dc8d249be23,f091609da49931ab4a0b12187f975aa4ef3183c9..11881a4a019d3e938064bc417c96a30c94bed7c0
@@@ -730,33 -700,29 +730,34 @@@ static void gp_draw_stroke_2d(const bGP
         * edges rotated to minimize shrinking artifacts, and rounded endcaps
         */
        {
 -              bGPDspoint *pt1, *pt2;
 +              const bGPDspoint *pt1, *pt2;
-               float pm[2];
+               float s0[2], s1[2];     /* segment 'center' points */
+               float pm[2];  /* normal from previous segment. */
                int i;
                float fpt[3];
 -              
 -              glShadeModel(GL_FLAT);
 -              glBegin(GL_QUADS);
 +
 +              VertexFormat *format = immVertexFormat();
 +              unsigned int pos = VertexFormat_add_attrib(format, "pos", COMP_F32, 2, KEEP_FLOAT);
 +              unsigned int color = VertexFormat_add_attrib(format, "color", COMP_U8, 4, NORMALIZE_INT_TO_FLOAT);
 +
 +              immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
 +#ifdef WITH_GL_PROFILE_COMPAT
 +              immBegin(PRIM_QUADS_XXX, (totpoints - 2) * 4 + 12);
  
+               /* get x and y coordinates from first point */
+               mul_v3_m4v3(fpt, diff_mat, &points->x);
+               gp_calc_2d_stroke_fxy(fpt, sflag, offsx, offsy, winx, winy, s0);
                for (i = 0, pt1 = points, pt2 = points + 1; i < (totpoints - 1); i++, pt1++, pt2++) {
-                       float s0[2], s1[2];     /* segment 'center' points */
                        float t0[2], t1[2];     /* tessellated coordinates */
                        float m1[2], m2[2];     /* gradient and normal */
                        float mt[2], sc[2];     /* gradient for thickness, point for end-cap */
                        float pthick;           /* thickness at segment point */
  
-                       /* get x and y coordinates from points */
-                       mul_v3_m4v3(fpt, diff_mat, &pt1->x);
-                       gp_calc_2d_stroke_fxy(fpt, sflag, offsx, offsy, winx, winy, s0);
+                       /* get x and y coordinates from point2 (point1 has already been computed in previous iteration). */
                        mul_v3_m4v3(fpt, diff_mat, &pt2->x);
                        gp_calc_2d_stroke_fxy(fpt, sflag, offsx, offsy, winx, winy, s1);
 -                      
 +
                        /* calculate gradient and normal - 'angle'=(ny/nx) */
                        m1[1] = s1[1] - s0[1];
                        m1[0] = s1[0] - s0[0];
                                t0[1] = sc[1] - mt[1];
                                t1[0] = sc[0] + mt[0];
                                t1[1] = sc[1] + mt[1];
 -                              
 -                              glVertex2fv(t1);
 -                              glVertex2fv(t0);
 +
 +                              immVertex2fv(pos, t1);
 +                              immVertex2fv(pos, t0);
                        }
+                       
+                       /* store computed point2 coordinates as point1 ones of next segment. */
+                       copy_v2_v2(s0, s1);
                        /* store stroke's 'natural' normal for next stroke to use */
                        copy_v2_v2(pm, m2);
                }