From f79856f9fb12d47d08e14a1e0edaee9e638362c0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 12 Jun 2020 14:29:59 +1000 Subject: 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. --- source/blender/blenkernel/BKE_mesh_wrapper.h | 2 +- source/blender/blenkernel/intern/armature.c | 4 ++-- source/blender/blenkernel/intern/mesh_wrapper.c | 4 ++-- source/blender/blenkernel/intern/modifier.c | 5 +---- source/blender/blenloader/intern/readfile.c | 2 +- .../gpencil_modifiers/intern/MOD_gpencilarmature.c | 16 ++++++---------- source/blender/makesdna/DNA_gpencil_modifier_types.h | 6 +++--- source/blender/makesdna/DNA_modifier_types.h | 6 +++--- source/blender/modifiers/intern/MOD_armature.c | 16 +++++----------- source/blender/modifiers/intern/MOD_util.c | 8 ++++---- source/blender/modifiers/intern/MOD_util.h | 4 ++-- 11 files changed, 30 insertions(+), 43 deletions(-) (limited to 'source/blender') diff --git a/source/blender/blenkernel/BKE_mesh_wrapper.h b/source/blender/blenkernel/BKE_mesh_wrapper.h index ec6a1e3457c..00e2dd08726 100644 --- a/source/blender/blenkernel/BKE_mesh_wrapper.h +++ b/source/blender/blenkernel/BKE_mesh_wrapper.h @@ -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, diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index becb78bd6fe..1d9a2424ef8 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -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++) { diff --git a/source/blender/blenkernel/intern/mesh_wrapper.c b/source/blender/blenkernel/intern/mesh_wrapper.c index 98b77256ad7..6a8bc698b11 100644 --- a/source/blender/blenkernel/intern/mesh_wrapper.c +++ b/source/blender/blenkernel/intern/mesh_wrapper.c @@ -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; } diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index d4b7d05c228..7c77746ea1c 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -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); } } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 79705385538..cc53af2b4ff 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -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; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c index 8e7fe872358..fde5ebcff8d 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c @@ -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 */ diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h index 125423cd061..ea1c0f1fda0 100644 --- a/source/blender/makesdna/DNA_gpencil_modifier_types.h +++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h @@ -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]; diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index a2b96ac2772..1413db4baea 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -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; diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c index 214c6dbe9dc..800de546a5a 100644 --- a/source/blender/modifiers/intern/MOD_armature.c +++ b/source/blender/modifiers/intern/MOD_armature.c @@ -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); diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c index 1aee545aa43..c6dff375109 100644 --- a/source/blender/modifiers/intern/MOD_util.c +++ b/source/blender/modifiers/intern/MOD_util.c @@ -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) diff --git a/source/blender/modifiers/intern/MOD_util.h b/source/blender/modifiers/intern/MOD_util.h index 38e2083082d..a05e25d204c 100644 --- a/source/blender/modifiers/intern/MOD_util.h +++ b/source/blender/modifiers/intern/MOD_util.h @@ -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); -- cgit v1.2.3