[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