Cleanup: minor changes to deform functions
- Use 'float (*)[3]' to avoid casts. - Remove unnecessary float[3] copy in gpencil_deform_verts. - Use MEM_SAFE_FREE - Use const arguments.
This commit is contained in:
parent
24d39620fb
commit
f79856f9fb
|
@ -31,7 +31,7 @@ extern "C" {
|
|||
struct Mesh *BKE_mesh_wrapper_from_editmesh_with_coords(
|
||||
struct BMEditMesh *em,
|
||||
const struct CustomData_MeshMasks *cd_mask_extra,
|
||||
float (*vertexCos)[3],
|
||||
const float (*vert_coords)[3],
|
||||
const struct Mesh *me_settings);
|
||||
struct Mesh *BKE_mesh_wrapper_from_editmesh(struct BMEditMesh *em,
|
||||
const struct CustomData_MeshMasks *cd_mask_extra,
|
||||
|
|
|
@ -1566,7 +1566,7 @@ static void armature_vert_task(void *__restrict userdata,
|
|||
dq = &sumdq;
|
||||
}
|
||||
else {
|
||||
sumvec[0] = sumvec[1] = sumvec[2] = 0.0f;
|
||||
zero_v3(sumvec);
|
||||
vec = sumvec;
|
||||
|
||||
if (vert_deform_mats) {
|
||||
|
@ -1622,7 +1622,7 @@ static void armature_vert_task(void *__restrict userdata,
|
|||
mul_m4_v3(data->premat, co);
|
||||
|
||||
if (use_dverts && dvert && dvert->totweight) { /* use weight groups ? */
|
||||
MDeformWeight *dw = dvert->dw;
|
||||
const MDeformWeight *dw = dvert->dw;
|
||||
int deformed = 0;
|
||||
unsigned int j;
|
||||
for (j = dvert->totweight; j != 0; j--, dw++) {
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
|
||||
Mesh *BKE_mesh_wrapper_from_editmesh_with_coords(BMEditMesh *em,
|
||||
const CustomData_MeshMasks *cd_mask_extra,
|
||||
float (*vertexCos)[3],
|
||||
const float (*vert_coords)[3],
|
||||
const Mesh *me_settings)
|
||||
{
|
||||
Mesh *me = BKE_id_new_nomain(ID_ME, NULL);
|
||||
|
@ -83,7 +83,7 @@ Mesh *BKE_mesh_wrapper_from_editmesh_with_coords(BMEditMesh *em,
|
|||
#endif
|
||||
|
||||
EditMeshData *edit_data = me->runtime.edit_data;
|
||||
edit_data->vertexCos = vertexCos;
|
||||
edit_data->vertexCos = vert_coords;
|
||||
return me;
|
||||
}
|
||||
|
||||
|
|
|
@ -878,10 +878,7 @@ void BKE_modifier_free_temporary_data(ModifierData *md)
|
|||
if (md->type == eModifierType_Armature) {
|
||||
ArmatureModifierData *amd = (ArmatureModifierData *)md;
|
||||
|
||||
if (amd->prevCos) {
|
||||
MEM_freeN(amd->prevCos);
|
||||
amd->prevCos = NULL;
|
||||
}
|
||||
MEM_SAFE_FREE(amd->vert_coords_prev);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5595,7 +5595,7 @@ static void direct_link_modifiers(BlendDataReader *reader, ListBase *lb, Object
|
|||
else if (md->type == eModifierType_Armature) {
|
||||
ArmatureModifierData *amd = (ArmatureModifierData *)md;
|
||||
|
||||
amd->prevCos = NULL;
|
||||
amd->vert_coords_prev = NULL;
|
||||
}
|
||||
else if (md->type == eModifierType_Cloth) {
|
||||
ClothModifierData *clmd = (ClothModifierData *)md;
|
||||
|
|
|
@ -69,38 +69,34 @@ static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
|
|||
static void gpencil_deform_verts(ArmatureGpencilModifierData *mmd, Object *target, bGPDstroke *gps)
|
||||
{
|
||||
bGPDspoint *pt = gps->points;
|
||||
float *all_vert_coords = MEM_callocN(sizeof(float) * 3 * gps->totpoints, __func__);
|
||||
float(*vert_coords)[3] = MEM_mallocN(sizeof(float[3]) * gps->totpoints, __func__);
|
||||
int i;
|
||||
|
||||
BKE_gpencil_dvert_ensure(gps);
|
||||
|
||||
/* prepare array of points */
|
||||
for (i = 0; i < gps->totpoints; i++, pt++) {
|
||||
float *pt_coords = &all_vert_coords[3 * i];
|
||||
float co[3];
|
||||
copy_v3_v3(co, &pt->x);
|
||||
copy_v3_v3(pt_coords, co);
|
||||
copy_v3_v3(vert_coords[i], &pt->x);
|
||||
}
|
||||
|
||||
/* deform verts */
|
||||
BKE_armature_deform_coords_with_gpencil_stroke(mmd->object,
|
||||
target,
|
||||
(float(*)[3])all_vert_coords,
|
||||
vert_coords,
|
||||
NULL,
|
||||
gps->totpoints,
|
||||
mmd->deformflag,
|
||||
(float(*)[3])mmd->prevCos,
|
||||
mmd->vert_coords_prev,
|
||||
mmd->vgname,
|
||||
gps);
|
||||
|
||||
/* Apply deformed coordinates */
|
||||
pt = gps->points;
|
||||
for (i = 0; i < gps->totpoints; i++, pt++) {
|
||||
float *pt_coords = &all_vert_coords[3 * i];
|
||||
copy_v3_v3(&pt->x, pt_coords);
|
||||
copy_v3_v3(&pt->x, vert_coords[i]);
|
||||
}
|
||||
|
||||
MEM_SAFE_FREE(all_vert_coords);
|
||||
MEM_freeN(vert_coords);
|
||||
}
|
||||
|
||||
/* deform stroke */
|
||||
|
|
|
@ -655,12 +655,12 @@ typedef enum eSmoothGpencil_Flag {
|
|||
|
||||
typedef struct ArmatureGpencilModifierData {
|
||||
GpencilModifierData modifier;
|
||||
/** Deformflag replaces armature->deformflag. */
|
||||
/** #eArmature_DeformFlag use instead of #bArmature.deformflag. */
|
||||
short deformflag, multi;
|
||||
int _pad;
|
||||
struct Object *object;
|
||||
/** Stored input of previous modifier, for vertexgroup blending. */
|
||||
float *prevCos;
|
||||
/** Stored input of previous modifier, for vertex-group blending. */
|
||||
float (*vert_coords_prev)[3];
|
||||
/** MAX_VGROUP_NAME. */
|
||||
char vgname[64];
|
||||
|
||||
|
|
|
@ -693,12 +693,12 @@ enum {
|
|||
typedef struct ArmatureModifierData {
|
||||
ModifierData modifier;
|
||||
|
||||
/** Deformflag replaces armature->deformflag. */
|
||||
/** #eArmature_DeformFlag use instead of #bArmature.deformflag. */
|
||||
short deformflag, multi;
|
||||
char _pad2[4];
|
||||
struct Object *object;
|
||||
/** Stored input of previous modifier, for vertexgroup blending. */
|
||||
float *prevCos;
|
||||
/** Stored input of previous modifier, for vertex-group blending. */
|
||||
float (*vert_coords_prev)[3];
|
||||
/** MAX_VGROUP_NAME. */
|
||||
char defgrp_name[64];
|
||||
} ArmatureModifierData;
|
||||
|
|
|
@ -74,7 +74,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla
|
|||
ArmatureModifierData *tamd = (ArmatureModifierData *)target;
|
||||
|
||||
BKE_modifier_copydata_generic(md, target, flag);
|
||||
tamd->prevCos = NULL;
|
||||
tamd->vert_coords_prev = NULL;
|
||||
}
|
||||
|
||||
static void requiredDataMask(Object *UNUSED(ob),
|
||||
|
@ -152,15 +152,12 @@ static void deformVerts(ModifierData *md,
|
|||
NULL,
|
||||
numVerts,
|
||||
amd->deformflag,
|
||||
(float(*)[3])amd->prevCos,
|
||||
amd->vert_coords_prev,
|
||||
amd->defgrp_name,
|
||||
mesh);
|
||||
|
||||
/* free cache */
|
||||
if (amd->prevCos) {
|
||||
MEM_freeN(amd->prevCos);
|
||||
amd->prevCos = NULL;
|
||||
}
|
||||
MEM_SAFE_FREE(amd->vert_coords_prev);
|
||||
}
|
||||
|
||||
static void deformVertsEM(ModifierData *md,
|
||||
|
@ -186,15 +183,12 @@ static void deformVertsEM(ModifierData *md,
|
|||
NULL,
|
||||
numVerts,
|
||||
amd->deformflag,
|
||||
(float(*)[3])amd->prevCos,
|
||||
amd->vert_coords_prev,
|
||||
amd->defgrp_name,
|
||||
mesh_src);
|
||||
|
||||
/* free cache */
|
||||
if (amd->prevCos) {
|
||||
MEM_freeN(amd->prevCos);
|
||||
amd->prevCos = NULL;
|
||||
}
|
||||
MEM_SAFE_FREE(amd->vert_coords_prev);
|
||||
|
||||
if (mesh_src != mesh) {
|
||||
BKE_id_free(NULL, mesh_src);
|
||||
|
|
|
@ -169,12 +169,12 @@ void MOD_get_texture_coords(MappingInfoModifierData *dmd,
|
|||
}
|
||||
}
|
||||
|
||||
void MOD_previous_vcos_store(ModifierData *md, float (*vertexCos)[3])
|
||||
void MOD_previous_vcos_store(ModifierData *md, const float (*vert_coords)[3])
|
||||
{
|
||||
while ((md = md->next) && md->type == eModifierType_Armature) {
|
||||
ArmatureModifierData *amd = (ArmatureModifierData *)md;
|
||||
if (amd->multi && amd->prevCos == NULL) {
|
||||
amd->prevCos = MEM_dupallocN(vertexCos);
|
||||
if (amd->multi && amd->vert_coords_prev == NULL) {
|
||||
amd->vert_coords_prev = MEM_dupallocN(vert_coords);
|
||||
}
|
||||
else {
|
||||
break;
|
||||
|
@ -187,7 +187,7 @@ void MOD_previous_vcos_store(ModifierData *md, float (*vertexCos)[3])
|
|||
Mesh *MOD_deform_mesh_eval_get(Object *ob,
|
||||
struct BMEditMesh *em,
|
||||
Mesh *mesh,
|
||||
float (*vertexCos)[3],
|
||||
const float (*vertexCos)[3],
|
||||
const int num_verts,
|
||||
const bool use_normals,
|
||||
const bool use_orco)
|
||||
|
|
|
@ -40,12 +40,12 @@ void MOD_get_texture_coords(struct MappingInfoModifierData *dmd,
|
|||
float (*cos)[3],
|
||||
float (*r_texco)[3]);
|
||||
|
||||
void MOD_previous_vcos_store(struct ModifierData *md, float (*vertexCos)[3]);
|
||||
void MOD_previous_vcos_store(struct ModifierData *md, const float (*vertexCos)[3]);
|
||||
|
||||
struct Mesh *MOD_deform_mesh_eval_get(struct Object *ob,
|
||||
struct BMEditMesh *em,
|
||||
struct Mesh *mesh,
|
||||
float (*vertexCos)[3],
|
||||
const float (*vertexCos)[3],
|
||||
const int num_verts,
|
||||
const bool use_normals,
|
||||
const bool use_orco);
|
||||
|
|
Loading…
Reference in New Issue