[Bf-blender-cvs] [7777386805b] temp-gpencil-bezier-stroke-type: GPencil: Fix crash with cyclic bezier strokes

Falk David noreply at git.blender.org
Thu Apr 29 10:18:02 CEST 2021


Commit: 7777386805b98a74a01af6db2b1cbd3825d41c66
Author: Falk David
Date:   Thu Apr 29 10:15:08 2021 +0200
Branches: temp-gpencil-bezier-stroke-type
https://developer.blender.org/rB7777386805b98a74a01af6db2b1cbd3825d41c66

GPencil: Fix crash with cyclic bezier strokes

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

M	source/blender/blenkernel/intern/gpencil_curve.c

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

diff --git a/source/blender/blenkernel/intern/gpencil_curve.c b/source/blender/blenkernel/intern/gpencil_curve.c
index 75914136c07..f441c578de4 100644
--- a/source/blender/blenkernel/intern/gpencil_curve.c
+++ b/source/blender/blenkernel/intern/gpencil_curve.c
@@ -1626,9 +1626,10 @@ void BKE_gpencil_stroke_update_geometry_from_editcurve(bGPDstroke *gps,
   gps->totpoints = points_len;
   gps->points = MEM_recallocN(gps->points, sizeof(bGPDspoint) * gps->totpoints);
 
-  bGPDcurve_point *gpc_pt = &curve_point_array[0];
+  int idx = 0;
   /* write new data to stroke point array */
   for (int i = 0; i < points_len; i++) {
+    bGPDcurve_point *gpc_pt = &curve_point_array[idx % curve_point_array_len];
     bGPDspoint *pt = &gps->points[i];
     if (update_all_attributes || (flag & GP_GEO_UPDATE_POLYLINE_POSITION)) {
       copy_v3_v3(&pt->x, &points[i][0]);
@@ -1648,7 +1649,7 @@ void BKE_gpencil_stroke_update_geometry_from_editcurve(bGPDstroke *gps,
 
     if (gpc_pt->point_index == i) {
       pt->flag |= GP_SPOINT_IS_BEZT_CONTROL;
-      gpc_pt++;
+      idx++;
     }
   }
   gps->flag &= ~GP_STROKE_SELECT;
@@ -1658,7 +1659,7 @@ void BKE_gpencil_stroke_update_geometry_from_editcurve(bGPDstroke *gps,
   if (gpc->dvert != NULL && (update_all_attributes || (flag & GP_GEO_UPDATE_POLYLINE_WEIGHT))) {
     gps->dvert = MEM_recallocN(gps->dvert, sizeof(MDeformVert) * gps->totpoints);
 
-    int idx = 0;
+    idx = 0;
     for (int i = 0; i < gpc->tot_curve_points - 1; i++) {
       MDeformVert *dv_curr = &gpc->dvert[i];
       MDeformVert *dv_next = &gpc->dvert[i + 1];



More information about the Bf-blender-cvs mailing list