[Bf-blender-cvs] [4109094362d] greasepencil-refactor: GPencil: Fix missing stroke color while drawing when use Vertex Color

Antonio Vazquez noreply at git.blender.org
Mon Jan 20 15:35:43 CET 2020


Commit: 4109094362d48528d95f862554c79f2fb61c9e74
Author: Antonio Vazquez
Date:   Mon Jan 20 13:46:38 2020 +0100
Branches: greasepencil-refactor
https://developer.blender.org/rB4109094362d48528d95f862554c79f2fb61c9e74

GPencil: Fix missing stroke color while drawing when use Vertex Color

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

M	source/blender/draw/intern/draw_cache_impl_gpencil.c
M	source/blender/editors/gpencil/gpencil_paint.c
M	source/blender/editors/gpencil/gpencil_primitive.c
M	source/blender/makesdna/DNA_gpencil_types.h

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

diff --git a/source/blender/draw/intern/draw_cache_impl_gpencil.c b/source/blender/draw/intern/draw_cache_impl_gpencil.c
index 5e6839b9448..0d5983238dd 100644
--- a/source/blender/draw/intern/draw_cache_impl_gpencil.c
+++ b/source/blender/draw/intern/draw_cache_impl_gpencil.c
@@ -533,6 +533,8 @@ static void gpencil_sbuffer_stroke_ensure(bGPdata *gpd, bool do_stroke, bool do_
     for (int i = 0; i < vert_len; i++) {
       ED_gpencil_tpoint_to_point(ar, origin, &tpoints[i], &gps->points[i]);
       mul_m4_v3(ob->imat, &gps->points[i].x);
+      bGPDspoint *pt = &gps->points[i];
+      copy_v4_v4(pt->vert_color, gpd->runtime.vert_color);
     }
 
     /* Create VBO. */
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index 929999c013e..cfaeba1578d 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -746,6 +746,15 @@ static short gp_stroke_addpoint(tGPsdata *p, const float mval[2], float pressure
     else {
       zero_v4(gpd->runtime.vert_color_fill);
     }
+    /* Copy stroke vertex color. */
+    if (GPENCIL_USE_VERTEX_COLOR_STROKE(p->scene->toolsettings, p->brush)) {
+      copy_v3_v3(gpd->runtime.vert_color, p->brush->rgb);
+      gpd->runtime.vert_color[3] = p->brush->gpencil_settings->vertex_factor;
+      srgb_to_linearrgb_v4(gpd->runtime.vert_color, gpd->runtime.vert_color);
+    }
+    else {
+      zero_v4(gpd->runtime.vert_color);
+    }
 
     /* get pointer to destination point */
     pt = ((tGPspoint *)(gpd->runtime.sbuffer) + gpd->runtime.sbuffer_used);
diff --git a/source/blender/editors/gpencil/gpencil_primitive.c b/source/blender/editors/gpencil/gpencil_primitive.c
index 2105ebded2b..1aee83ce08f 100644
--- a/source/blender/editors/gpencil/gpencil_primitive.c
+++ b/source/blender/editors/gpencil/gpencil_primitive.c
@@ -131,6 +131,15 @@ static void gp_session_validatebuffer(tGPDprimitive *p)
   else {
     zero_v4(gpd->runtime.vert_color_fill);
   }
+  /* Copy stroke vertex color. */
+  if (GPENCIL_USE_VERTEX_COLOR_STROKE(p->scene->toolsettings, p->brush)) {
+    copy_v3_v3(gpd->runtime.vert_color, p->brush->rgb);
+    gpd->runtime.vert_color[3] = p->brush->gpencil_settings->vertex_factor;
+    srgb_to_linearrgb_v4(gpd->runtime.vert_color, gpd->runtime.vert_color);
+  }
+  else {
+    zero_v4(gpd->runtime.vert_color);
+  }
 
   if (ELEM(p->type, GP_STROKE_BOX, GP_STROKE_CIRCLE)) {
     gpd->runtime.sbuffer_sflag |= GP_STROKE_CYCLIC;
diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h
index cedc1a57376..6d89f01e3fa 100644
--- a/source/blender/makesdna/DNA_gpencil_types.h
+++ b/source/blender/makesdna/DNA_gpencil_types.h
@@ -484,7 +484,10 @@ typedef struct bGPdata_Runtime {
   /** Number of total elements available in cache. */
   int sbuffer_size;
 
-  /** Vertex Color applied to Fill. */
+  /** Vertex Color applied to point (while drawing). */
+  float vert_color[4];
+
+  /** Vertex Color applied to Fill (while drawing). */
   float vert_color_fill[4];
 
   /** Number of control-points for stroke. */



More information about the Bf-blender-cvs mailing list