[Bf-blender-cvs] [24d39620fb7] master: Cleanup: split deform functions that take target object-data

Campbell Barton noreply at git.blender.org
Fri Jun 12 05:58:29 CEST 2020


Commit: 24d39620fb7299590220af8ea3cb4d61fdb0c9a2
Author: Campbell Barton
Date:   Fri Jun 12 13:07:50 2020 +1000
Branches: master
https://developer.blender.org/rB24d39620fb7299590220af8ea3cb4d61fdb0c9a2

Cleanup: split deform functions that take target object-data

Prefer meaningful function names over redundant NULL arguments.

Also clarify variable names as it wasn't obvious the object-data
is part of the object target.

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

M	source/blender/blenkernel/BKE_lattice.h
M	source/blender/blenkernel/intern/armature.c
M	source/blender/blenkernel/intern/lattice.c
M	source/blender/draw/intern/draw_cache_impl_lattice.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
M	source/blender/modifiers/intern/MOD_armature.c
M	source/blender/modifiers/intern/MOD_lattice.c

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

diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index 9679d105363..19cb4f5c4e1 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -59,40 +59,60 @@ void outside_lattice(struct Lattice *lt);
  * Used by modifiers (odd location for this API, for now keep these related functions together).
  * \{ */
 
-void BKE_curve_deform_coords(struct Object *cuOb,
-                             struct Object *target,
+void BKE_curve_deform_coords(struct Object *ob_curve,
+                             struct Object *ob_target,
                              float (*vert_coords)[3],
-                             int numVerts,
-                             struct MDeformVert *dvert,
+                             const int vert_coords_len,
+                             const struct MDeformVert *dvert,
                              const int defgrp_index,
-                             short flag,
-                             short defaxis);
-void BKE_curve_deform_co(struct Object *cuOb,
-                         struct Object *target,
-                         float orco[3],
+                             const short flag,
+                             const short defaxis);
+void BKE_curve_deform_co(struct Object *ob_curve,
+                         struct Object *ob_target,
+                         const float orco[3],
                          float vec[3],
                          float mat[3][3],
-                         int no_rot_axis);
+                         const int no_rot_axis);
 
-void BKE_lattice_deform_coords(struct Object *laOb,
-                               struct Object *target,
-                               struct Mesh *mesh,
+void BKE_lattice_deform_coords(struct Object *ob_lattice,
+                               struct Object *ob_target,
                                float (*vert_coords)[3],
-                               int numVerts,
-                               short flag,
-                               const char *vgroup,
+                               const int vert_coords_len,
+                               const short flag,
+                               const char *defgrp_name,
                                float influence);
 
-void BKE_armature_deform_coords(struct Object *armOb,
-                                struct Object *target,
-                                const struct Mesh *mesh,
-                                float (*vert_coords)[3],
-                                float (*defMats)[3][3],
-                                int numVerts,
-                                int deformflag,
-                                float (*prevCos)[3],
-                                const char *defgrp_name,
-                                struct bGPDstroke *gps);
+void BKE_lattice_deform_coords_with_mesh(struct Object *ob_lattice,
+                                         struct Object *ob_target,
+                                         float (*vert_coords)[3],
+                                         const int vert_coords_len,
+                                         const short flag,
+                                         const char *defgrp_name,
+                                         const float influence,
+                                         const struct Mesh *me_target);
+
+/* Note that we could have a 'BKE_armature_deform_coords' that doesn't take object data
+ * currently there are no callers for this though. */
+
+void BKE_armature_deform_coords_with_gpencil_stroke(struct Object *ob_arm,
+                                                    struct Object *ob_target,
+                                                    float (*vert_coords)[3],
+                                                    float (*vert_deform_mats)[3][3],
+                                                    int vert_coords_len,
+                                                    int deformflag,
+                                                    float (*vert_coords_prev)[3],
+                                                    const char *defgrp_name,
+                                                    struct bGPDstroke *gps_target);
+
+void BKE_armature_deform_coords_with_mesh(struct Object *ob_arm,
+                                          struct Object *ob_target,
+                                          float (*vert_coords)[3],
+                                          float (*vert_deform_mats)[3][3],
+                                          int vert_coords_len,
+                                          int deformflag,
+                                          float (*vert_coords_prev)[3],
+                                          const char *defgrp_name,
+                                          const struct Mesh *me_target);
 
 /** \} */
 
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index b382426d11c..becb78bd6fe 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -1331,6 +1331,10 @@ void BKE_pchan_bbone_deform_segment_index(const bPoseChannel *pchan,
   *r_blend_next = blend;
 }
 
+/* -------------------------------------------------------------------- */
+/** \name Armature Deform Internal Utilities
+ * \{ */
+
 /* Add the effect of one bone or B-Bone segment to the accumulated result. */
 static void pchan_deform_accumulate(const DualQuat *deform_dq,
                                     const float deform_mat[4][4],
@@ -1501,13 +1505,21 @@ static void pchan_bone_deform(bPoseChannel *pchan,
   (*contrib) += weight;
 }
 
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Armature Deform #BKE_armature_deform_coords API
+ *
+ * #BKE_armature_deform_coords and related functions.
+ * \{ */
+
 typedef struct ArmatureUserdata {
-  Object *armOb;
-  Object *target;
-  const Mesh *mesh;
-  float (*vertexCos)[3];
-  float (*defMats)[3][3];
-  float (*prevCos)[3];
+  Object *ob_arm;
+  Object *ob_target;
+  const Mesh *me_target;
+  float (*vert_coords)[3];
+  float (*vert_deform_mats)[3][3];
+  float (*vert_coords_prev)[3];
 
   bool use_envelope;
   bool use_quaternion;
@@ -1516,11 +1528,11 @@ typedef struct ArmatureUserdata {
 
   int armature_def_nr;
 
-  int target_totvert;
-  MDeformVert *dverts;
+  const MDeformVert *dverts;
+  int dverts_len;
 
-  int defbase_tot;
-  bPoseChannel **defnrToPC;
+  bPoseChannel **pchan_from_defbase;
+  int defbase_len;
 
   float premat[4][4];
   float postmat[4][4];
@@ -1531,15 +1543,15 @@ static void armature_vert_task(void *__restrict userdata,
                                const TaskParallelTLS *__restrict UNUSED(tls))
 {
   const ArmatureUserdata *data = userdata;
-  float(*const vertexCos)[3] = data->vertexCos;
-  float(*const defMats)[3][3] = data->defMats;
-  float(*const prevCos)[3] = data->prevCos;
+  float(*const vert_coords)[3] = data->vert_coords;
+  float(*const vert_deform_mats)[3][3] = data->vert_deform_mats;
+  float(*const vert_coords_prev)[3] = data->vert_coords_prev;
   const bool use_envelope = data->use_envelope;
   const bool use_quaternion = data->use_quaternion;
   const bool use_dverts = data->use_dverts;
   const int armature_def_nr = data->armature_def_nr;
 
-  MDeformVert *dvert;
+  const MDeformVert *dvert;
   DualQuat sumdq, *dq = NULL;
   bPoseChannel *pchan;
   float *co, dco[3];
@@ -1557,23 +1569,23 @@ static void armature_vert_task(void *__restrict userdata,
     sumvec[0] = sumvec[1] = sumvec[2] = 0.0f;
     vec = sumvec;
 
-    if (defMats) {
+    if (vert_deform_mats) {
       zero_m3(summat);
       smat = summat;
     }
   }
 
   if (use_dverts || armature_def_nr != -1) {
-    if (data->mesh) {
-      BLI_assert(i < data->mesh->totvert);
-      if (data->mesh->dvert != NULL) {
-        dvert = data->mesh->dvert + i;
+    if (data->me_target) {
+      BLI_assert(i < data->me_target->totvert);
+      if (data->me_target->dvert != NULL) {
+        dvert = data->me_target->dvert + i;
       }
       else {
         dvert = NULL;
       }
     }
-    else if (data->dverts && i < data->target_totvert) {
+    else if (data->dverts && i < data->dverts_len) {
       dvert = data->dverts + i;
     }
     else {
@@ -1591,8 +1603,8 @@ static void armature_vert_task(void *__restrict userdata,
       armature_weight = 1.0f - armature_weight;
     }
 
-    /* hackish: the blending factor can be used for blending with prevCos too */
-    if (prevCos) {
+    /* hackish: the blending factor can be used for blending with vert_coords_prev too */
+    if (vert_coords_prev) {
       prevco_weight = armature_weight;
       armature_weight = 1.0f;
     }
@@ -1604,7 +1616,7 @@ static void armature_vert_task(void *__restrict userdata,
   }
 
   /* get the coord we work on */
-  co = prevCos ? prevCos[i] : vertexCos[i];
+  co = vert_coords_prev ? vert_coords_prev[i] : vert_coords[i];
 
   /* Apply the object's matrix */
   mul_m4_v3(data->premat, co);
@@ -1615,7 +1627,7 @@ static void armature_vert_task(void *__restrict userdata,
     unsigned int j;
     for (j = dvert->totweight; j != 0; j--, dw++) {
       const uint index = dw->def_nr;
-      if (index < data->defbase_tot && (pchan = data->defnrToPC[index])) {
+      if (index < data->defbase_len && (pchan = data->pchan_from_defbase[index])) {
         float weight = dw->weight;
         Bone *bone = pchan->bone;
 
@@ -1632,7 +1644,7 @@ static void armature_vert_task(void *__restrict userdata,
     /* if there are vertexgroups but not groups with bones
      * (like for softbody groups) */
     if (deformed == 0 && use_envelope) {
-      for (pchan = data->armOb->pose->chanbase.first; pchan; pchan = pchan->next) {
+      for (pchan = data->ob_arm->pose->chanbase.first; pchan; pchan = pchan->next) {
         if (!(pchan->bone->flag & BONE_NO_DEFORM)) {
           contrib += dist_bone_deform(pchan, vec, dq, smat, co);
         }
@@ -1640,7 +1652,7 @@ static void armature_vert_task(void *__restrict userdata,
     }
   }
   else if (use_envelope) {
-    for (pchan = data->armOb->pose->chanbase.first; pchan; pchan = pchan->next) {
+    for (pchan = dat

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list