[Bf-blender-cvs] [2acebcae24a] master: Cleanup: Avoid duplication in line art stroke generation

Hans Goudey noreply at git.blender.org
Wed Jul 14 16:11:58 CEST 2021


Commit: 2acebcae24a6cb7cc5dcef6ddc437396e129da46
Author: Hans Goudey
Date:   Wed Jul 14 10:11:41 2021 -0400
Branches: master
https://developer.blender.org/rB2acebcae24a6cb7cc5dcef6ddc437396e129da46

Cleanup: Avoid duplication in line art stroke generation

The BKE_gpencil_stroke_add_points API function worked well for
creating the primitives in the add object menu, but it expected a
specific data format that doesn't make sense in a dynamic context.
As evidence of that we can see the way source data was duplicated
in the line art file just to use this API function.

This commit solves that problem in two ways:
 - Clean up the line art function (this should make it faster too).
 - Move/rename the function so its intended use is more clear.

Differential Revision: https://developer.blender.org/D11909

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

M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/editors/gpencil/gpencil_add_monkey.c
M	source/blender/editors/gpencil/gpencil_add_stroke.c
M	source/blender/editors/include/ED_gpencil.h
M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index c11c34cb312..1f9c3e766aa 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -154,17 +154,6 @@ bool BKE_gpencil_merge_materials(struct Object *ob,
 /* statistics functions */
 void BKE_gpencil_stats_update(struct bGPdata *gpd);
 
-/* Utilities for creating and populating GP strokes */
-/* - Number of values defining each point in the built-in data
- *   buffers for primitives (e.g. 2D Monkey)
- */
-#define GP_PRIM_DATABUF_SIZE 5
-
-void BKE_gpencil_stroke_add_points(struct bGPDstroke *gps,
-                                   const float *array,
-                                   const int totpoints,
-                                   const float mat[4][4]);
-
 struct bGPDstroke *BKE_gpencil_stroke_new(int mat_idx, int totpoints, short thickness);
 struct bGPDstroke *BKE_gpencil_stroke_add(
     struct bGPDframe *gpf, int mat_idx, int totpoints, short thickness, const bool insert_at_head);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 529096b8523..e13b9d543d7 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -805,32 +805,6 @@ bGPdata *BKE_gpencil_data_addnew(Main *bmain, const char name[])
 /* Primitive Creation */
 /* Utilities for easier bulk-creation of geometry */
 
-/**
- * Populate stroke with point data from data buffers.
- * \param gps: Grease pencil stroke
- * \param array: Flat array of point data values. Each entry has #GP_PRIM_DATABUF_SIZE values.
- * \param totpoints: Total of points
- * \param mat: 4x4 transform matrix to transform points into the right coordinate space.
- */
-void BKE_gpencil_stroke_add_points(bGPDstroke *gps,
-                                   const float *array,
-                                   const int totpoints,
-                                   const float mat[4][4])
-{
-  for (int i = 0; i < totpoints; i++) {
-    bGPDspoint *pt = &gps->points[i];
-    const int x = GP_PRIM_DATABUF_SIZE * i;
-
-    pt->x = array[x];
-    pt->y = array[x + 1];
-    pt->z = array[x + 2];
-    mul_m4_v3(mat, &pt->x);
-
-    pt->pressure = array[x + 3];
-    pt->strength = array[x + 4];
-  }
-}
-
 /**
  * Create a new stroke, with pre-allocated data buffers.
  * \param mat_idx: Index of the material
diff --git a/source/blender/editors/gpencil/gpencil_add_monkey.c b/source/blender/editors/gpencil/gpencil_add_monkey.c
index d8734c4ae6b..8d60ef3ed12 100644
--- a/source/blender/editors/gpencil/gpencil_add_monkey.c
+++ b/source/blender/editors/gpencil/gpencil_add_monkey.c
@@ -39,6 +39,32 @@
 
 #include "ED_gpencil.h"
 
+/**
+ * Populate stroke with point data from data buffers.
+ * \param gps: Grease pencil stroke
+ * \param array: Flat array of point data values. Each entry has #GP_PRIM_DATABUF_SIZE values.
+ * \param totpoints: Total of points
+ * \param mat: 4x4 transform matrix to transform points into the right coordinate space.
+ */
+void ED_gpencil_stroke_init_data(bGPDstroke *gps,
+                                 const float *array,
+                                 const int totpoints,
+                                 const float mat[4][4])
+{
+  for (int i = 0; i < totpoints; i++) {
+    bGPDspoint *pt = &gps->points[i];
+    const int x = GP_PRIM_DATABUF_SIZE * i;
+
+    pt->x = array[x];
+    pt->y = array[x + 1];
+    pt->z = array[x + 2];
+    mul_m4_v3(mat, &pt->x);
+
+    pt->pressure = array[x + 3];
+    pt->strength = array[x + 4];
+  }
+}
+
 /* Definition of the most important info from a color */
 typedef struct ColorTemplate {
   const char *name;
@@ -847,115 +873,115 @@ void ED_gpencil_create_monkey(bContext *C, Object *ob, float mat[4][4])
 
   /* generate strokes */
   gps = BKE_gpencil_stroke_add(frameFills, color_Skin, 270, 75, false);
-  BKE_gpencil_stroke_add_points(gps, data0, 270, mat);
+  ED_gpencil_stroke_init_data(gps, data0, 270, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Shadow, 33, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data1, 33, mat);
+  ED_gpencil_stroke_init_data(gps, data1, 33, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Shadow, 18, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data2, 18, mat);
+  ED_gpencil_stroke_init_data(gps, data2, 18, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Light, 64, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data3, 64, mat);
+  ED_gpencil_stroke_init_data(gps, data3, 64, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Light, 33, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data4, 33, mat);
+  ED_gpencil_stroke_init_data(gps, data4, 33, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Light, 64, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data5, 64, mat);
+  ED_gpencil_stroke_init_data(gps, data5, 64, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Light, 33, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data6, 33, mat);
+  ED_gpencil_stroke_init_data(gps, data6, 33, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Light, 18, 40, false);
-  BKE_gpencil_stroke_add_points(gps, data7, 18, mat);
+  ED_gpencil_stroke_init_data(gps, data7, 18, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Eyes, 49, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data8, 49, mat);
+  ED_gpencil_stroke_init_data(gps, data8, 49, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Shadow, 33, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data9, 33, mat);
+  ED_gpencil_stroke_init_data(gps, data9, 33, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Eyes, 49, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data10, 49, mat);
+  ED_gpencil_stroke_init_data(gps, data10, 49, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Shadow, 18, 40, false);
-  BKE_gpencil_stroke_add_points(gps, data11, 18, mat);
+  ED_gpencil_stroke_init_data(gps, data11, 18, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Shadow, 18, 40, false);
-  BKE_gpencil_stroke_add_points(gps, data12, 18, mat);
+  ED_gpencil_stroke_init_data(gps, data12, 18, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data13, 33, mat);
+  ED_gpencil_stroke_init_data(gps, data13, 33, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data14, 33, mat);
+  ED_gpencil_stroke_init_data(gps, data14, 33, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 65, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data15, 65, mat);
+  ED_gpencil_stroke_init_data(gps, data15, 65, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 34, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data16, 34, mat);
+  ED_gpencil_stroke_init_data(gps, data16, 34, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data17, 33, mat);
+  ED_gpencil_stroke_init_data(gps, data17, 33, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 40, false);
-  BKE_gpencil_stroke_add_points(gps, data18, 33, mat);
+  ED_gpencil_stroke_init_data(gps, data18, 33, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 34, 40, false);
-  BKE_gpencil_stroke_add_points(gps, data19, 34, mat);
+  ED_gpencil_stroke_init_data(gps, data19, 34, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data20, 33, mat);
+  ED_gpencil_stroke_init_data(gps, data20, 33, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 64, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data21, 64, mat);
+  ED_gpencil_stroke_init_data(gps, data21, 64, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Pupils, 26, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data22, 26, mat);
+  ED_gpencil_stroke_init_data(gps, data22, 26, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Pupils, 26, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data23, 26, mat);
+  ED_gpencil_stroke_init_data(gps, data23, 26, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 60, false);
-  BKE_gpencil_stroke_add_points(gps, data24, 33, mat);
+  ED_gpencil_stroke_init_data(gps, data24, 33, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 18, 40, false);
-  BKE_gpencil_stroke_add_points(gps, data25, 18, mat);
+  ED_gpencil_stroke_init_data(gps, data25, 18, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameLines, color_Black, 18, 40, false);
-  BKE_gpencil_stroke_add_points(gps, data26, 18, mat);
+  ED_gpencil_stroke_init_data(gps, data26, 18, mat);
   BKE_gpencil_stroke_geometry_update(gpd, gps);
 
   gps = BKE_gpencil_stroke_add(frameL

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list