diff options
Diffstat (limited to 'source/blender/modifiers/intern')
57 files changed, 1115 insertions, 1221 deletions
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c index 43f650e025c..8e627f9964d 100644 --- a/source/blender/modifiers/intern/MOD_armature.c +++ b/source/blender/modifiers/intern/MOD_armature.c @@ -68,9 +68,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla tamd->vert_coords_prev = NULL; } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *UNUSED(md), - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *UNUSED(md), CustomData_MeshMasks *r_cddata_masks) { /* ask for vertexgroups */ r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c index 7feff30968f..2d725af7fe4 100644 --- a/source/blender/modifiers/intern/MOD_array.c +++ b/source/blender/modifiers/intern/MOD_array.c @@ -293,8 +293,6 @@ static void mesh_merge_transform(Mesh *result, for (i = 0; i < cap_nverts; i++, mv++) { mul_m4_v3(cap_offset, mv->co); - /* Reset MVert flags for caps */ - mv->flag = 0; } /* We have to correct normals too, if we do not tag them as dirty later! */ @@ -458,13 +456,13 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd, float result_mat[4][4]; if (ctx->object) { - invert_m4_m4(obinv, ctx->object->obmat); + invert_m4_m4(obinv, ctx->object->object_to_world); } else { unit_m4(obinv); } - mul_m4_series(result_mat, offset, obinv, amd->offset_ob->obmat); + mul_m4_series(result_mat, offset, obinv, amd->offset_ob->object_to_world); copy_m4_m4(offset, result_mat); } @@ -476,7 +474,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd, Object *curve_ob = amd->curve_ob; CurveCache *curve_cache = curve_ob->runtime.curve_cache; if (curve_cache != NULL && curve_cache->anim_path_accum_length != NULL) { - float scale_fac = mat4_to_scale(curve_ob->obmat); + float scale_fac = mat4_to_scale(curve_ob->object_to_world); length = scale_fac * BKE_anim_path_get_length(curve_cache); } } diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index 668843188ab..48d355d8ca7 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -64,9 +64,7 @@ static void copyData(const ModifierData *md_src, ModifierData *md_dst, const int bmd_dst->custom_profile = BKE_curveprofile_copy(bmd_src->custom_profile); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { BevelModifierData *bmd = (BevelModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_boolean.cc b/source/blender/modifiers/intern/MOD_boolean.cc index b266e71e99a..21f05158e8b 100644 --- a/source/blender/modifiers/intern/MOD_boolean.cc +++ b/source/blender/modifiers/intern/MOD_boolean.cc @@ -78,9 +78,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(bmd, DNA_struct_default_get(BooleanModifierData), modifier); } -static bool isDisabled(const struct Scene *UNUSED(scene), - ModifierData *md, - bool UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene * /*scene*/, ModifierData *md, bool /*useRenderParams*/) { BooleanModifierData *bmd = (BooleanModifierData *)md; Collection *col = bmd->collection; @@ -141,8 +139,8 @@ static Mesh *get_quick_mesh( float imat[4][4]; float omat[4][4]; - invert_m4_m4(imat, ob_self->obmat); - mul_m4_m4m4(omat, imat, ob_operand_ob->obmat); + invert_m4_m4(imat, ob_self->object_to_world); + mul_m4_m4m4(omat, imat, ob_operand_ob->object_to_world); MutableSpan<MVert> verts = result->verts_for_write(); for (const int i : verts.index_range()) { @@ -169,7 +167,7 @@ static Mesh *get_quick_mesh( /** * Compare selected/unselected. */ -static int bm_face_isect_pair(BMFace *f, void *UNUSED(user_data)) +static int bm_face_isect_pair(BMFace *f, void * /*user_data*/) { return BM_elem_flag_test(f, BM_FACE_TAG) ? 1 : 0; } @@ -229,7 +227,8 @@ static BMesh *BMD_mesh_bm_create( SCOPED_TIMER(__func__); #endif - *r_is_flip = (is_negative_m4(object->obmat) != is_negative_m4(operand_ob->obmat)); + *r_is_flip = (is_negative_m4(object->object_to_world) != + is_negative_m4(operand_ob->object_to_world)); const BMAllocTemplate allocsize = BMALLOC_TEMPLATE_FROM_ME(mesh, mesh_operand_ob); @@ -296,8 +295,8 @@ static void BMD_mesh_intersection(BMesh *bm, float imat[4][4]; float omat[4][4]; - invert_m4_m4(imat, object->obmat); - mul_m4_m4m4(omat, imat, operand_ob->obmat); + invert_m4_m4(imat, object->object_to_world); + mul_m4_m4m4(omat, imat, operand_ob->object_to_world); BMVert *eve; i = 0; @@ -416,7 +415,7 @@ static Mesh *exact_boolean_mesh(BooleanModifierData *bmd, } meshes.append(mesh); - obmats.append((float4x4 *)&ctx->object->obmat); + obmats.append((float4x4 *)&ctx->object->object_to_world); material_remaps.append({}); if (mesh->totcol == 0) { /* Necessary for faces using the default material when there are no material slots. */ @@ -433,7 +432,7 @@ static Mesh *exact_boolean_mesh(BooleanModifierData *bmd, } BKE_mesh_wrapper_ensure_mdata(mesh_operand); meshes.append(mesh_operand); - obmats.append((float4x4 *)&bmd->object->obmat); + obmats.append((float4x4 *)&bmd->object->object_to_world); material_remaps.append(get_material_remap(*bmd->object, *mesh_operand, materials)); } else if (bmd->flag & eBooleanModifierFlag_Collection) { @@ -448,7 +447,7 @@ static Mesh *exact_boolean_mesh(BooleanModifierData *bmd, } BKE_mesh_wrapper_ensure_mdata(collection_mesh); meshes.append(collection_mesh); - obmats.append((float4x4 *)&ob->obmat); + obmats.append((float4x4 *)&ob->object_to_world); material_remaps.append(get_material_remap(*ob, *collection_mesh, materials)); } } @@ -458,14 +457,15 @@ static Mesh *exact_boolean_mesh(BooleanModifierData *bmd, const bool use_self = (bmd->flag & eBooleanModifierFlag_Self) != 0; const bool hole_tolerant = (bmd->flag & eBooleanModifierFlag_HoleTolerant) != 0; - Mesh *result = blender::meshintersect::direct_mesh_boolean(meshes, - obmats, - *(float4x4 *)&ctx->object->obmat, - material_remaps, - use_self, - hole_tolerant, - bmd->operation, - nullptr); + Mesh *result = blender::meshintersect::direct_mesh_boolean( + meshes, + obmats, + *(float4x4 *)&ctx->object->object_to_world, + material_remaps, + use_self, + hole_tolerant, + bmd->operation, + nullptr); MEM_SAFE_FREE(result->mat); result->mat = (Material **)MEM_malloc_arrayN(materials.size(), sizeof(Material *), __func__); result->totcol = materials.size(); @@ -570,16 +570,14 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * return result; } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *UNUSED(md), - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData * /*md*/, CustomData_MeshMasks *r_cddata_masks) { r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; r_cddata_masks->emask |= CD_MASK_MEDGE; r_cddata_masks->fmask |= CD_MASK_MTFACE; } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); @@ -601,7 +599,7 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) modifier_panel_end(layout, ptr); } -static void solver_options_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void solver_options_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); diff --git a/source/blender/modifiers/intern/MOD_cast.c b/source/blender/modifiers/intern/MOD_cast.c index 3f0c212999f..b6e1b5e88c1 100644 --- a/source/blender/modifiers/intern/MOD_cast.c +++ b/source/blender/modifiers/intern/MOD_cast.c @@ -23,6 +23,7 @@ #include "BKE_lib_id.h" #include "BKE_lib_query.h" #include "BKE_mesh.h" +#include "BKE_mesh_runtime.h" #include "BKE_mesh_wrapper.h" #include "BKE_modifier.h" #include "BKE_screen.h" @@ -63,9 +64,7 @@ static bool isDisabled(const struct Scene *UNUSED(scene), return false; } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { CastModifierData *cmd = (CastModifierData *)md; @@ -127,13 +126,13 @@ static void sphere_do(CastModifierData *cmd, * we use its location, transformed to ob's local space */ if (ctrl_ob) { if (flag & MOD_CAST_USE_OB_TRANSFORM) { - invert_m4_m4(imat, ctrl_ob->obmat); - mul_m4_m4m4(mat, imat, ob->obmat); + invert_m4_m4(imat, ctrl_ob->object_to_world); + mul_m4_m4m4(mat, imat, ob->object_to_world); invert_m4_m4(imat, mat); } - invert_m4_m4(ob->imat, ob->obmat); - mul_v3_m4v3(center, ob->imat, ctrl_ob->obmat[3]); + invert_m4_m4(ob->world_to_object, ob->object_to_world); + mul_v3_m4v3(center, ob->world_to_object, ctrl_ob->object_to_world[3]); } /* now we check which options the user wants */ @@ -276,13 +275,13 @@ static void cuboid_do(CastModifierData *cmd, if (ctrl_ob) { if (flag & MOD_CAST_USE_OB_TRANSFORM) { - invert_m4_m4(imat, ctrl_ob->obmat); - mul_m4_m4m4(mat, imat, ob->obmat); + invert_m4_m4(imat, ctrl_ob->object_to_world); + mul_m4_m4m4(mat, imat, ob->object_to_world); invert_m4_m4(imat, mat); } - invert_m4_m4(ob->imat, ob->obmat); - mul_v3_m4v3(center, ob->imat, ctrl_ob->obmat[3]); + invert_m4_m4(ob->world_to_object, ob->object_to_world); + mul_v3_m4v3(center, ob->world_to_object, ctrl_ob->object_to_world[3]); } if ((flag & MOD_CAST_SIZE_FROM_RADIUS) && has_radius) { @@ -496,7 +495,7 @@ static void deformVertsEM(ModifierData *md, mesh_src = MOD_deform_mesh_eval_get(ctx->object, editData, mesh, NULL, verts_num, false); } - if (mesh && mesh->runtime.wrapper_type == ME_WRAPPER_TYPE_MDATA) { + if (mesh && BKE_mesh_wrapper_type(mesh) == ME_WRAPPER_TYPE_MDATA) { BLI_assert(mesh->totvert == verts_num); } diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c index 8f4a675b797..dcb4803b08a 100644 --- a/source/blender/modifiers/intern/MOD_cloth.c +++ b/source/blender/modifiers/intern/MOD_cloth.c @@ -147,9 +147,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte DEG_add_depends_on_transform_relation(ctx->node, "Cloth Modifier"); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { ClothModifierData *clmd = (ClothModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c index e38bf96500e..82faf08b349 100644 --- a/source/blender/modifiers/intern/MOD_collision.c +++ b/source/blender/modifiers/intern/MOD_collision.c @@ -149,7 +149,7 @@ static void deformVerts(ModifierData *md, for (uint i = 0; i < mvert_num; i++) { /* we save global positions */ - mul_m4_v3(ob->obmat, collmd->x[i].co); + mul_m4_v3(ob->object_to_world, collmd->x[i].co); } collmd->xnew = MEM_dupallocN(collmd->x); /* Frame end position. */ @@ -188,7 +188,7 @@ static void deformVerts(ModifierData *md, for (uint i = 0; i < mvert_num; i++) { /* we save global positions */ - mul_m4_v3(ob->obmat, collmd->xnew[i].co); + mul_m4_v3(ob->object_to_world, collmd->xnew[i].co); /* detect motion */ is_static = is_static && equals_v3v3(collmd->x[i].co, collmd->xnew[i].co); diff --git a/source/blender/modifiers/intern/MOD_correctivesmooth.c b/source/blender/modifiers/intern/MOD_correctivesmooth.c index 16f2205796c..5a9f7c657eb 100644 --- a/source/blender/modifiers/intern/MOD_correctivesmooth.c +++ b/source/blender/modifiers/intern/MOD_correctivesmooth.c @@ -49,10 +49,10 @@ #include "PIL_time.h" #ifdef DEBUG_TIME # include "PIL_time_utildefines.h" + #endif -/* minor optimization, calculate this inline */ -#define USE_TANGENT_CALC_INLINE +#include "BLI_strict_flags.h" static void initData(ModifierData *md) { @@ -65,8 +65,6 @@ static void initData(ModifierData *md) csmd->delta_cache.deltas = NULL; } -#include "BLI_strict_flags.h" - static void copyData(const ModifierData *md, ModifierData *target, const int flag) { const CorrectiveSmoothModifierData *csmd = (const CorrectiveSmoothModifierData *)md; @@ -79,7 +77,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla } tcsmd->delta_cache.deltas = NULL; - tcsmd->delta_cache.totverts = 0; + tcsmd->delta_cache.deltas_num = 0; } static void freeBind(CorrectiveSmoothModifierData *csmd) @@ -96,9 +94,7 @@ static void freeData(ModifierData *md) freeBind(csmd); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { CorrectiveSmoothModifierData *csmd = (CorrectiveSmoothModifierData *)md; @@ -134,25 +130,24 @@ static void mesh_get_boundaries(Mesh *mesh, float *smooth_weights) const MEdge *medge = BKE_mesh_edges(mesh); const MPoly *mpoly = BKE_mesh_polys(mesh); const MLoop *mloop = BKE_mesh_loops(mesh); - uint mpoly_num, medge_num, i; - ushort *boundaries; - mpoly_num = (uint)mesh->totpoly; - medge_num = (uint)mesh->totedge; + const uint mpoly_num = (uint)mesh->totpoly; + const uint medge_num = (uint)mesh->totedge; - boundaries = MEM_calloc_arrayN(medge_num, sizeof(*boundaries), __func__); + /* Flag boundary edges so only boundaries are set to 1. */ + uint8_t *boundaries = MEM_calloc_arrayN(medge_num, sizeof(*boundaries), __func__); - /* count the number of adjacent faces */ - for (i = 0; i < mpoly_num; i++) { + for (uint i = 0; i < mpoly_num; i++) { const MPoly *p = &mpoly[i]; const int totloop = p->totloop; int j; for (j = 0; j < totloop; j++) { - boundaries[mloop[p->loopstart + j].e]++; + uint8_t *e_value = &boundaries[mloop[p->loopstart + j].e]; + *e_value |= (uint8_t)((*e_value) + 1); } } - for (i = 0; i < medge_num; i++) { + for (uint i = 0; i < medge_num; i++) { if (boundaries[i] == 1) { smooth_weights[medge[i].v1] = 0.0f; smooth_weights[medge[i].v2] = 0.0f; @@ -393,69 +388,61 @@ static void smooth_verts(CorrectiveSmoothModifierData *csmd, } /** - * finalize after accumulation. + * Calculate an orthogonal 3x3 matrix from 2 edge vectors. + * \return false if this loop should be ignored (have zero influence). */ -static void calc_tangent_ortho(float ts[3][3]) +static bool calc_tangent_loop(const float v_dir_prev[3], + const float v_dir_next[3], + float r_tspace[3][3]) { - float v_tan_a[3], v_tan_b[3]; - float t_vec_a[3], t_vec_b[3]; - - normalize_v3(ts[2]); - - copy_v3_v3(v_tan_a, ts[0]); - copy_v3_v3(v_tan_b, ts[1]); - - cross_v3_v3v3(ts[1], ts[2], v_tan_a); - mul_v3_fl(ts[1], dot_v3v3(ts[1], v_tan_b) < 0.0f ? -1.0f : 1.0f); - - /* Orthogonalize tangent. */ - mul_v3_v3fl(t_vec_a, ts[2], dot_v3v3(ts[2], v_tan_a)); - sub_v3_v3v3(ts[0], v_tan_a, t_vec_a); - - /* Orthogonalize bi-tangent. */ - mul_v3_v3fl(t_vec_a, ts[2], dot_v3v3(ts[2], ts[1])); - mul_v3_v3fl(t_vec_b, ts[0], dot_v3v3(ts[0], ts[1]) / dot_v3v3(v_tan_a, v_tan_a)); - sub_v3_v3(ts[1], t_vec_a); - sub_v3_v3(ts[1], t_vec_b); - - normalize_v3(ts[0]); - normalize_v3(ts[1]); + if (UNLIKELY(compare_v3v3(v_dir_prev, v_dir_next, FLT_EPSILON * 10.0f))) { + /* As there are no weights, the value doesn't matter just initialize it. */ + unit_m3(r_tspace); + return false; + } + + copy_v3_v3(r_tspace[0], v_dir_prev); + copy_v3_v3(r_tspace[1], v_dir_next); + + cross_v3_v3v3(r_tspace[2], v_dir_prev, v_dir_next); + normalize_v3(r_tspace[2]); + + /* Make orthogonal using `r_tspace[2]` as a basis. + * + * NOTE: while it seems more logical to use `v_dir_prev` & `v_dir_next` as separate X/Y axis + * (instead of combining them as is done here). It's not necessary as the directions of the + * axis aren't important as long as the difference between tangent matrices is equivalent. + * Some computations can be skipped by combining the two directions, + * using the cross product for the 3rd axes. */ + add_v3_v3(r_tspace[0], r_tspace[1]); + normalize_v3(r_tspace[0]); + cross_v3_v3v3(r_tspace[1], r_tspace[2], r_tspace[0]); + + return true; } /** - * accumulate edge-vectors from all polys. + * \param r_tangent_spaces: Loop aligned array of tangents. + * \param r_tangent_weights: Loop aligned array of weights (may be NULL). + * \param r_tangent_weights_per_vertex: Vertex aligned array, accumulating weights for each loop + * (may be NULL). */ -static void calc_tangent_loop_accum(const float v_dir_prev[3], - const float v_dir_next[3], - float r_tspace[3][3]) -{ - add_v3_v3v3(r_tspace[1], v_dir_prev, v_dir_next); - - if (compare_v3v3(v_dir_prev, v_dir_next, FLT_EPSILON * 10.0f) == false) { - const float weight = fabsf(acosf(dot_v3v3(v_dir_next, v_dir_prev))); - float nor[3]; - - cross_v3_v3v3(nor, v_dir_prev, v_dir_next); - normalize_v3(nor); - - cross_v3_v3v3(r_tspace[0], r_tspace[1], nor); - - mul_v3_fl(nor, weight); - /* accumulate weighted normals */ - add_v3_v3(r_tspace[2], nor); - } -} - -static void calc_tangent_spaces(Mesh *mesh, float (*vertexCos)[3], float (*r_tangent_spaces)[3][3]) +static void calc_tangent_spaces(const Mesh *mesh, + const float (*vertexCos)[3], + float (*r_tangent_spaces)[3][3], + float *r_tangent_weights, + float *r_tangent_weights_per_vertex) { const uint mpoly_num = (uint)mesh->totpoly; -#ifndef USE_TANGENT_CALC_INLINE - const uint mvert_num = (uint)dm->getNumVerts(dm); -#endif + const uint mvert_num = (uint)mesh->totvert; const MPoly *mpoly = BKE_mesh_polys(mesh); const MLoop *mloop = BKE_mesh_loops(mesh); uint i; + if (r_tangent_weights_per_vertex != NULL) { + copy_vn_fl(r_tangent_weights_per_vertex, (int)mvert_num, 0.0f); + } + for (i = 0; i < mpoly_num; i++) { const MPoly *mp = &mpoly[i]; const MLoop *l_next = &mloop[mp->loopstart]; @@ -471,7 +458,8 @@ static void calc_tangent_spaces(Mesh *mesh, float (*vertexCos)[3], float (*r_tan normalize_v3(v_dir_prev); for (; l_next != l_term; l_prev = l_curr, l_curr = l_next, l_next++) { - float(*ts)[3] = r_tangent_spaces[l_curr->v]; + uint l_index = (uint)(l_curr - mloop); + float(*ts)[3] = r_tangent_spaces[l_index]; /* re-use the previous value */ #if 0 @@ -481,19 +469,22 @@ static void calc_tangent_spaces(Mesh *mesh, float (*vertexCos)[3], float (*r_tan sub_v3_v3v3(v_dir_next, vertexCos[l_curr->v], vertexCos[l_next->v]); normalize_v3(v_dir_next); - calc_tangent_loop_accum(v_dir_prev, v_dir_next, ts); + if (calc_tangent_loop(v_dir_prev, v_dir_next, ts)) { + if (r_tangent_weights != NULL) { + const float weight = fabsf(acosf(dot_v3v3(v_dir_next, v_dir_prev))); + r_tangent_weights[l_index] = weight; + r_tangent_weights_per_vertex[l_curr->v] += weight; + } + } + else { + if (r_tangent_weights != NULL) { + r_tangent_weights[l_index] = 0; + } + } copy_v3_v3(v_dir_prev, v_dir_next); } } - - /* do inline */ -#ifndef USE_TANGENT_CALC_INLINE - for (i = 0; i < mvert_num; i++) { - float(*ts)[3] = r_tangent_spaces[i]; - calc_tangent_ortho(ts); - } -#endif } static void store_cache_settings(CorrectiveSmoothModifierData *csmd) @@ -524,38 +515,42 @@ static void calc_deltas(CorrectiveSmoothModifierData *csmd, const float (*rest_coords)[3], uint verts_num) { + const MLoop *mloop = BKE_mesh_loops(mesh); + const uint loops_num = (uint)mesh->totloop; + float(*smooth_vertex_coords)[3] = MEM_dupallocN(rest_coords); float(*tangent_spaces)[3][3]; - uint i; - tangent_spaces = MEM_calloc_arrayN(verts_num, sizeof(float[3][3]), __func__); + uint l_index; - if (csmd->delta_cache.totverts != verts_num) { + tangent_spaces = MEM_malloc_arrayN(loops_num, sizeof(float[3][3]), __func__); + + if (csmd->delta_cache.deltas_num != loops_num) { MEM_SAFE_FREE(csmd->delta_cache.deltas); } /* allocate deltas if they have not yet been allocated, otherwise we will just write over them */ if (!csmd->delta_cache.deltas) { - csmd->delta_cache.totverts = verts_num; - csmd->delta_cache.deltas = MEM_malloc_arrayN(verts_num, sizeof(float[3]), __func__); + csmd->delta_cache.deltas_num = loops_num; + csmd->delta_cache.deltas = MEM_malloc_arrayN(loops_num, sizeof(float[3]), __func__); } smooth_verts(csmd, mesh, dvert, defgrp_index, smooth_vertex_coords, verts_num); - calc_tangent_spaces(mesh, smooth_vertex_coords, tangent_spaces); + calc_tangent_spaces(mesh, smooth_vertex_coords, tangent_spaces, NULL, NULL); - for (i = 0; i < verts_num; i++) { - float imat[3][3], delta[3]; + copy_vn_fl(&csmd->delta_cache.deltas[0][0], (int)loops_num * 3, 0.0f); -#ifdef USE_TANGENT_CALC_INLINE - calc_tangent_ortho(tangent_spaces[i]); -#endif + for (l_index = 0; l_index < loops_num; l_index++) { + const int v_index = (int)mloop[l_index].v; + float delta[3]; + sub_v3_v3v3(delta, rest_coords[v_index], smooth_vertex_coords[v_index]); - sub_v3_v3v3(delta, rest_coords[i], smooth_vertex_coords[i]); - if (UNLIKELY(!invert_m3_m3(imat, tangent_spaces[i]))) { - transpose_m3_m3(imat, tangent_spaces[i]); + float imat[3][3]; + if (UNLIKELY(!invert_m3_m3(imat, tangent_spaces[l_index]))) { + transpose_m3_m3(imat, tangent_spaces[l_index]); } - mul_v3_m3v3(csmd->delta_cache.deltas[i], imat, delta); + mul_v3_m3v3(csmd->delta_cache.deltas[l_index], imat, delta); } MEM_freeN(tangent_spaces); @@ -578,6 +573,9 @@ static void correctivesmooth_modifier_do(ModifierData *md, ((csmd->rest_source == MOD_CORRECTIVESMOOTH_RESTSOURCE_ORCO) && (((ID *)ob->data)->recalc & ID_RECALC_ALL)); + const MLoop *mloop = BKE_mesh_loops(mesh); + const uint loops_num = (uint)mesh->totloop; + bool use_only_smooth = (csmd->flag & MOD_CORRECTIVESMOOTH_ONLY_SMOOTH) != 0; const MDeformVert *dvert = NULL; int defgrp_index; @@ -640,7 +638,7 @@ static void correctivesmooth_modifier_do(ModifierData *md, } /* check to see if our deltas are still valid */ - if (!csmd->delta_cache.deltas || (csmd->delta_cache.totverts != verts_num) || + if (!csmd->delta_cache.deltas || (csmd->delta_cache.deltas_num != loops_num) || force_delta_cache_update) { const float(*rest_coords)[3]; bool is_rest_coords_alloc = false; @@ -688,27 +686,38 @@ static void correctivesmooth_modifier_do(ModifierData *md, smooth_verts(csmd, mesh, dvert, defgrp_index, vertexCos, verts_num); { - uint i; + uint l_index; float(*tangent_spaces)[3][3]; + float *tangent_weights; + + float *tangent_weights_per_vertex; const float scale = csmd->scale; - /* calloc, since values are accumulated */ - tangent_spaces = MEM_calloc_arrayN(verts_num, sizeof(float[3][3]), __func__); - calc_tangent_spaces(mesh, vertexCos, tangent_spaces); + tangent_spaces = MEM_malloc_arrayN(loops_num, sizeof(float[3][3]), __func__); + tangent_weights = MEM_malloc_arrayN(loops_num, sizeof(float), __func__); + tangent_weights_per_vertex = MEM_malloc_arrayN(verts_num, sizeof(float), __func__); - for (i = 0; i < verts_num; i++) { - float delta[3]; + calc_tangent_spaces( + mesh, vertexCos, tangent_spaces, tangent_weights, tangent_weights_per_vertex); -#ifdef USE_TANGENT_CALC_INLINE - calc_tangent_ortho(tangent_spaces[i]); -#endif + for (l_index = 0; l_index < loops_num; l_index++) { + const uint v_index = mloop[l_index].v; + const float weight = tangent_weights[l_index] / tangent_weights_per_vertex[v_index]; + if (UNLIKELY(!(weight > 0.0f))) { + /* Catches zero & divide by zero. */ + continue; + } - mul_v3_m3v3(delta, tangent_spaces[i], csmd->delta_cache.deltas[i]); - madd_v3_v3fl(vertexCos[i], delta, scale); + float delta[3]; + mul_v3_m3v3(delta, tangent_spaces[l_index], csmd->delta_cache.deltas[l_index]); + mul_v3_fl(delta, weight); + madd_v3_v3fl(vertexCos[v_index], delta, scale); } MEM_freeN(tangent_spaces); + MEM_freeN(tangent_weights); + MEM_freeN(tangent_weights_per_vertex); } #ifdef DEBUG_TIME @@ -720,7 +729,7 @@ static void correctivesmooth_modifier_do(ModifierData *md, /* when the modifier fails to execute */ error: MEM_SAFE_FREE(csmd->delta_cache.deltas); - csmd->delta_cache.totverts = 0; + csmd->delta_cache.deltas_num = 0; } static void deformVerts(ModifierData *md, @@ -829,7 +838,7 @@ static void blendRead(BlendDataReader *reader, ModifierData *md) /* runtime only */ csmd->delta_cache.deltas = NULL; - csmd->delta_cache.totverts = 0; + csmd->delta_cache.deltas_num = 0; } ModifierTypeInfo modifierType_CorrectiveSmooth = { diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c index 2043c1096c1..16c97d486da 100644 --- a/source/blender/modifiers/intern/MOD_curve.c +++ b/source/blender/modifiers/intern/MOD_curve.c @@ -51,9 +51,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(cmd, DNA_struct_default_get(CurveModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { CurveModifierData *cmd = (CurveModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_datatransfer.c b/source/blender/modifiers/intern/MOD_datatransfer.cc index 2d917310818..25e8eb8fa20 100644 --- a/source/blender/modifiers/intern/MOD_datatransfer.c +++ b/source/blender/modifiers/intern/MOD_datatransfer.cc @@ -50,7 +50,7 @@ static void initData(ModifierData *md) DataTransferModifierData *dtmd = (DataTransferModifierData *)md; int i; - dtmd->ob_source = NULL; + dtmd->ob_source = nullptr; dtmd->data_types = 0; dtmd->vmap_mode = MREMAP_MODE_VERT_NEAREST; @@ -73,9 +73,7 @@ static void initData(ModifierData *md) dtmd->flags = MOD_DATATRANSFER_OBSRC_TRANSFORM; } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { DataTransferModifierData *dtmd = (DataTransferModifierData *)md; @@ -117,7 +115,7 @@ static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *u static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx) { DataTransferModifierData *dtmd = (DataTransferModifierData *)md; - if (dtmd->ob_source != NULL) { + if (dtmd->ob_source != nullptr) { CustomData_MeshMasks cddata_masks = {0}; BKE_object_data_transfer_dttypes_to_cdmask(dtmd->data_types, &cddata_masks); BKE_mesh_remap_calc_source_cddata_masks_from_map_modes( @@ -135,9 +133,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } -static bool isDisabled(const struct Scene *UNUSED(scene), - ModifierData *md, - bool UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene * /*scene*/, ModifierData *md, bool /*useRenderParams*/) { /* If no source object, bypass. */ DataTransferModifierData *dtmd = (DataTransferModifierData *)md; @@ -161,7 +157,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * ReportList reports; /* Only used to check whether we are operating on org data or not... */ - Mesh *me = ctx->object->data; + const Mesh *me = static_cast<const Mesh *>(ctx->object->data); Object *ob_source = dtmd->ob_source; @@ -173,7 +169,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * SpaceTransform space_transform_data; SpaceTransform *space_transform = (dtmd->flags & MOD_DATATRANSFER_OBSRC_TRANSFORM) ? &space_transform_data : - NULL; + nullptr; if (space_transform) { BLI_SPACE_TRANSFORM_SETUP(space_transform, ctx->object, ob_source); @@ -188,7 +184,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * (dtmd->data_types & DT_TYPES_AFFECT_MESH)) { /* We need to duplicate data here, otherwise setting custom normals, edges' sharpness, etc., * could modify org mesh, see T43671. */ - result = (Mesh *)BKE_id_copy_ex(NULL, &me_mod->id, NULL, LIB_ID_COPY_LOCALIZE); + result = (Mesh *)BKE_id_copy_ex(nullptr, &me_mod->id, nullptr, LIB_ID_COPY_LOCALIZE); } BKE_reports_init(&reports, RPT_STORE); @@ -217,7 +213,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * dtmd->defgrp_name, invert_vgroup, &reports)) { - result->runtime.is_original_bmesh = false; + result->runtime->is_original_bmesh = false; } if (BKE_reports_contain(&reports, RPT_ERROR)) { @@ -233,7 +229,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * return result; } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *sub, *row; uiLayout *layout = panel->layout; @@ -249,7 +245,7 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetPropDecorate(sub, false); uiItemR(sub, ptr, "use_object_transform", 0, "", ICON_ORIENTATION_GLOBAL); - uiItemR(layout, ptr, "mix_mode", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "mix_mode", 0, nullptr, ICON_NONE); row = uiLayoutRow(layout, false); uiLayoutSetActive(row, @@ -257,44 +253,44 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) CDT_MIX_NOMIX, CDT_MIX_REPLACE_ABOVE_THRESHOLD, CDT_MIX_REPLACE_BELOW_THRESHOLD)); - uiItemR(row, ptr, "mix_factor", 0, NULL, ICON_NONE); + uiItemR(row, ptr, "mix_factor", 0, nullptr, ICON_NONE); - modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", NULL); + modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", nullptr); uiItemO(layout, IFACE_("Generate Data Layers"), ICON_NONE, "OBJECT_OT_datalayout_transfer"); modifier_panel_end(layout, ptr); } -static void vertex_panel_draw_header(const bContext *UNUSED(C), Panel *panel) +static void vertex_panel_draw_header(const bContext * /*C*/, Panel *panel) { - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayout *layout = panel->layout; - uiItemR(layout, ptr, "use_vert_data", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "use_vert_data", 0, nullptr, ICON_NONE); } -static void vertex_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void vertex_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); bool use_vert_data = RNA_boolean_get(ptr, "use_vert_data"); uiLayoutSetActive(layout, use_vert_data); - uiItemR(layout, ptr, "data_types_verts", UI_ITEM_R_EXPAND, NULL, ICON_NONE); + uiItemR(layout, ptr, "data_types_verts", UI_ITEM_R_EXPAND, nullptr, ICON_NONE); uiLayoutSetPropSep(layout, true); uiItemR(layout, ptr, "vert_mapping", 0, IFACE_("Mapping"), ICON_NONE); } -static void vertex_vgroup_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void vertex_vgroup_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetActive(layout, RNA_enum_get(ptr, "data_types_verts") & DT_TYPE_MDEFORMVERT); @@ -304,59 +300,59 @@ static void vertex_vgroup_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(layout, ptr, "layers_vgroup_select_dst", 0, IFACE_("Layer Mapping"), ICON_NONE); } -static void edge_panel_draw_header(const bContext *UNUSED(C), Panel *panel) +static void edge_panel_draw_header(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); - uiItemR(layout, ptr, "use_edge_data", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "use_edge_data", 0, nullptr, ICON_NONE); } -static void edge_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void edge_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetActive(layout, RNA_boolean_get(ptr, "use_edge_data")); - uiItemR(layout, ptr, "data_types_edges", UI_ITEM_R_EXPAND, NULL, ICON_NONE); + uiItemR(layout, ptr, "data_types_edges", UI_ITEM_R_EXPAND, nullptr, ICON_NONE); uiLayoutSetPropSep(layout, true); uiItemR(layout, ptr, "edge_mapping", 0, IFACE_("Mapping"), ICON_NONE); } -static void face_corner_panel_draw_header(const bContext *UNUSED(C), Panel *panel) +static void face_corner_panel_draw_header(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); - uiItemR(layout, ptr, "use_loop_data", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "use_loop_data", 0, nullptr, ICON_NONE); } -static void face_corner_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void face_corner_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetActive(layout, RNA_boolean_get(ptr, "use_loop_data")); - uiItemR(layout, ptr, "data_types_loops", UI_ITEM_R_EXPAND, NULL, ICON_NONE); + uiItemR(layout, ptr, "data_types_loops", UI_ITEM_R_EXPAND, nullptr, ICON_NONE); uiLayoutSetPropSep(layout, true); uiItemR(layout, ptr, "loop_mapping", 0, IFACE_("Mapping"), ICON_NONE); } -static void vert_vcol_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void vert_vcol_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetPropSep(layout, true); @@ -368,11 +364,11 @@ static void vert_vcol_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(layout, ptr, "layers_vcol_vert_select_dst", 0, IFACE_("Layer Mapping"), ICON_NONE); } -static void face_corner_vcol_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void face_corner_vcol_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetPropSep(layout, true); @@ -384,11 +380,11 @@ static void face_corner_vcol_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(layout, ptr, "layers_vcol_loop_select_dst", 0, IFACE_("Layer Mapping"), ICON_NONE); } -static void face_corner_uv_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void face_corner_uv_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetPropSep(layout, true); @@ -396,39 +392,39 @@ static void face_corner_uv_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(layout, ptr, "layers_uv_select_src", 0, IFACE_("Layer Selection"), ICON_NONE); uiItemR(layout, ptr, "layers_uv_select_dst", 0, IFACE_("Layer Mapping"), ICON_NONE); - uiItemR(layout, ptr, "islands_precision", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "islands_precision", 0, nullptr, ICON_NONE); } -static void face_panel_draw_header(const bContext *UNUSED(C), Panel *panel) +static void face_panel_draw_header(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); - uiItemR(layout, ptr, "use_poly_data", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "use_poly_data", 0, nullptr, ICON_NONE); } -static void face_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void face_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetActive(layout, RNA_boolean_get(ptr, "use_poly_data")); - uiItemR(layout, ptr, "data_types_polys", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "data_types_polys", 0, nullptr, ICON_NONE); uiLayoutSetPropSep(layout, true); uiItemR(layout, ptr, "poly_mapping", 0, IFACE_("Mapping"), ICON_NONE); } -static void advanced_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void advanced_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *row, *sub; uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetPropSep(layout, true); @@ -438,7 +434,7 @@ static void advanced_panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetActive(sub, RNA_boolean_get(ptr, "use_max_distance")); uiItemR(sub, ptr, "max_distance", 0, "", ICON_NONE); - uiItemR(layout, ptr, "ray_radius", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "ray_radius", 0, nullptr, ICON_NONE); } static void panelRegister(ARegionType *region_type) @@ -447,11 +443,15 @@ static void panelRegister(ARegionType *region_type) region_type, eModifierType_DataTransfer, panel_draw); PanelType *vertex_panel = modifier_subpanel_register( region_type, "vertex", "", vertex_panel_draw_header, vertex_panel_draw, panel_type); - modifier_subpanel_register( - region_type, "vertex_vgroup", "Vertex Groups", NULL, vertex_vgroup_panel_draw, vertex_panel); + modifier_subpanel_register(region_type, + "vertex_vgroup", + "Vertex Groups", + nullptr, + vertex_vgroup_panel_draw, + vertex_panel); modifier_subpanel_register( - region_type, "vert_vcol", "Colors", NULL, vert_vcol_panel_draw, vertex_panel); + region_type, "vert_vcol", "Colors", nullptr, vert_vcol_panel_draw, vertex_panel); modifier_subpanel_register( region_type, "edge", "", edge_panel_draw_header, edge_panel_draw, panel_type); @@ -465,16 +465,16 @@ static void panelRegister(ARegionType *region_type) modifier_subpanel_register(region_type, "face_corner_vcol", "Colors", - NULL, + nullptr, face_corner_vcol_panel_draw, face_corner_panel); modifier_subpanel_register( - region_type, "face_corner_uv", "UVs", NULL, face_corner_uv_panel_draw, face_corner_panel); + region_type, "face_corner_uv", "UVs", nullptr, face_corner_uv_panel_draw, face_corner_panel); modifier_subpanel_register( region_type, "face", "", face_panel_draw_header, face_panel_draw, panel_type); modifier_subpanel_register( - region_type, "advanced", "Topology Mapping", NULL, advanced_panel_draw, panel_type); + region_type, "advanced", "Topology Mapping", nullptr, advanced_panel_draw, panel_type); } #undef DT_TYPES_AFFECT_MESH @@ -491,24 +491,24 @@ ModifierTypeInfo modifierType_DataTransfer = { /* copyData */ BKE_modifier_copydata_generic, - /* deformVerts */ NULL, - /* deformMatrices */ NULL, - /* deformVertsEM */ NULL, - /* deformMatricesEM */ NULL, + /* deformVerts */ nullptr, + /* deformMatrices */ nullptr, + /* deformVertsEM */ nullptr, + /* deformMatricesEM */ nullptr, /* modifyMesh */ modifyMesh, - /* modifyGeometrySet */ NULL, + /* modifyGeometrySet */ nullptr, /* initData */ initData, /* requiredDataMask */ requiredDataMask, - /* freeData */ NULL, + /* freeData */ nullptr, /* isDisabled */ isDisabled, /* updateDepsgraph */ updateDepsgraph, - /* dependsOnTime */ NULL, + /* dependsOnTime */ nullptr, /* dependsOnNormals */ dependsOnNormals, /* foreachIDLink */ foreachIDLink, - /* foreachTexLink */ NULL, - /* freeRuntimeData */ NULL, + /* foreachTexLink */ nullptr, + /* freeRuntimeData */ nullptr, /* panelRegister */ panelRegister, - /* blendWrite */ NULL, - /* blendRead */ NULL, + /* blendWrite */ nullptr, + /* blendRead */ nullptr, }; diff --git a/source/blender/modifiers/intern/MOD_decimate.c b/source/blender/modifiers/intern/MOD_decimate.c index 1615fb28007..059ded4f873 100644 --- a/source/blender/modifiers/intern/MOD_decimate.c +++ b/source/blender/modifiers/intern/MOD_decimate.c @@ -54,9 +54,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(dmd, DNA_struct_default_get(DecimateModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { DecimateModifierData *dmd = (DecimateModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c index ddaea289246..fc12a9c2aad 100644 --- a/source/blender/modifiers/intern/MOD_displace.c +++ b/source/blender/modifiers/intern/MOD_displace.c @@ -59,9 +59,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(dmd, DNA_struct_default_get(DisplaceModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { DisplaceModifierData *dmd = (DisplaceModifierData *)md; @@ -324,7 +322,7 @@ static void displaceModifier_do(DisplaceModifierData *dmd, } else if (ELEM(direction, MOD_DISP_DIR_X, MOD_DISP_DIR_Y, MOD_DISP_DIR_Z, MOD_DISP_DIR_RGB_XYZ) && use_global_direction) { - copy_m4_m4(local_mat, ob->obmat); + copy_m4_m4(local_mat, ob->object_to_world); } DisplaceUserdata data = {NULL}; diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c index c23367f9b9b..c19c231d44c 100644 --- a/source/blender/modifiers/intern/MOD_dynamicpaint.c +++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c @@ -74,9 +74,7 @@ static void freeData(ModifierData *md) dynamicPaint_Modifier_free(pmd); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c index c8f1ef73d5e..b0806fed91c 100644 --- a/source/blender/modifiers/intern/MOD_explode.c +++ b/source/blender/modifiers/intern/MOD_explode.c @@ -5,6 +5,8 @@ * \ingroup modifiers */ +#define DNA_DEPRECATED_ALLOW /* For #ME_FACE_SEL. */ + #include "BLI_utildefines.h" #include "BLI_edgehash.h" @@ -76,9 +78,7 @@ static bool dependsOnTime(struct Scene *UNUSED(scene), ModifierData *UNUSED(md)) { return true; } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { ExplodeModifierData *emd = (ExplodeModifierData *)md; @@ -985,9 +985,9 @@ static Mesh *explodeMesh(ExplodeModifierData *emd, MTFace *mtface = CustomData_get_layer_named(&explode->fdata, CD_MTFACE, emd->uvname); /* getting back to object space */ - invert_m4_m4(imat, ctx->object->obmat); + invert_m4_m4(imat, ctx->object->object_to_world); - psmd->psys->lattice_deform_data = psys_create_lattice_deform_data(&sim); + psys_sim_data_init(&sim); const MVert *mesh_verts = BKE_mesh_verts(mesh); MVert *explode_verts = BKE_mesh_verts_for_write(explode); @@ -1020,7 +1020,7 @@ static Mesh *explodeMesh(ExplodeModifierData *emd, psys_get_particle_state(&sim, ed_v2, &state, 1); vertco = explode_verts[v].co; - mul_m4_v3(ctx->object->obmat, vertco); + mul_m4_v3(ctx->object->object_to_world, vertco); sub_v3_v3(vertco, birth.co); @@ -1112,10 +1112,7 @@ static Mesh *explodeMesh(ExplodeModifierData *emd, BKE_mesh_calc_edges_tessface(explode); BKE_mesh_convert_mfaces_to_mpolys(explode); - if (psmd->psys->lattice_deform_data) { - BKE_lattice_deform_data_destroy(psmd->psys->lattice_deform_data); - psmd->psys->lattice_deform_data = NULL; - } + psys_sim_data_free(&sim); return explode; } diff --git a/source/blender/modifiers/intern/MOD_fluid.c b/source/blender/modifiers/intern/MOD_fluid.c index 3ab6d08ee15..0a2b01fe101 100644 --- a/source/blender/modifiers/intern/MOD_fluid.c +++ b/source/blender/modifiers/intern/MOD_fluid.c @@ -78,9 +78,7 @@ static void freeData(ModifierData *md) #endif /* WITH_FLUID */ } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { FluidModifierData *fmd = (FluidModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c index 1336b896cae..231c65998e0 100644 --- a/source/blender/modifiers/intern/MOD_hook.c +++ b/source/blender/modifiers/intern/MOD_hook.c @@ -68,9 +68,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla thmd->indexar = MEM_dupallocN(hmd->indexar); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { HookModifierData *hmd = (HookModifierData *)md; @@ -340,14 +338,14 @@ static void deformVerts_do(HookModifierData *hmd, /* get world-space matrix of target, corrected for the space the verts are in */ if (hmd->subtarget[0] && pchan) { /* bone target if there's a matching pose-channel */ - mul_m4_m4m4(dmat, ob_target->obmat, pchan->pose_mat); + mul_m4_m4m4(dmat, ob_target->object_to_world, pchan->pose_mat); } else { /* just object target */ - copy_m4_m4(dmat, ob_target->obmat); + copy_m4_m4(dmat, ob_target->object_to_world); } - invert_m4_m4(ob->imat, ob->obmat); - mul_m4_series(hd.mat, ob->imat, dmat, hmd->parentinv); + invert_m4_m4(ob->world_to_object, ob->object_to_world); + mul_m4_series(hd.mat, ob->world_to_object, dmat, hmd->parentinv); /* --- done with 'hd' init --- */ /* Regarding index range checking below. diff --git a/source/blender/modifiers/intern/MOD_laplaciandeform.c b/source/blender/modifiers/intern/MOD_laplaciandeform.c index 479ea25b09e..b2b97bc0d08 100644 --- a/source/blender/modifiers/intern/MOD_laplaciandeform.c +++ b/source/blender/modifiers/intern/MOD_laplaciandeform.c @@ -747,9 +747,7 @@ static bool isDisabled(const struct Scene *UNUSED(scene), return 1; } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { LaplacianDeformModifierData *lmd = (LaplacianDeformModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_laplaciansmooth.c b/source/blender/modifiers/intern/MOD_laplaciansmooth.c index 13193d7eb11..1534708ac72 100644 --- a/source/blender/modifiers/intern/MOD_laplaciansmooth.c +++ b/source/blender/modifiers/intern/MOD_laplaciansmooth.c @@ -66,8 +66,6 @@ struct BLaplacianSystem { }; typedef struct BLaplacianSystem LaplacianSystem; -static void required_data_mask(Object *ob, ModifierData *md, CustomData_MeshMasks *r_cddata_masks); -static bool is_disabled(const struct Scene *scene, ModifierData *md, bool useRenderParams); static float compute_volume(const float center[3], float (*vertexCos)[3], const MPoly *mpoly, @@ -511,9 +509,7 @@ static bool is_disabled(const struct Scene *UNUSED(scene), return 0; } -static void required_data_mask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void required_data_mask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { LaplacianSmoothModifierData *smd = (LaplacianSmoothModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c index 81b60b660c6..ede2d7b581e 100644 --- a/source/blender/modifiers/intern/MOD_lattice.c +++ b/source/blender/modifiers/intern/MOD_lattice.c @@ -47,9 +47,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(lmd, DNA_struct_default_get(LatticeModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { LatticeModifierData *lmd = (LatticeModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_mask.cc b/source/blender/modifiers/intern/MOD_mask.cc index b3ee6a1f4ca..659a1625079 100644 --- a/source/blender/modifiers/intern/MOD_mask.cc +++ b/source/blender/modifiers/intern/MOD_mask.cc @@ -64,9 +64,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(mmd, DNA_struct_default_get(MaskModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *UNUSED(md), - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData * /*md*/, CustomData_MeshMasks *r_cddata_masks) { r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; } @@ -609,7 +607,7 @@ static void add_interpolated_polys_to_new_mesh(const Mesh &src_mesh, cut_edge.v1 = dst_loops[mp_dst.loopstart].v; cut_edge.v2 = cut_dst_loop.v; BLI_assert(cut_edge.v1 != cut_edge.v2); - cut_edge.flag = ME_EDGEDRAW | ME_EDGERENDER; + cut_edge.flag = ME_EDGEDRAW; edge_index++; /* Only handle one of the cuts per iteration. */ @@ -638,7 +636,7 @@ static void add_interpolated_polys_to_new_mesh(const Mesh &src_mesh, * 2. Find edges and polygons only using those vertices. * 3. Create a new mesh that only uses the found vertices, edges and polygons. */ -static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *UNUSED(ctx), Mesh *mesh) +static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext * /*ctx*/, Mesh *mesh) { MaskModifierData *mmd = reinterpret_cast<MaskModifierData *>(md); const bool invert_mask = mmd->flag & MOD_MASK_INV; @@ -652,7 +650,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *UNUSED(ctx) } /* Quick test to see if we can return early. */ - if (!(ELEM(mmd->mode, MOD_MASK_MODE_ARM, MOD_MASK_MODE_VGROUP)) || (mesh->totvert == 0) || + if (!ELEM(mmd->mode, MOD_MASK_MODE_ARM, MOD_MASK_MODE_VGROUP) || (mesh->totvert == 0) || BLI_listbase_is_empty(&mesh->vertex_group_names)) { return mesh; } @@ -781,9 +779,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *UNUSED(ctx) return result; } -static bool isDisabled(const struct Scene *UNUSED(scene), - ModifierData *md, - bool UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene * /*scene*/, ModifierData *md, bool /*useRenderParams*/) { MaskModifierData *mmd = reinterpret_cast<MaskModifierData *>(md); @@ -795,7 +791,7 @@ static bool isDisabled(const struct Scene *UNUSED(scene), return mmd->ob_arm && mmd->ob_arm->type != OB_ARMATURE; } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *sub, *row; uiLayout *layout = panel->layout; diff --git a/source/blender/modifiers/intern/MOD_mesh_to_volume.cc b/source/blender/modifiers/intern/MOD_mesh_to_volume.cc index 0471beadcc1..fa7f0690675 100644 --- a/source/blender/modifiers/intern/MOD_mesh_to_volume.cc +++ b/source/blender/modifiers/intern/MOD_mesh_to_volume.cc @@ -75,7 +75,7 @@ static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *u walk(userData, ob, (ID **)&mvmd->object, IDWALK_CB_NOP); } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; @@ -134,8 +134,8 @@ static Volume *mesh_to_volume(ModifierData *md, } BKE_mesh_wrapper_ensure_mdata(mesh); - const float4x4 mesh_to_own_object_space_transform = float4x4(ctx->object->imat) * - float4x4(object_to_convert->obmat); + const float4x4 mesh_to_own_object_space_transform = float4x4(ctx->object->world_to_object) * + float4x4(object_to_convert->object_to_world); geometry::MeshToVolumeResolution resolution; resolution.mode = (MeshToVolumeModifierResolutionMode)mvmd->resolution_mode; if (resolution.mode == MESH_TO_VOLUME_RESOLUTION_MODE_VOXEL_AMOUNT) { diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c index 04d17cec10d..2aaaee2ccc7 100644 --- a/source/blender/modifiers/intern/MOD_meshdeform.c +++ b/source/blender/modifiers/intern/MOD_meshdeform.c @@ -119,9 +119,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla } } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { MeshDeformModifierData *mmd = (MeshDeformModifierData *)md; @@ -360,8 +358,8 @@ static void meshdeformModifier_do(ModifierData *md, } /* compute matrices to go in and out of cage object space */ - invert_m4_m4(imat, ob_target->obmat); - mul_m4_m4m4(cagemat, imat, ob->obmat); + invert_m4_m4(imat, ob_target->object_to_world); + mul_m4_m4m4(cagemat, imat, ob->object_to_world); mul_m4_m4m4(cmat, mmd->bindmat, cagemat); invert_m4_m4(iobmat, cmat); copy_m3_m4(icagemat, iobmat); diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.cc b/source/blender/modifiers/intern/MOD_meshsequencecache.cc index f30e6a95787..13931179b35 100644 --- a/source/blender/modifiers/intern/MOD_meshsequencecache.cc +++ b/source/blender/modifiers/intern/MOD_meshsequencecache.cc @@ -98,9 +98,7 @@ static void freeData(ModifierData *md) } } -static bool isDisabled(const struct Scene *UNUSED(scene), - ModifierData *md, - bool UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene * /*scene*/, ModifierData *md, bool /*useRenderParams*/) { MeshSeqCacheModifierData *mcmd = reinterpret_cast<MeshSeqCacheModifierData *>(md); @@ -135,7 +133,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); CacheFile *cache_file = mcmd->cache_file; const float frame = DEG_get_ctime(ctx->depsgraph); - const double time = BKE_cachefile_time_offset(cache_file, (double)frame, FPS); + const double time = BKE_cachefile_time_offset(cache_file, double(frame), FPS); const char *err_str = nullptr; if (!mcmd->reader || !STREQ(mcmd->reader_object_path, mcmd->object_path)) { @@ -305,7 +303,7 @@ static void panel_draw(const bContext *C, Panel *panel) modifier_panel_end(layout, ptr); } -static void velocity_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void velocity_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; @@ -322,7 +320,7 @@ static void velocity_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(layout, ptr, "velocity_scale", 0, nullptr, ICON_NONE); } -static void time_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void time_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; @@ -391,7 +389,7 @@ static void panelRegister(ARegionType *region_type) panel_type); } -static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md) +static void blendRead(BlendDataReader * /*reader*/, ModifierData *md) { MeshSeqCacheModifierData *msmcd = reinterpret_cast<MeshSeqCacheModifierData *>(md); msmcd->reader = nullptr; diff --git a/source/blender/modifiers/intern/MOD_multires.c b/source/blender/modifiers/intern/MOD_multires.cc index cdad834f9b4..2bc3763c46b 100644 --- a/source/blender/modifiers/intern/MOD_multires.c +++ b/source/blender/modifiers/intern/MOD_multires.cc @@ -5,7 +5,7 @@ * \ingroup modifiers */ -#include <stddef.h> +#include <cstddef> #include "MEM_guardedalloc.h" @@ -45,10 +45,10 @@ #include "MOD_modifiertypes.h" #include "MOD_ui_common.h" -typedef struct MultiresRuntimeData { +struct MultiresRuntimeData { /* Cached subdivision surface descriptor, with topology and settings. */ struct Subdiv *subdiv; -} MultiresRuntimeData; +}; static void initData(ModifierData *md) { @@ -62,9 +62,7 @@ static void initData(ModifierData *md) md->ui_expand_flag = UI_PANEL_DATA_EXPAND_ROOT | UI_SUBPANEL_DATA_EXPAND_1; } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { MultiresModifierData *mmd = (MultiresModifierData *)md; if (mmd->flags & eMultiresModifierFlag_UseCustomNormals) { @@ -89,11 +87,11 @@ static void copyData(const ModifierData *md_src, ModifierData *md_dst, const int static void freeRuntimeData(void *runtime_data_v) { - if (runtime_data_v == NULL) { + if (runtime_data_v == nullptr) { return; } MultiresRuntimeData *runtime_data = (MultiresRuntimeData *)runtime_data_v; - if (runtime_data->subdiv != NULL) { + if (runtime_data->subdiv != nullptr) { BKE_subdiv_free(runtime_data->subdiv); } MEM_freeN(runtime_data); @@ -108,8 +106,9 @@ static void freeData(ModifierData *md) static MultiresRuntimeData *multires_ensure_runtime(MultiresModifierData *mmd) { MultiresRuntimeData *runtime_data = (MultiresRuntimeData *)mmd->modifier.runtime; - if (runtime_data == NULL) { - runtime_data = MEM_callocN(sizeof(*runtime_data), "subsurf runtime"); + if (runtime_data == nullptr) { + runtime_data = static_cast<MultiresRuntimeData *>( + MEM_callocN(sizeof(*runtime_data), __func__)); mmd->modifier.runtime = runtime_data; } return runtime_data; @@ -191,8 +190,8 @@ static Mesh *multires_as_ccg(MultiresModifierData *mmd, /* NOTE: CCG becomes an owner of Subdiv descriptor, so can not share * this pointer. Not sure if it's needed, but might have a second look * on the ownership model here. */ - MultiresRuntimeData *runtime_data = mmd->modifier.runtime; - runtime_data->subdiv = NULL; + MultiresRuntimeData *runtime_data = static_cast<MultiresRuntimeData *>(mmd->modifier.runtime); + runtime_data->subdiv = nullptr; return result; } @@ -212,8 +211,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } MultiresRuntimeData *runtime_data = multires_ensure_runtime(mmd); Subdiv *subdiv = subdiv_descriptor_ensure(mmd, &subdiv_settings, mesh); - if (subdiv == NULL) { - /* Happens on bad topology, ut also on empty input mesh. */ + if (subdiv == nullptr) { + /* Happens on bad topology, also on empty input mesh. */ return result; } const bool use_clnors = mmd->flags & eMultiresModifierFlag_UseCustomNormals && @@ -231,23 +230,23 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * if ((ctx->object->mode & OB_MODE_SCULPT) && !for_orco && !for_render && !sculpt_base_mesh) { /* NOTE: CCG takes ownership over Subdiv. */ result = multires_as_ccg(mmd, ctx, mesh, subdiv); - result->runtime.subdiv_ccg_tot_level = mmd->totlvl; + result->runtime->subdiv_ccg_tot_level = mmd->totlvl; /* TODO(sergey): Usually it is sculpt stroke's update variants which * takes care of this, but is possible that we need this before the * stroke: i.e. when exiting blender right after stroke is done. * Annoying and not so much black-boxed as far as sculpting goes, and * surely there is a better way of solving this. */ - if (ctx->object->sculpt != NULL) { + if (ctx->object->sculpt != nullptr) { SculptSession *sculpt_session = ctx->object->sculpt; - sculpt_session->subdiv_ccg = result->runtime.subdiv_ccg; + sculpt_session->subdiv_ccg = result->runtime->subdiv_ccg; sculpt_session->multires.active = true; sculpt_session->multires.modifier = mmd; sculpt_session->multires.level = mmd->sculptlvl; sculpt_session->totvert = mesh->totvert; sculpt_session->totpoly = mesh->totpoly; - sculpt_session->mvert = NULL; - sculpt_session->mpoly = NULL; - sculpt_session->mloop = NULL; + sculpt_session->mvert = nullptr; + sculpt_session->mpoly = nullptr; + sculpt_session->mloop = nullptr; } // BKE_subdiv_stats_print(&subdiv->stats); } @@ -262,8 +261,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * result = multires_as_mesh(mmd, ctx, mesh, subdiv); if (use_clnors) { - float(*lnors)[3] = CustomData_get_layer(&result->ldata, CD_NORMAL); - BLI_assert(lnors != NULL); + float(*lnors)[3] = static_cast<float(*)[3]>(CustomData_get_layer(&result->ldata, CD_NORMAL)); + BLI_assert(lnors != nullptr); BKE_mesh_set_custom_normals(result, lnors); CustomData_set_layer_flag(&mesh->ldata, CD_NORMAL, CD_FLAG_TEMPORARY); CustomData_set_layer_flag(&result->ldata, CD_NORMAL, CD_FLAG_TEMPORARY); @@ -308,8 +307,8 @@ static void deformMatrices(ModifierData *md, MultiresRuntimeData *runtime_data = multires_ensure_runtime(mmd); Subdiv *subdiv = subdiv_descriptor_ensure(mmd, &subdiv_settings, mesh); - if (subdiv == NULL) { - /* Happens on bad topology, ut also on empty input mesh. */ + if (subdiv == nullptr) { + /* Happens on bad topology, also on empty input mesh. */ return; } BKE_subdiv_displacement_attach_from_multires(subdiv, mesh, mmd); @@ -324,7 +323,7 @@ static void panel_draw(const bContext *C, Panel *panel) uiLayout *col; uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetPropSep(layout, true); @@ -339,12 +338,12 @@ static void panel_draw(const bContext *C, Panel *panel) uiItemR(col, ptr, "use_sculpt_base_mesh", 0, IFACE_("Sculpt Base Mesh"), ICON_NONE); UI_block_lock_clear(block); - uiItemR(layout, ptr, "show_only_control_edges", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "show_only_control_edges", 0, nullptr, ICON_NONE); modifier_panel_end(layout, ptr); } -static void subdivisions_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void subdivisions_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *row; uiLayout *layout = panel->layout; @@ -372,7 +371,7 @@ static void subdivisions_panel_draw(const bContext *UNUSED(C), Panel *panel) "OBJECT_OT_multires_subdivide", IFACE_("Subdivide"), ICON_NONE, - NULL, + nullptr, WM_OP_EXEC_DEFAULT, 0, &op_ptr); @@ -384,7 +383,7 @@ static void subdivisions_panel_draw(const bContext *UNUSED(C), Panel *panel) "OBJECT_OT_multires_subdivide", IFACE_("Simple"), ICON_NONE, - NULL, + nullptr, WM_OP_EXEC_DEFAULT, 0, &op_ptr); @@ -394,7 +393,7 @@ static void subdivisions_panel_draw(const bContext *UNUSED(C), Panel *panel) "OBJECT_OT_multires_subdivide", IFACE_("Linear"), ICON_NONE, - NULL, + nullptr, WM_OP_EXEC_DEFAULT, 0, &op_ptr); @@ -407,7 +406,7 @@ static void subdivisions_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemO(layout, IFACE_("Delete Higher"), ICON_NONE, "OBJECT_OT_multires_higher_levels_delete"); } -static void shape_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void shape_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *row; uiLayout *layout = panel->layout; @@ -422,12 +421,12 @@ static void shape_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemO(row, IFACE_("Apply Base"), ICON_NONE, "OBJECT_OT_multires_base_apply"); } -static void generate_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void generate_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *col, *row; uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); MultiresModifierData *mmd = (MultiresModifierData *)ptr->data; bool is_external = RNA_boolean_get(ptr, "is_external"); @@ -443,19 +442,19 @@ static void generate_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemO(row, IFACE_("Pack External"), ICON_NONE, "OBJECT_OT_multires_external_pack"); uiLayoutSetPropSep(col, true); row = uiLayoutRow(col, false); - uiItemR(row, ptr, "filepath", 0, NULL, ICON_NONE); + uiItemR(row, ptr, "filepath", 0, nullptr, ICON_NONE); } else { uiItemO(col, IFACE_("Save External..."), ICON_NONE, "OBJECT_OT_multires_external_save"); } } -static void advanced_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void advanced_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *col; uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); bool has_displacement = RNA_int_get(ptr, "total_levels") != 0; @@ -463,27 +462,27 @@ static void advanced_panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetActive(layout, !has_displacement); - uiItemR(layout, ptr, "quality", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "quality", 0, nullptr, ICON_NONE); col = uiLayoutColumn(layout, false); uiLayoutSetActive(col, true); - uiItemR(col, ptr, "uv_smooth", 0, NULL, ICON_NONE); - uiItemR(col, ptr, "boundary_smooth", 0, NULL, ICON_NONE); + uiItemR(col, ptr, "uv_smooth", 0, nullptr, ICON_NONE); + uiItemR(col, ptr, "boundary_smooth", 0, nullptr, ICON_NONE); - uiItemR(layout, ptr, "use_creases", 0, NULL, ICON_NONE); - uiItemR(layout, ptr, "use_custom_normals", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "use_creases", 0, nullptr, ICON_NONE); + uiItemR(layout, ptr, "use_custom_normals", 0, nullptr, ICON_NONE); } static void panelRegister(ARegionType *region_type) { PanelType *panel_type = modifier_panel_register(region_type, eModifierType_Multires, panel_draw); modifier_subpanel_register( - region_type, "subdivide", "Subdivision", NULL, subdivisions_panel_draw, panel_type); - modifier_subpanel_register(region_type, "shape", "Shape", NULL, shape_panel_draw, panel_type); + region_type, "subdivide", "Subdivision", nullptr, subdivisions_panel_draw, panel_type); + modifier_subpanel_register(region_type, "shape", "Shape", nullptr, shape_panel_draw, panel_type); modifier_subpanel_register( - region_type, "generate", "Generate", NULL, generate_panel_draw, panel_type); + region_type, "generate", "Generate", nullptr, generate_panel_draw, panel_type); modifier_subpanel_register( - region_type, "advanced", "Advanced", NULL, advanced_panel_draw, panel_type); + region_type, "advanced", "Advanced", nullptr, advanced_panel_draw, panel_type); } ModifierTypeInfo modifierType_Multires = { @@ -498,24 +497,24 @@ ModifierTypeInfo modifierType_Multires = { /* copyData */ copyData, - /* deformVerts */ NULL, + /* deformVerts */ nullptr, /* deformMatrices */ deformMatrices, - /* deformVertsEM */ NULL, - /* deformMatricesEM */ NULL, + /* deformVertsEM */ nullptr, + /* deformMatricesEM */ nullptr, /* modifyMesh */ modifyMesh, - /* modifyGeometrySet */ NULL, + /* modifyGeometrySet */ nullptr, /* initData */ initData, /* requiredDataMask */ requiredDataMask, /* freeData */ freeData, - /* isDisabled */ NULL, - /* updateDepsgraph */ NULL, - /* dependsOnTime */ NULL, + /* isDisabled */ nullptr, + /* updateDepsgraph */ nullptr, + /* dependsOnTime */ nullptr, /* dependsOnNormals */ dependsOnNormals, - /* foreachIDLink */ NULL, - /* foreachTexLink */ NULL, + /* foreachIDLink */ nullptr, + /* foreachTexLink */ nullptr, /* freeRuntimeData */ freeRuntimeData, /* panelRegister */ panelRegister, - /* blendWrite */ NULL, - /* blendRead */ NULL, + /* blendWrite */ nullptr, + /* blendRead */ nullptr, }; diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index ffd78a90638..15d7e494c04 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -33,6 +33,7 @@ #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" +#include "DNA_view3d_types.h" #include "DNA_windowmanager_types.h" #include "BKE_attribute_math.hh" @@ -80,6 +81,7 @@ #include "ED_screen.h" #include "ED_spreadsheet.h" #include "ED_undo.h" +#include "ED_viewer_path.hh" #include "NOD_geometry.h" #include "NOD_geometry_nodes_lazy_function.hh" @@ -114,7 +116,9 @@ using blender::StringRef; using blender::StringRefNull; using blender::Vector; using blender::bke::AttributeMetaData; +using blender::bke::AttributeValidator; using blender::fn::Field; +using blender::fn::FieldOperation; using blender::fn::GField; using blender::fn::ValueOrField; using blender::fn::ValueOrFieldCPPType; @@ -201,6 +205,9 @@ static bool node_needs_own_transform_relation(const bNode &node) return storage.transform_space == GEO_NODE_TRANSFORM_SPACE_RELATIVE; } + if (node.type == GEO_NODE_SELF_OBJECT) { + return true; + } if (node.type == GEO_NODE_DEFORM_CURVES_ON_SURFACE) { return true; } @@ -342,7 +349,7 @@ static bool check_tree_for_time_node(const bNodeTree &tree, return false; } -static bool dependsOnTime(struct Scene *UNUSED(scene), ModifierData *md) +static bool dependsOnTime(struct Scene * /*scene*/, ModifierData *md) { const NodesModifierData *nmd = reinterpret_cast<NodesModifierData *>(md); const bNodeTree *tree = nmd->node_group; @@ -380,9 +387,7 @@ static void foreachTexLink(ModifierData *md, Object *ob, TexWalkFunc walk, void walk(userData, ob, md, "texture"); } -static bool isDisabled(const struct Scene *UNUSED(scene), - ModifierData *md, - bool UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene * /*scene*/, ModifierData *md, bool /*useRenderParams*/) { NodesModifierData *nmd = reinterpret_cast<NodesModifierData *>(md); @@ -438,8 +443,8 @@ id_property_create_from_socket(const bNodeSocket &socket) auto property = bke::idprop::create(socket.identifier, value->value); IDPropertyUIDataFloat *ui_data = (IDPropertyUIDataFloat *)IDP_ui_data_ensure(property.get()); ui_data->base.rna_subtype = value->subtype; - ui_data->min = ui_data->soft_min = (double)value->min; - ui_data->max = ui_data->soft_max = (double)value->max; + ui_data->min = ui_data->soft_min = double(value->min); + ui_data->max = ui_data->soft_max = double(value->max); ui_data->default_value = value->value; return property; } @@ -461,8 +466,8 @@ id_property_create_from_socket(const bNodeSocket &socket) socket.identifier, Span<float>{value->value[0], value->value[1], value->value[2]}); IDPropertyUIDataFloat *ui_data = (IDPropertyUIDataFloat *)IDP_ui_data_ensure(property.get()); ui_data->base.rna_subtype = value->subtype; - ui_data->min = ui_data->soft_min = (double)value->min; - ui_data->max = ui_data->soft_max = (double)value->max; + ui_data->min = ui_data->soft_min = double(value->min); + ui_data->max = ui_data->soft_max = double(value->max); ui_data->default_array = (double *)MEM_mallocN(sizeof(double[3]), "mod_prop_default"); ui_data->default_array_len = 3; for (const int i : IndexRange(3)) { @@ -574,7 +579,7 @@ static void init_socket_cpp_value_from_property(const IDProperty &property, value = IDP_Float(&property); } else if (property.type == IDP_DOUBLE) { - value = (float)IDP_Double(&property); + value = float(IDP_Double(&property)); } new (r_value) ValueOrField<float>(value); break; @@ -823,25 +828,6 @@ static void initialize_group_input(NodesModifierData &nmd, } } -static Vector<SpaceSpreadsheet *> find_spreadsheet_editors(Main *bmain) -{ - wmWindowManager *wm = (wmWindowManager *)bmain->wm.first; - if (wm == nullptr) { - return {}; - } - Vector<SpaceSpreadsheet *> spreadsheets; - LISTBASE_FOREACH (wmWindow *, window, &wm->windows) { - bScreen *screen = BKE_workspace_active_screen_get(window->workspace_hook); - LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { - SpaceLink *sl = (SpaceLink *)area->spacedata.first; - if (sl->spacetype == SPACE_SPREADSHEET) { - spreadsheets.append((SpaceSpreadsheet *)sl); - } - } - } - return spreadsheets; -} - static const lf::FunctionNode &find_viewer_lf_node(const bNode &viewer_bnode) { return *blender::nodes::ensure_geometry_nodes_lazy_function_graph(viewer_bnode.owner_tree()) @@ -853,50 +839,33 @@ static const lf::FunctionNode &find_group_lf_node(const bNode &group_bnode) ->mapping.group_node_map.lookup(&group_bnode); } -static void find_side_effect_nodes_for_spreadsheet( - const SpaceSpreadsheet &sspreadsheet, +static void find_side_effect_nodes_for_viewer_path( + const ViewerPath &viewer_path, const NodesModifierData &nmd, const ModifierEvalContext &ctx, - const bNodeTree &root_tree, MultiValueMap<blender::ComputeContextHash, const lf::FunctionNode *> &r_side_effect_nodes) { - Vector<SpreadsheetContext *> context_path = sspreadsheet.context_path; - if (context_path.size() < 3) { + const std::optional<blender::ed::viewer_path::ViewerPathForGeometryNodesViewer> parsed_path = + blender::ed::viewer_path::parse_geometry_nodes_viewer(viewer_path); + if (!parsed_path.has_value()) { return; } - if (context_path[0]->type != SPREADSHEET_CONTEXT_OBJECT) { + if (parsed_path->object != DEG_get_original_object(ctx.object)) { return; } - if (context_path[1]->type != SPREADSHEET_CONTEXT_MODIFIER) { + if (parsed_path->modifier_name != nmd.modifier.name) { return; } - SpreadsheetContextObject *object_context = (SpreadsheetContextObject *)context_path[0]; - if (object_context->object != DEG_get_original_object(ctx.object)) { - return; - } - SpreadsheetContextModifier *modifier_context = (SpreadsheetContextModifier *)context_path[1]; - if (StringRef(modifier_context->modifier_name) != nmd.modifier.name) { - return; - } - for (SpreadsheetContext *context : context_path.as_span().drop_front(2)) { - if (context->type != SPREADSHEET_CONTEXT_NODE) { - return; - } - } blender::ComputeContextBuilder compute_context_builder; - compute_context_builder.push<blender::bke::ModifierComputeContext>(nmd.modifier.name); - - const Span<SpreadsheetContextNode *> nested_group_contexts = - context_path.as_span().drop_front(2).drop_back(1).cast<SpreadsheetContextNode *>(); - const SpreadsheetContextNode *last_context = (SpreadsheetContextNode *)context_path.last(); + compute_context_builder.push<blender::bke::ModifierComputeContext>(parsed_path->modifier_name); + const bNodeTree *group = nmd.node_group; Stack<const bNode *> group_node_stack; - const bNodeTree *group = &root_tree; - for (SpreadsheetContextNode *node_context : nested_group_contexts) { + for (const StringRefNull group_node_name : parsed_path->group_node_names) { const bNode *found_node = nullptr; for (const bNode *node : group->group_nodes()) { - if (STREQ(node->name, node_context->node_name)) { + if (node->name == group_node_name) { found_node = node; break; } @@ -907,14 +876,17 @@ static void find_side_effect_nodes_for_spreadsheet( if (found_node->id == nullptr) { return; } + if (found_node->is_muted()) { + return; + } group_node_stack.push(found_node); - group = reinterpret_cast<const bNodeTree *>(found_node->id); - compute_context_builder.push<blender::bke::NodeGroupComputeContext>(node_context->node_name); + group = reinterpret_cast<bNodeTree *>(found_node->id); + compute_context_builder.push<blender::bke::NodeGroupComputeContext>(group_node_name); } const bNode *found_viewer_node = nullptr; for (const bNode *viewer_node : group->nodes_by_type("GeometryNodeViewer")) { - if (STREQ(viewer_node->name, last_context->node_name)) { + if (viewer_node->name == parsed_path->viewer_node_name) { found_viewer_node = viewer_node; break; } @@ -938,16 +910,29 @@ static void find_side_effect_nodes_for_spreadsheet( static void find_side_effect_nodes( const NodesModifierData &nmd, const ModifierEvalContext &ctx, - const bNodeTree &tree, MultiValueMap<blender::ComputeContextHash, const lf::FunctionNode *> &r_side_effect_nodes) { Main *bmain = DEG_get_bmain(ctx.depsgraph); - - /* Based on every visible spreadsheet context path, get a list of sockets that need to have their - * intermediate geometries cached for display. */ - Vector<SpaceSpreadsheet *> spreadsheets = find_spreadsheet_editors(bmain); - for (SpaceSpreadsheet *sspreadsheet : spreadsheets) { - find_side_effect_nodes_for_spreadsheet(*sspreadsheet, nmd, ctx, tree, r_side_effect_nodes); + wmWindowManager *wm = (wmWindowManager *)bmain->wm.first; + if (wm == nullptr) { + return; + } + LISTBASE_FOREACH (const wmWindow *, window, &wm->windows) { + const bScreen *screen = BKE_workspace_active_screen_get(window->workspace_hook); + const WorkSpace *workspace = BKE_workspace_active_get(window->workspace_hook); + find_side_effect_nodes_for_viewer_path(workspace->viewer_path, nmd, ctx, r_side_effect_nodes); + LISTBASE_FOREACH (const ScrArea *, area, &screen->areabase) { + const SpaceLink *sl = static_cast<SpaceLink *>(area->spacedata.first); + if (sl->spacetype == SPACE_SPREADSHEET) { + const SpaceSpreadsheet &sspreadsheet = *reinterpret_cast<const SpaceSpreadsheet *>(sl); + find_side_effect_nodes_for_viewer_path( + sspreadsheet.viewer_path, nmd, ctx, r_side_effect_nodes); + } + if (sl->spacetype == SPACE_VIEW3D) { + const View3D &v3d = *reinterpret_cast<const View3D *>(sl); + find_side_effect_nodes_for_viewer_path(v3d.viewer_path, nmd, ctx, r_side_effect_nodes); + } + } } } @@ -1046,13 +1031,15 @@ static Vector<OutputAttributeToStore> compute_attributes_to_store( blender::fn::FieldEvaluator field_evaluator{field_context, domain_size}; for (const OutputAttributeInfo &output_info : outputs_info) { const CPPType &type = output_info.field.cpp_type(); + const AttributeValidator validator = attributes.lookup_validator(output_info.name); OutputAttributeToStore store{ component_type, domain, output_info.name, GMutableSpan{ type, MEM_malloc_arrayN(domain_size, type.size(), __func__), domain_size}}; - field_evaluator.add_with_destination(output_info.field, store.data); + GField field = validator.validate_field_if_necessary(output_info.field); + field_evaluator.add_with_destination(std::move(field), store.data); attributes_to_store.append(store); } field_evaluator.evaluate(); @@ -1142,8 +1129,7 @@ static GeometrySet compute_geometry( Array<bool> param_set_outputs(graph_outputs.size(), false); blender::nodes::GeometryNodesLazyFunctionLogger lf_logger(lf_graph_info); - blender::nodes::GeometryNodesLazyFunctionSideEffectProvider lf_side_effect_provider( - lf_graph_info); + blender::nodes::GeometryNodesLazyFunctionSideEffectProvider lf_side_effect_provider; lf::GraphExecutor graph_executor{ lf_graph_info.graph, graph_inputs, graph_outputs, &lf_logger, &lf_side_effect_provider}; @@ -1156,7 +1142,7 @@ static GeometrySet compute_geometry( geo_nodes_modifier_data.eval_log = eval_log.get(); } MultiValueMap<blender::ComputeContextHash, const lf::FunctionNode *> r_side_effect_nodes; - find_side_effect_nodes(*nmd, *ctx, btree, r_side_effect_nodes); + find_side_effect_nodes(*nmd, *ctx, r_side_effect_nodes); geo_nodes_modifier_data.side_effect_nodes = &r_side_effect_nodes; blender::nodes::GeoNodesLFUserData user_data; user_data.modifier_data = &geo_nodes_modifier_data; @@ -1556,15 +1542,18 @@ static void add_attribute_search_or_value_buttons(const bContext &C, const std::string rna_path_attribute_name = "[\"" + std::string(socket_id_esc) + attribute_name_suffix + "\"]"; + /* We're handling this manually in this case. */ + uiLayoutSetPropDecorate(layout, false); + uiLayout *split = uiLayoutSplit(layout, 0.4f, false); uiLayout *name_row = uiLayoutRow(split, false); uiLayoutSetAlignment(name_row, UI_LAYOUT_ALIGN_RIGHT); uiItemL(name_row, socket.name, ICON_NONE); - uiLayout *row = uiLayoutRow(split, true); + uiLayout *prop_row = uiLayoutRow(split, true); PointerRNA props; - uiItemFullO(row, + uiItemFullO(prop_row, "object.geometry_nodes_input_attribute_toggle", "", ICON_SPREADSHEET, @@ -1577,12 +1566,12 @@ static void add_attribute_search_or_value_buttons(const bContext &C, const int use_attribute = RNA_int_get(md_ptr, rna_path_use_attribute.c_str()) != 0; if (use_attribute) { - add_attribute_search_button(C, row, nmd, md_ptr, rna_path_attribute_name, socket, false); - uiItemL(row, "", ICON_BLANK1); + add_attribute_search_button(C, prop_row, nmd, md_ptr, rna_path_attribute_name, socket, false); + uiItemL(layout, "", ICON_BLANK1); } else { - uiItemR(row, md_ptr, rna_path.c_str(), 0, "", ICON_NONE); - uiItemDecoratorR(row, md_ptr, rna_path.c_str(), -1); + uiItemR(prop_row, md_ptr, rna_path.c_str(), 0, "", ICON_NONE); + uiItemDecoratorR(layout, md_ptr, rna_path.c_str(), -1); } } @@ -1612,44 +1601,39 @@ static void draw_property_for_socket(const bContext &C, char rna_path[sizeof(socket_id_esc) + 4]; BLI_snprintf(rna_path, ARRAY_SIZE(rna_path), "[\"%s\"]", socket_id_esc); + uiLayout *row = uiLayoutRow(layout, true); + uiLayoutSetPropDecorate(row, true); + /* Use #uiItemPointerR to draw pointer properties because #uiItemR would not have enough * information about what type of ID to select for editing the values. This is because * pointer IDProperties contain no information about their type. */ switch (socket.type) { case SOCK_OBJECT: { - uiItemPointerR( - layout, md_ptr, rna_path, bmain_ptr, "objects", socket.name, ICON_OBJECT_DATA); + uiItemPointerR(row, md_ptr, rna_path, bmain_ptr, "objects", socket.name, ICON_OBJECT_DATA); break; } case SOCK_COLLECTION: { - uiItemPointerR(layout, - md_ptr, - rna_path, - bmain_ptr, - "collections", - socket.name, - ICON_OUTLINER_COLLECTION); + uiItemPointerR( + row, md_ptr, rna_path, bmain_ptr, "collections", socket.name, ICON_OUTLINER_COLLECTION); break; } case SOCK_MATERIAL: { - uiItemPointerR(layout, md_ptr, rna_path, bmain_ptr, "materials", socket.name, ICON_MATERIAL); + uiItemPointerR(row, md_ptr, rna_path, bmain_ptr, "materials", socket.name, ICON_MATERIAL); break; } case SOCK_TEXTURE: { - uiItemPointerR(layout, md_ptr, rna_path, bmain_ptr, "textures", socket.name, ICON_TEXTURE); + uiItemPointerR(row, md_ptr, rna_path, bmain_ptr, "textures", socket.name, ICON_TEXTURE); break; } case SOCK_IMAGE: { - uiItemPointerR(layout, md_ptr, rna_path, bmain_ptr, "images", socket.name, ICON_IMAGE); + uiItemPointerR(row, md_ptr, rna_path, bmain_ptr, "images", socket.name, ICON_IMAGE); break; } default: { if (input_has_attribute_toggle(*nmd->node_group, socket_index)) { - add_attribute_search_or_value_buttons(C, layout, *nmd, md_ptr, socket); + add_attribute_search_or_value_buttons(C, row, *nmd, md_ptr, socket); } else { - uiLayout *row = uiLayoutRow(layout, false); - uiLayoutSetPropDecorate(row, true); uiItemR(row, md_ptr, rna_path, 0, socket.name, ICON_NONE); } } @@ -1748,7 +1732,7 @@ static void output_attribute_panel_draw(const bContext *C, Panel *panel) } } -static void internal_dependencies_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void internal_dependencies_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; @@ -1761,7 +1745,7 @@ static void internal_dependencies_panel_draw(const bContext *UNUSED(C), Panel *p } tree_log->ensure_used_named_attributes(); - const Map<std::string, NamedAttributeUsage> &usage_by_attribute = + const Map<StringRefNull, NamedAttributeUsage> &usage_by_attribute = tree_log->used_named_attributes; if (usage_by_attribute.is_empty()) { @@ -1836,7 +1820,7 @@ static void panelRegister(ARegionType *region_type) panel_type); } -static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID * /*id_owner*/, const ModifierData *md) { const NodesModifierData *nmd = reinterpret_cast<const NodesModifierData *>(md); @@ -1887,9 +1871,7 @@ static void freeData(ModifierData *md) clear_runtime_data(nmd); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *UNUSED(md), - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData * /*md*/, CustomData_MeshMasks *r_cddata_masks) { /* We don't know what the node tree will need. If there are vertex groups, it is likely that the * node tree wants to access them. */ diff --git a/source/blender/modifiers/intern/MOD_normal_edit.c b/source/blender/modifiers/intern/MOD_normal_edit.cc index 6e94acaa9eb..7d422826cf8 100644 --- a/source/blender/modifiers/intern/MOD_normal_edit.c +++ b/source/blender/modifiers/intern/MOD_normal_edit.cc @@ -4,7 +4,7 @@ * \ingroup modifiers */ -#include <string.h> +#include <cstring> #include "MEM_guardedalloc.h" @@ -56,15 +56,15 @@ static void generate_vert_coordinates(Mesh *mesh, const MVert *mv = BKE_mesh_verts(mesh); for (int i = 0; i < mesh->totvert; i++, mv++) { copy_v3_v3(r_cos[i], mv->co); - if (r_size != NULL && ob_center == NULL) { + if (r_size != nullptr && ob_center == nullptr) { minmax_v3v3_v3(min_co, max_co, r_cos[i]); } } /* Get size (i.e. deformation of the spheroid generating normals), * either from target object, or own geometry. */ - if (r_size != NULL) { - if (ob_center != NULL) { + if (r_size != nullptr) { + if (ob_center != nullptr) { /* Using 'scale' as 'size' here. The input object is typically an empty * who's scale is used to define an ellipsoid instead of a simple sphere. */ @@ -88,19 +88,19 @@ static void generate_vert_coordinates(Mesh *mesh, } } - if (ob_center != NULL) { + if (ob_center != nullptr) { float inv_obmat[4][4]; /* Translate our coordinates so that center of ob_center is at (0, 0, 0). */ /* Get ob_center (world) coordinates in ob local coordinates. * No need to take into account ob_center's space here, see T44027. */ - invert_m4_m4(inv_obmat, ob->obmat); - mul_v3_m4v3(diff, inv_obmat, ob_center->obmat[3]); + invert_m4_m4(inv_obmat, ob->object_to_world); + mul_v3_m4v3(diff, inv_obmat, ob_center->object_to_world[3]); negate_v3(diff); do_diff = true; } - else if (offset != NULL && !is_zero_v3(offset)) { + else if (offset != nullptr && !is_zero_v3(offset)) { negate_v3_v3(diff, offset); do_diff = true; @@ -129,12 +129,12 @@ static void mix_normals(const float mix_factor, const int loops_num) { /* Mix with org normals... */ - float *facs = NULL, *wfac; + float *facs = nullptr, *wfac; float(*no_new)[3], (*no_old)[3]; int i; if (dvert) { - facs = MEM_malloc_arrayN((size_t)loops_num, sizeof(*facs), __func__); + facs = static_cast<float *>(MEM_malloc_arrayN(size_t(loops_num), sizeof(*facs), __func__)); BKE_defvert_extract_vgroup_to_loopweights( dvert, defgrp_index, verts_num, mloop, loops_num, use_invert_vgroup, facs); } @@ -164,7 +164,7 @@ static void mix_normals(const float mix_factor, *no_new, *no_old, *no_new, - (mix_limit < (float)M_PI) ? min_ff(fac, mix_limit / angle_v3v3(*no_new, *no_old)) : fac); + (mix_limit < float(M_PI)) ? min_ff(fac, mix_limit / angle_v3v3(*no_new, *no_old)) : fac); } MEM_SAFE_FREE(facs); @@ -180,7 +180,7 @@ static bool polygons_check_flip(MLoop *mloop, const int polys_num) { const MPoly *mp; - MDisps *mdisp = CustomData_get_layer(ldata, CD_MDISPS); + MDisps *mdisp = static_cast<MDisps *>(CustomData_get_layer(ldata, CD_MDISPS)); int i; bool flipped = false; @@ -209,7 +209,7 @@ static bool polygons_check_flip(MLoop *mloop, } static void normalEditModifier_do_radial(NormalEditModifierData *enmd, - const ModifierEvalContext *UNUSED(ctx), + const ModifierEvalContext * /*ctx*/, Object *ob, Mesh *mesh, short (*clnors)[2], @@ -235,11 +235,13 @@ static void normalEditModifier_do_radial(NormalEditModifierData *enmd, const bool do_polynors_fix = (enmd->flag & MOD_NORMALEDIT_NO_POLYNORS_FIX) == 0; int i; - float(*cos)[3] = MEM_malloc_arrayN((size_t)verts_num, sizeof(*cos), __func__); - float(*nos)[3] = MEM_malloc_arrayN((size_t)loops_num, sizeof(*nos), __func__); + float(*cos)[3] = static_cast<float(*)[3]>( + MEM_malloc_arrayN(size_t(verts_num), sizeof(*cos), __func__)); + float(*nos)[3] = static_cast<float(*)[3]>( + MEM_malloc_arrayN(size_t(loops_num), sizeof(*nos), __func__)); float size[3]; - BLI_bitmap *done_verts = BLI_BITMAP_NEW((size_t)verts_num, __func__); + BLI_bitmap *done_verts = BLI_BITMAP_NEW(size_t(verts_num), __func__); generate_vert_coordinates(mesh, ob, ob_target, enmd->offset, verts_num, cos, size); @@ -346,7 +348,7 @@ static void normalEditModifier_do_radial(NormalEditModifierData *enmd, } static void normalEditModifier_do_directional(NormalEditModifierData *enmd, - const ModifierEvalContext *UNUSED(ctx), + const ModifierEvalContext * /*ctx*/, Object *ob, Mesh *mesh, short (*clnors)[2], @@ -372,7 +374,8 @@ static void normalEditModifier_do_directional(NormalEditModifierData *enmd, const bool do_polynors_fix = (enmd->flag & MOD_NORMALEDIT_NO_POLYNORS_FIX) == 0; const bool use_parallel_normals = (enmd->flag & MOD_NORMALEDIT_USE_DIRECTION_PARALLEL) != 0; - float(*nos)[3] = MEM_malloc_arrayN((size_t)loops_num, sizeof(*nos), __func__); + float(*nos)[3] = static_cast<float(*)[3]>( + MEM_malloc_arrayN(size_t(loops_num), sizeof(*nos), __func__)); float target_co[3]; int i; @@ -380,8 +383,8 @@ static void normalEditModifier_do_directional(NormalEditModifierData *enmd, /* Get target's center coordinates in ob local coordinates. */ float mat[4][4]; - invert_m4_m4(mat, ob->obmat); - mul_m4_m4m4(mat, mat, ob_target->obmat); + invert_m4_m4(mat, ob->object_to_world); + mul_m4_m4m4(mat, mat, ob_target->object_to_world); copy_v3_v3(target_co, mat[3]); if (use_parallel_normals) { @@ -395,10 +398,11 @@ static void normalEditModifier_do_directional(NormalEditModifierData *enmd, } } else { - float(*cos)[3] = MEM_malloc_arrayN((size_t)verts_num, sizeof(*cos), __func__); - generate_vert_coordinates(mesh, ob, ob_target, NULL, verts_num, cos, NULL); + float(*cos)[3] = static_cast<float(*)[3]>( + MEM_malloc_arrayN(size_t(verts_num), sizeof(*cos), __func__)); + generate_vert_coordinates(mesh, ob, ob_target, nullptr, verts_num, cos, nullptr); - BLI_bitmap *done_verts = BLI_BITMAP_NEW((size_t)verts_num, __func__); + BLI_bitmap *done_verts = BLI_BITMAP_NEW(size_t(verts_num), __func__); const MLoop *ml; float(*no)[3]; @@ -485,7 +489,7 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd, const bool use_invert_vgroup = ((enmd->flag & MOD_NORMALEDIT_INVERT_VGROUP) != 0); const bool use_current_clnors = !((enmd->mix_mode == MOD_NORMALEDIT_MIX_COPY) && (enmd->mix_factor == 1.0f) && (enmd->defgrp_name[0] == '\0') && - (enmd->mix_limit == (float)M_PI)); + (enmd->mix_limit == float(M_PI))); /* Do not run that modifier at all if autosmooth is disabled! */ if (!is_valid_target_with_error(ctx->object, enmd) || mesh->totloop == 0) { @@ -509,11 +513,11 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd, } Mesh *result; - if (BKE_mesh_edges(mesh) == BKE_mesh_edges(((Mesh *)ob->data))) { + if (BKE_mesh_edges(mesh) == BKE_mesh_edges((Mesh *)ob->data)) { /* We need to duplicate data here, otherwise setting custom normals * (which may also affect sharp edges) could * modify original mesh, see T43671. */ - result = (Mesh *)BKE_id_copy_ex(NULL, &mesh->id, NULL, LIB_ID_COPY_LOCALIZE); + result = (Mesh *)BKE_id_copy_ex(nullptr, &mesh->id, nullptr, LIB_ID_COPY_LOCALIZE); } else { result = mesh; @@ -531,17 +535,19 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd, int defgrp_index; const MDeformVert *dvert; - float(*loopnors)[3] = NULL; + float(*loopnors)[3] = nullptr; CustomData *ldata = &result->ldata; const float(*vert_normals)[3] = BKE_mesh_vertex_normals_ensure(result); const float(*poly_normals)[3] = BKE_mesh_poly_normals_ensure(result); - short(*clnors)[2] = CustomData_get_layer(ldata, CD_CUSTOMLOOPNORMAL); + short(*clnors)[2] = static_cast<short(*)[2]>(CustomData_get_layer(ldata, CD_CUSTOMLOOPNORMAL)); if (use_current_clnors) { - clnors = CustomData_duplicate_referenced_layer(ldata, CD_CUSTOMLOOPNORMAL, loops_num); - loopnors = MEM_malloc_arrayN((size_t)loops_num, sizeof(*loopnors), __func__); + clnors = static_cast<short(*)[2]>( + CustomData_duplicate_referenced_layer(ldata, CD_CUSTOMLOOPNORMAL, loops_num)); + loopnors = static_cast<float(*)[3]>( + MEM_malloc_arrayN(size_t(loops_num), sizeof(*loopnors), __func__)); BKE_mesh_normals_loop_split(verts, vert_normals, @@ -556,13 +562,14 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd, polys_num, true, result->smoothresh, - NULL, + nullptr, clnors, - NULL); + nullptr); } - if (clnors == NULL) { - clnors = CustomData_add_layer(ldata, CD_CUSTOMLOOPNORMAL, CD_SET_DEFAULT, NULL, loops_num); + if (clnors == nullptr) { + clnors = static_cast<short(*)[2]>( + CustomData_add_layer(ldata, CD_CUSTOMLOOPNORMAL, CD_SET_DEFAULT, nullptr, loops_num)); } MOD_get_vgroup(ob, result, enmd->defgrp_name, &dvert, &defgrp_index); @@ -616,7 +623,7 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd, MEM_SAFE_FREE(loopnors); - result->runtime.is_original_bmesh = false; + result->runtime->is_original_bmesh = false; return result; } @@ -630,9 +637,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(enmd, DNA_struct_default_get(NormalEditModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { NormalEditModifierData *enmd = (NormalEditModifierData *)md; @@ -644,7 +649,7 @@ static void requiredDataMask(Object *UNUSED(ob), } } -static bool dependsOnNormals(ModifierData *UNUSED(md)) +static bool dependsOnNormals(ModifierData * /*md*/) { return true; } @@ -656,9 +661,7 @@ static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *u walk(userData, ob, (ID **)&enmd->target, IDWALK_CB_NOP); } -static bool isDisabled(const struct Scene *UNUSED(scene), - ModifierData *md, - bool UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene * /*scene*/, ModifierData *md, bool /*useRenderParams*/) { NormalEditModifierData *enmd = (NormalEditModifierData *)md; @@ -679,7 +682,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * return normalEditModifier_do((NormalEditModifierData *)md, ctx, ctx->object, mesh); } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *col; uiLayout *layout = panel->layout; @@ -689,21 +692,21 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) int mode = RNA_enum_get(ptr, "mode"); - uiItemR(layout, ptr, "mode", UI_ITEM_R_EXPAND, NULL, ICON_NONE); + uiItemR(layout, ptr, "mode", UI_ITEM_R_EXPAND, nullptr, ICON_NONE); uiLayoutSetPropSep(layout, true); - uiItemR(layout, ptr, "target", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "target", 0, nullptr, ICON_NONE); col = uiLayoutColumn(layout, false); uiLayoutSetActive(col, mode == MOD_NORMALEDIT_MODE_DIRECTIONAL); - uiItemR(col, ptr, "use_direction_parallel", 0, NULL, ICON_NONE); + uiItemR(col, ptr, "use_direction_parallel", 0, nullptr, ICON_NONE); modifier_panel_end(layout, ptr); } /* This panel could be open by default, but it isn't currently. */ -static void mix_mode_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void mix_mode_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *row; uiLayout *layout = panel->layout; @@ -713,13 +716,13 @@ static void mix_mode_panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetPropSep(layout, true); - uiItemR(layout, ptr, "mix_mode", 0, NULL, ICON_NONE); - uiItemR(layout, ptr, "mix_factor", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "mix_mode", 0, nullptr, ICON_NONE); + uiItemR(layout, ptr, "mix_factor", 0, nullptr, ICON_NONE); - modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", NULL); + modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", nullptr); row = uiLayoutRow(layout, true); - uiItemR(row, ptr, "mix_limit", 0, NULL, ICON_NONE); + uiItemR(row, ptr, "mix_limit", 0, nullptr, ICON_NONE); uiItemR(row, ptr, "no_polynors_fix", @@ -728,11 +731,11 @@ static void mix_mode_panel_draw(const bContext *UNUSED(C), Panel *panel) (RNA_boolean_get(ptr, "no_polynors_fix") ? ICON_LOCKED : ICON_UNLOCKED)); } -static void offset_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void offset_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); int mode = RNA_enum_get(ptr, "mode"); PointerRNA target_ptr = RNA_pointer_get(ptr, "target"); @@ -744,15 +747,16 @@ static void offset_panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetPropSep(layout, true); uiLayoutSetActive(layout, needs_object_offset); - uiItemR(layout, ptr, "offset", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "offset", 0, nullptr, ICON_NONE); } static void panelRegister(ARegionType *region_type) { PanelType *panel_type = modifier_panel_register( region_type, eModifierType_NormalEdit, panel_draw); - modifier_subpanel_register(region_type, "mix", "Mix", NULL, mix_mode_panel_draw, panel_type); - modifier_subpanel_register(region_type, "offset", "Offset", NULL, offset_panel_draw, panel_type); + modifier_subpanel_register(region_type, "mix", "Mix", nullptr, mix_mode_panel_draw, panel_type); + modifier_subpanel_register( + region_type, "offset", "Offset", nullptr, offset_panel_draw, panel_type); } ModifierTypeInfo modifierType_NormalEdit = { @@ -767,24 +771,24 @@ ModifierTypeInfo modifierType_NormalEdit = { /* copyData */ BKE_modifier_copydata_generic, - /* deformVerts */ NULL, - /* deformMatrices */ NULL, - /* deformVertsEM */ NULL, - /* deformMatricesEM */ NULL, + /* deformVerts */ nullptr, + /* deformMatrices */ nullptr, + /* deformVertsEM */ nullptr, + /* deformMatricesEM */ nullptr, /* modifyMesh */ modifyMesh, - /* modifyGeometrySet */ NULL, + /* modifyGeometrySet */ nullptr, /* initData */ initData, /* requiredDataMask */ requiredDataMask, - /* freeData */ NULL, + /* freeData */ nullptr, /* isDisabled */ isDisabled, /* updateDepsgraph */ updateDepsgraph, - /* dependsOnTime */ NULL, + /* dependsOnTime */ nullptr, /* dependsOnNormals */ dependsOnNormals, /* foreachIDLink */ foreachIDLink, - /* foreachTexLink */ NULL, - /* freeRuntimeData */ NULL, + /* foreachTexLink */ nullptr, + /* freeRuntimeData */ nullptr, /* panelRegister */ panelRegister, - /* blendWrite */ NULL, - /* blendRead */ NULL, + /* blendWrite */ nullptr, + /* blendRead */ nullptr, }; diff --git a/source/blender/modifiers/intern/MOD_ocean.c b/source/blender/modifiers/intern/MOD_ocean.c index d3b02659380..bee1bd7795a 100644 --- a/source/blender/modifiers/intern/MOD_ocean.c +++ b/source/blender/modifiers/intern/MOD_ocean.c @@ -130,9 +130,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla } #ifdef WITH_OCEANSIM -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { OceanModifierData *omd = (OceanModifierData *)md; @@ -141,8 +139,7 @@ static void requiredDataMask(Object *UNUSED(ob), } } #else /* WITH_OCEANSIM */ -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *UNUSED(md), +static void requiredDataMask(ModifierData *UNUSED(md), CustomData_MeshMasks *UNUSED(r_cddata_masks)) { } @@ -595,7 +592,7 @@ static void spray_panel_draw_header(const bContext *UNUSED(C), Panel *panel) row = uiLayoutRow(layout, false); uiLayoutSetActive(row, use_foam); - uiItemR(row, ptr, "use_spray", 0, IFACE_("Spray"), ICON_NONE); + uiItemR(row, ptr, "use_spray", 0, CTX_IFACE_(BLT_I18NCONTEXT_ID_MESH, "Spray"), ICON_NONE); } static void spray_panel_draw(const bContext *UNUSED(C), Panel *panel) diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c index 6c69e616f83..46e14dd6bfb 100644 --- a/source/blender/modifiers/intern/MOD_particleinstance.c +++ b/source/blender/modifiers/intern/MOD_particleinstance.c @@ -52,9 +52,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(pimd, DNA_struct_default_get(ParticleInstanceModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData *)md; @@ -275,7 +273,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * break; case eParticleInstanceSpace_Local: /* get particle states in the particle object's local space */ - invert_m4_m4(spacemat, pimd->ob->obmat); + invert_m4_m4(spacemat, pimd->ob->object_to_world); break; default: /* should not happen */ @@ -305,7 +303,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * maxedge += totedge; } - psys->lattice_deform_data = psys_create_lattice_deform_data(&sim); + psys_sim_data_init(&sim); if (psys->flag & (PSYS_HAIR_DONE | PSYS_KEYED) || psys->pointcache->flag & PTCACHE_BAKED) { float min[3], max[3]; @@ -516,10 +514,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * p_skip++; } - if (psys->lattice_deform_data) { - BKE_lattice_deform_data_destroy(psys->lattice_deform_data); - psys->lattice_deform_data = NULL; - } + psys_sim_data_free(&sim); if (size) { MEM_freeN(size); diff --git a/source/blender/modifiers/intern/MOD_particlesystem.cc b/source/blender/modifiers/intern/MOD_particlesystem.cc index 0c04c6fc062..66291520176 100644 --- a/source/blender/modifiers/intern/MOD_particlesystem.cc +++ b/source/blender/modifiers/intern/MOD_particlesystem.cc @@ -87,9 +87,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla tpsmd->totdmvert = tpsmd->totdmedge = tpsmd->totdmface = 0; } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { ParticleSystemModifierData *psmd = (ParticleSystemModifierData *)md; @@ -125,7 +123,7 @@ static void deformVerts(ModifierData *md, } } - /* clear old dm */ + /* Clear old evaluated mesh. */ bool had_mesh_final = (psmd->mesh_final != nullptr); if (psmd->mesh_final) { BKE_id_free(nullptr, psmd->mesh_final); @@ -161,7 +159,7 @@ static void deformVerts(ModifierData *md, BKE_mesh_tessface_ensure(psmd->mesh_final); - if (!psmd->mesh_final->runtime.deformed_only) { + if (!psmd->mesh_final->runtime->deformed_only) { /* Get the original mesh from the object, this is what the particles * are attached to so in case of non-deform modifiers we need to remap * them to the final mesh (typically subdivision surfaces). */ @@ -251,7 +249,7 @@ static void deformVertsEM(ModifierData *md, } #endif -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; diff --git a/source/blender/modifiers/intern/MOD_remesh.c b/source/blender/modifiers/intern/MOD_remesh.c index 4241ca5a591..d6241fcb290 100644 --- a/source/blender/modifiers/intern/MOD_remesh.c +++ b/source/blender/modifiers/intern/MOD_remesh.c @@ -67,10 +67,9 @@ static void init_dualcon_mesh(DualConInput *input, Mesh *mesh) input->mloop = (void *)BKE_mesh_loops(mesh); input->loop_stride = sizeof(MLoop); - BKE_mesh_runtime_looptri_ensure(mesh); - input->looptri = (void *)mesh->runtime.looptris.array; + input->looptri = (void *)BKE_mesh_runtime_looptri_ensure(mesh); input->tri_stride = sizeof(MLoopTri); - input->tottri = mesh->runtime.looptris.len; + input->tottri = BKE_mesh_runtime_looptri_len(mesh); INIT_MINMAX(input->min, input->max); BKE_mesh_minmax(mesh, input->min, input->max); diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c index acaeb9b2777..4ba274dbd8a 100644 --- a/source/blender/modifiers/intern/MOD_screw.c +++ b/source/blender/modifiers/intern/MOD_screw.c @@ -41,6 +41,8 @@ #include "MOD_modifiertypes.h" #include "MOD_ui_common.h" +#include "BLI_strict_flags.h" + static void initData(ModifierData *md) { ScrewModifierData *ltmd = (ScrewModifierData *)md; @@ -50,16 +52,12 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(ltmd, DNA_struct_default_get(ScrewModifierData), modifier); } -#include "BLI_strict_flags.h" - /** Used for gathering edge connectivity. */ typedef struct ScrewVertConnect { /** Distance from the center axis. */ float dist_sq; /** Location relative to the transformed axis. */ float co[3]; - /** Calc normal of the vertex. */ - float no[3]; /** 2 verts on either side of this one. */ uint v[2]; /** Edges on either side, a bit of a waste since each edge ref's 2 edges. */ @@ -276,8 +274,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * if (ob_axis != NULL) { /* Calculate the matrix relative to the axis object. */ - invert_m4_m4(mtx_tmp_a, ctx->object->obmat); - copy_m4_m4(mtx_tx_inv, ob_axis->obmat); + invert_m4_m4(mtx_tmp_a, ctx->object->object_to_world); + copy_m4_m4(mtx_tx_inv, ob_axis->object_to_world); mul_m4_m4m4(mtx_tx, mtx_tmp_a, mtx_tx_inv); /* Calculate the axis vector. */ @@ -381,9 +379,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * /* The `screw_ofs` cannot change from now on. */ const bool do_remove_doubles = (ltmd->flag & MOD_SCREW_MERGE) && (screw_ofs == 0.0f); - /* Only calculate normals if `do_remove_doubles` since removing doubles frees the normals. */ - const bool do_normal_create = (ltmd->flag & MOD_SCREW_NORMAL_CALC) && - (do_remove_doubles == false); result = BKE_mesh_new_nomain_from_template( mesh, (int)maxVerts, (int)maxEdges, 0, (int)maxPolys * 4, (int)maxPolys); @@ -444,7 +439,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * for (i = 0; i < totedge; i++, med_orig++, med_new++) { med_new->v1 = med_orig->v1; med_new->v2 = med_orig->v2; - med_new->crease = med_orig->crease; med_new->flag = med_orig->flag & ~ME_LOOSEEDGE; /* Tag #MVert as not loose. */ @@ -480,9 +474,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } } - float(*vert_normals_new)[3] = do_normal_create ? BKE_mesh_vertex_normals_for_write(result) : - NULL; - if (ltmd->flag & MOD_SCREW_NORMAL_CALC) { /* Normal Calculation (for face flipping) @@ -511,15 +502,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * vc = vert_connect; /* Copy Vert Locations */ - /* - We can do this in a later loop - only do here if no normal calc */ - if (!totedge) { - for (i = 0; i < totvert; i++, mv_orig++, mv_new++) { - copy_v3_v3(mv_new->co, mv_orig->co); - /* No edges: this is really a dummy normal. */ - normalize_v3_v3(vc->no, mv_new->co); - } - } - else { + if (totedge != 0) { // printf("\n\n\n\n\nStarting Modifier\n"); /* set edge users */ med_new = medge_new; @@ -771,77 +754,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } } } - - /* *VERTEX NORMALS* - * we know the surrounding edges are ordered correctly now - * so its safe to create vertex normals. - * - * calculate vertex normals that can be propagated on lathing - * use edge connectivity work this out */ - if (do_normal_create) { - if (SV_IS_VALID(vc->v[0])) { - if (SV_IS_VALID(vc->v[1])) { - /* 2 edges connected. */ - /* make 2 connecting vert locations relative to the middle vert */ - sub_v3_v3v3(tmp_vec1, mvert_new[vc->v[0]].co, mvert_new[i].co); - sub_v3_v3v3(tmp_vec2, mvert_new[vc->v[1]].co, mvert_new[i].co); - /* normalize so both edges have the same influence, no matter their length */ - normalize_v3(tmp_vec1); - normalize_v3(tmp_vec2); - - /* vc_no_tmp1 - this line is the average direction of both connecting edges - * - * Use the edge order to make the subtraction, flip the normal the right way - * edge should be there but check just in case... */ - if (vc->e[0]->v1 == i) { - sub_v3_v3(tmp_vec1, tmp_vec2); - } - else { - sub_v3_v3v3(tmp_vec1, tmp_vec2, tmp_vec1); - } - } - else { - /* only 1 edge connected - same as above except - * don't need to average edge direction */ - if (vc->e[0]->v2 == i) { - sub_v3_v3v3(tmp_vec1, mvert_new[i].co, mvert_new[vc->v[0]].co); - } - else { - sub_v3_v3v3(tmp_vec1, mvert_new[vc->v[0]].co, mvert_new[i].co); - } - } - - /* tmp_vec2 - is a line 90d from the pivot to the vec - * This is used so the resulting normal points directly away from the middle */ - cross_v3_v3v3(tmp_vec2, axis_vec, vc->co); - - if (UNLIKELY(is_zero_v3(tmp_vec2))) { - /* we're _on_ the axis, so copy it based on our winding */ - if (vc->e[0]->v2 == i) { - negate_v3_v3(vc->no, axis_vec); - } - else { - copy_v3_v3(vc->no, axis_vec); - } - } - else { - /* edge average vector and right angle to the pivot make the normal */ - cross_v3_v3v3(vc->no, tmp_vec1, tmp_vec2); - } - } - else { - copy_v3_v3(vc->no, vc->co); - } - - /* we won't be looping on this data again so copy normals here */ - if ((angle < 0.0f) != do_flip) { - negate_v3(vc->no); - } - - normalize_v3(vc->no); - copy_v3_v3(vert_normals_new[i], vc->no); - } - /* Done with normals */ } } } @@ -882,14 +794,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * mv_new = &mvert_new[varray_stride]; /* advance to the next slice */ for (j = 0; j < totvert; j++, mv_new_base++, mv_new++) { - /* set normal */ - if (vert_connect) { - if (do_normal_create) { - /* Set the normal now its transformed. */ - mul_v3_m3v3(vert_normals_new[mv_new - mvert_new], mat3, vert_connect[j].no); - } - } - /* set location */ copy_v3_v3(mv_new->co, mv_new_base->co); @@ -910,7 +814,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * /* add the new edge */ med_new->v1 = varray_stride + j; med_new->v2 = med_new->v1 - totvert; - med_new->flag = ME_EDGEDRAW | ME_EDGERENDER; + med_new->flag = ME_EDGEDRAW; if (!BLI_BITMAP_TEST(vert_tag, j)) { med_new->flag |= ME_LOOSEEDGE; } @@ -931,7 +835,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * for (i = 0; i < totvert; i++) { med_new->v1 = i; med_new->v2 = varray_stride + i; - med_new->flag = ME_EDGEDRAW | ME_EDGERENDER; + med_new->flag = ME_EDGEDRAW; if (!BLI_BITMAP_TEST(vert_tag, i)) { med_new->flag |= ME_LOOSEEDGE; } @@ -1064,7 +968,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * med_new->v1 = i1; med_new->v2 = i2; med_new->flag = med_new_firstloop->flag; - med_new->crease = med_new_firstloop->crease; med_new++; } i1 += totvert; @@ -1092,7 +995,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * med_new->v1 = i1; med_new->v2 = i2; med_new->flag = med_new_firstloop->flag & ~ME_LOOSEEDGE; - med_new->crease = med_new_firstloop->crease; med_new++; } @@ -1133,10 +1035,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * MEM_freeN(vert_loop_map); } - if (do_normal_create) { - BKE_mesh_vertex_normals_clear_dirty(result); - } - if (do_remove_doubles) { result = mesh_remove_doubles_on_axis(result, mvert_new, diff --git a/source/blender/modifiers/intern/MOD_shrinkwrap.c b/source/blender/modifiers/intern/MOD_shrinkwrap.c index cd36d82e746..df8b9d53a2f 100644 --- a/source/blender/modifiers/intern/MOD_shrinkwrap.c +++ b/source/blender/modifiers/intern/MOD_shrinkwrap.c @@ -48,9 +48,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(smd, DNA_struct_default_get(ShrinkwrapModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_simpledeform.c b/source/blender/modifiers/intern/MOD_simpledeform.c index b49e47fa589..0de89850bc9 100644 --- a/source/blender/modifiers/intern/MOD_simpledeform.c +++ b/source/blender/modifiers/intern/MOD_simpledeform.c @@ -414,9 +414,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(smd, DNA_struct_default_get(SimpleDeformModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { SimpleDeformModifierData *smd = (SimpleDeformModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_skin.c b/source/blender/modifiers/intern/MOD_skin.c index ae8fcb42553..897a25711cd 100644 --- a/source/blender/modifiers/intern/MOD_skin.c +++ b/source/blender/modifiers/intern/MOD_skin.c @@ -1464,7 +1464,7 @@ static void quad_from_tris(BMEdge *e, BMFace *adj[2], BMVert *ndx[4]) ndx[j] = tri[0][i]; /* When the triangle edge cuts across our quad-to-be, * throw in the second triangle's vertex */ - if ((ELEM(tri[0][i], e->v1, e->v2)) && + if (ELEM(tri[0][i], e->v1, e->v2) && (tri[0][(i + 1) % 3] == e->v1 || tri[0][(i + 1) % 3] == e->v2)) { j++; ndx[j] = opp; @@ -1734,7 +1734,7 @@ static void skin_smooth_hulls(BMesh *bm, } } - /* Add temporary shapekey layer to store original coordinates */ + /* Add temporary shape-key layer to store original coordinates. */ BM_data_layer_add(bm, &bm->vdata, CD_SHAPEKEY); skey = CustomData_number_of_layers(&bm->vdata, CD_SHAPEKEY) - 1; BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { @@ -2007,9 +2007,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * return result; } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *UNUSED(md), - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *UNUSED(md), CustomData_MeshMasks *r_cddata_masks) { r_cddata_masks->vmask |= CD_MASK_MVERT_SKIN | CD_MASK_MDEFORMVERT; } diff --git a/source/blender/modifiers/intern/MOD_smooth.c b/source/blender/modifiers/intern/MOD_smooth.c index 76332c61e1e..72fc945675c 100644 --- a/source/blender/modifiers/intern/MOD_smooth.c +++ b/source/blender/modifiers/intern/MOD_smooth.c @@ -63,9 +63,7 @@ static bool isDisabled(const struct Scene *UNUSED(scene), return false; } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { SmoothModifierData *smd = (SmoothModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c index 3e2d590c928..1c1649a5ed8 100644 --- a/source/blender/modifiers/intern/MOD_solidify.c +++ b/source/blender/modifiers/intern/MOD_solidify.c @@ -53,9 +53,7 @@ static void initData(ModifierData *md) # pragma GCC diagnostic error "-Wsign-conversion" #endif -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { SolidifyModifierData *smd = (SolidifyModifierData *)md; @@ -110,7 +108,7 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(layout, ptr, "use_even_offset", 0, NULL, ICON_NONE); } - col = uiLayoutColumnWithHeading(layout, false, IFACE_("Rim")); + col = uiLayoutColumnWithHeading(layout, false, CTX_IFACE_(BLT_I18NCONTEXT_ID_MESH, "Rim")); uiItemR(col, ptr, "use_rim", 0, IFACE_("Fill"), ICON_NONE); sub = uiLayoutColumn(col, false); uiLayoutSetActive(sub, RNA_boolean_get(ptr, "use_rim")); @@ -164,7 +162,8 @@ static void materials_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(layout, ptr, "material_offset", 0, NULL, ICON_NONE); col = uiLayoutColumn(layout, true); uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_rim")); - uiItemR(col, ptr, "material_offset_rim", 0, IFACE_("Rim"), ICON_NONE); + uiItemR( + col, ptr, "material_offset_rim", 0, CTX_IFACE_(BLT_I18NCONTEXT_ID_MESH, "Rim"), ICON_NONE); } static void edge_data_panel_draw(const bContext *UNUSED(C), Panel *panel) @@ -183,7 +182,7 @@ static void edge_data_panel_draw(const bContext *UNUSED(C), Panel *panel) col = uiLayoutColumn(layout, true); uiItemR(col, ptr, "edge_crease_inner", 0, IFACE_("Crease Inner"), ICON_NONE); uiItemR(col, ptr, "edge_crease_outer", 0, IFACE_("Outer"), ICON_NONE); - uiItemR(col, ptr, "edge_crease_rim", 0, IFACE_("Rim"), ICON_NONE); + uiItemR(col, ptr, "edge_crease_rim", 0, CTX_IFACE_(BLT_I18NCONTEXT_ID_MESH, "Rim"), ICON_NONE); } uiItemR(layout, ptr, "bevel_convex", UI_ITEM_R_SLIDER, NULL, ICON_NONE); } @@ -218,7 +217,13 @@ static void vertex_group_panel_draw(const bContext *UNUSED(C), Panel *panel) col = uiLayoutColumn(layout, false); uiItemPointerR( col, ptr, "shell_vertex_group", &ob_ptr, "vertex_groups", IFACE_("Shell"), ICON_NONE); - uiItemPointerR(col, ptr, "rim_vertex_group", &ob_ptr, "vertex_groups", IFACE_("Rim"), ICON_NONE); + uiItemPointerR(col, + ptr, + "rim_vertex_group", + &ob_ptr, + "vertex_groups", + CTX_IFACE_(BLT_I18NCONTEXT_ID_MESH, "Rim"), + ICON_NONE); } static void panelRegister(ARegionType *region_type) diff --git a/source/blender/modifiers/intern/MOD_solidify_extrude.c b/source/blender/modifiers/intern/MOD_solidify_extrude.c index 1456254c31f..08e9569bd95 100644 --- a/source/blender/modifiers/intern/MOD_solidify_extrude.c +++ b/source/blender/modifiers/intern/MOD_solidify_extrude.c @@ -1024,16 +1024,18 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex NULL; float nor[3]; #endif - const uchar crease_rim = smd->crease_rim * 255.0f; - const uchar crease_outer = smd->crease_outer * 255.0f; - const uchar crease_inner = smd->crease_inner * 255.0f; + const float crease_rim = smd->crease_rim; + const float crease_outer = smd->crease_outer; + const float crease_inner = smd->crease_inner; int *origindex_edge; int *orig_ed; uint j; + float *result_edge_crease = NULL; if (crease_rim || crease_outer || crease_inner) { - result->cd_flag |= ME_CDFLAG_EDGE_CREASE; + result_edge_crease = (float *)CustomData_add_layer( + &result->edata, CD_CREASE, CD_SET_DEFAULT, NULL, result->totedge); } /* add faces & edges */ @@ -1043,7 +1045,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex for (i = 0; i < rimVerts; i++, ed++) { ed->v1 = new_vert_arr[i]; ed->v2 = (do_shell ? new_vert_arr[i] : i) + verts_num; - ed->flag |= ME_EDGEDRAW | ME_EDGERENDER; + ed->flag |= ME_EDGEDRAW; if (orig_ed) { *orig_ed = ORIGINDEX_NONE; @@ -1051,7 +1053,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex } if (crease_rim) { - ed->crease = crease_rim; + result_edge_crease[ed - medge] = crease_rim; } } @@ -1140,16 +1142,16 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex } if (crease_outer) { /* crease += crease_outer; without wrapping */ - char *cr = &(ed->crease); - int tcr = *cr + crease_outer; - *cr = tcr > 255 ? 255 : tcr; + float *cr = &(result_edge_crease[ed - medge]); + float tcr = *cr + crease_outer; + *cr = tcr > 1.0f ? 1.0f : tcr; } if (crease_inner) { /* crease += crease_inner; without wrapping */ - char *cr = &(medge[edges_num + (do_shell ? eidx : i)].crease); - int tcr = *cr + crease_inner; - *cr = tcr > 255 ? 255 : tcr; + float *cr = &(result_edge_crease[edges_num + (do_shell ? eidx : i)]); + float tcr = *cr + crease_inner; + *cr = tcr > 1.0f ? 1.0f : tcr; } #ifdef SOLIDIFY_SIDE_NORMALS diff --git a/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c b/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c index d3aff5c58c5..9d0b5c30b5e 100644 --- a/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c +++ b/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c @@ -192,6 +192,7 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md, /* These might be null. */ const float *orig_vert_bweight = CustomData_get_layer(&mesh->vdata, CD_BWEIGHT); const float *orig_edge_bweight = CustomData_get_layer(&mesh->edata, CD_BWEIGHT); + const float *orig_edge_crease = CustomData_get_layer(&mesh->edata, CD_CREASE); uint new_verts_num = 0; uint new_edges_num = 0; @@ -1984,12 +1985,13 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md, /* Get vertex crease layer and ensure edge creases are active if vertex creases are found, since * they will introduce edge creases in the used custom interpolation method. */ const float *vertex_crease = CustomData_get_layer(&mesh->vdata, CD_CREASE); + float *result_edge_crease = NULL; if (vertex_crease) { - result->cd_flag |= ME_CDFLAG_EDGE_CREASE; + result_edge_crease = (float *)CustomData_add_layer( + &result->edata, CD_CREASE, CD_SET_DEFAULT, NULL, result->totedge); /* delete all vertex creases in the result if a rim is used. */ if (do_rim) { CustomData_free_layers(&result->vdata, CD_CREASE, result->totvert); - result->cd_flag &= (char)(~ME_CDFLAG_VERT_CREASE); } } @@ -2004,7 +2006,6 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md, if (g->new_vert != MOD_SOLIDIFY_EMPTY_TAG) { CustomData_copy_data(&mesh->vdata, &result->vdata, (int)i, (int)g->new_vert, 1); copy_v3_v3(mvert[g->new_vert].co, g->co); - mvert[g->new_vert].flag = orig_mvert[i].flag; } } } @@ -2041,10 +2042,14 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md, BLI_assert(v2 != MOD_SOLIDIFY_EMPTY_TAG); medge[insert].v1 = v1; medge[insert].v2 = v2; - medge[insert].flag = orig_medge[(*l)->old_edge].flag | ME_EDGEDRAW | ME_EDGERENDER; - medge[insert].crease = orig_medge[(*l)->old_edge].crease; + medge[insert].flag = orig_medge[(*l)->old_edge].flag | ME_EDGEDRAW; + if (result_edge_crease) { + result_edge_crease[insert] = orig_edge_crease ? orig_edge_crease[(*l)->old_edge] : + 0.0f; + } if (result_edge_bweight) { - result_edge_bweight[insert] = orig_edge_bweight[(*l)->old_edge]; + result_edge_bweight[insert] = orig_edge_bweight ? orig_edge_bweight[(*l)->old_edge] : + 0.0f; } if (bevel_convex != 0.0f && (*l)->faces[1] != NULL) { result_edge_bweight[insert] = clamp_f( @@ -2118,12 +2123,12 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md, EdgeGroup *g2 = gs; EdgeGroup *last_g = NULL; EdgeGroup *first_g = NULL; - char mv_crease = vertex_crease ? (char)(vertex_crease[i] * 255.0f) : 0; + float mv_crease = vertex_crease ? vertex_crease[i] : 0.0f; float mv_bweight = orig_vert_bweight ? orig_vert_bweight[i] : 0.0f; /* Data calculation cache. */ - char max_crease; - char last_max_crease = 0; - char first_max_crease = 0; + float max_crease; + float last_max_crease = 0.0f; + float first_max_crease = 0.0f; float max_bweight; float last_max_bweight = 0.0f; float first_max_bweight = 0.0f; @@ -2139,14 +2144,24 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md, BLI_assert(g->edges_len >= 2); if (g->edges_len == 2) { - max_crease = min_cc(orig_medge[g->edges[0]->old_edge].crease, - orig_medge[g->edges[1]->old_edge].crease); + if (result_edge_crease) { + if (orig_edge_crease) { + max_crease = min_ff(orig_edge_crease[g->edges[0]->old_edge], + orig_edge_crease[g->edges[1]->old_edge]); + } + else { + max_crease = 0.0f; + } + } } else { for (uint k = 1; k < g->edges_len - 1; k++) { - const MEdge *ed = orig_medge + g->edges[k]->old_edge; - if (ed->crease > max_crease) { - max_crease = ed->crease; + const uint orig_edge_index = g->edges[k]->old_edge; + const MEdge *ed = &orig_medge[orig_edge_index]; + if (result_edge_crease) { + if (orig_edge_crease && orig_edge_crease[orig_edge_index] > max_crease) { + max_crease = orig_edge_crease[orig_edge_index]; + } } if (g->edges[k]->new_edge != MOD_SOLIDIFY_EMPTY_TAG) { if (result_edge_bweight) { @@ -2191,9 +2206,11 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md, } medge[edge_index].v1 = last_g->new_vert; medge[edge_index].v2 = g->new_vert; - medge[edge_index].flag = ME_EDGEDRAW | ME_EDGERENDER | - ((last_flag | flag) & (ME_SEAM | ME_SHARP)); - medge[edge_index].crease = max_cc(mv_crease, min_cc(last_max_crease, max_crease)); + medge[edge_index].flag = ME_EDGEDRAW | ((last_flag | flag) & (ME_SEAM | ME_SHARP)); + if (result_edge_crease) { + result_edge_crease[edge_index] = max_ff(mv_crease, + min_ff(last_max_crease, max_crease)); + } if (result_edge_bweight) { result_edge_bweight[edge_index] = max_ff(mv_bweight, min_ff(last_max_bweight, max_bweight)); @@ -2222,10 +2239,12 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md, last_g->open_face_edge = edge_index; medge[edge_index].v1 = last_g->new_vert; medge[edge_index].v2 = first_g->new_vert; - medge[edge_index].flag = ME_EDGEDRAW | ME_EDGERENDER | + medge[edge_index].flag = ME_EDGEDRAW | ((last_flag | first_flag) & (ME_SEAM | ME_SHARP)); - medge[edge_index].crease = max_cc(mv_crease, - min_cc(last_max_crease, first_max_crease)); + if (result_edge_crease) { + result_edge_crease[edge_index] = max_ff(mv_crease, + min_ff(last_max_crease, first_max_crease)); + } if (result_edge_bweight) { result_edge_bweight[edge_index] = max_ff( mv_bweight, min_ff(last_max_bweight, first_max_bweight)); diff --git a/source/blender/modifiers/intern/MOD_subsurf.c b/source/blender/modifiers/intern/MOD_subsurf.cc index 8faf2bdbea2..5e77f0ffa9e 100644 --- a/source/blender/modifiers/intern/MOD_subsurf.c +++ b/source/blender/modifiers/intern/MOD_subsurf.cc @@ -5,9 +5,9 @@ * \ingroup modifiers */ -#include <stddef.h> -#include <stdio.h> -#include <string.h> +#include <cstddef> +#include <cstdio> +#include <cstring> #include "MEM_guardedalloc.h" @@ -61,9 +61,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(smd, DNA_struct_default_get(SubsurfModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { SubsurfModifierData *smd = (SubsurfModifierData *)md; if (smd->flags & eSubsurfModifierFlag_UseCustomNormals) { @@ -93,16 +91,16 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla BKE_modifier_copydata_generic(md, target, flag); - tsmd->emCache = tsmd->mCache = NULL; + tsmd->emCache = tsmd->mCache = nullptr; } static void freeRuntimeData(void *runtime_data_v) { - if (runtime_data_v == NULL) { + if (runtime_data_v == nullptr) { return; } SubsurfRuntimeData *runtime_data = (SubsurfRuntimeData *)runtime_data_v; - if (runtime_data->subdiv != NULL) { + if (runtime_data->subdiv != nullptr) { BKE_subdiv_free(runtime_data->subdiv); } MEM_freeN(runtime_data); @@ -113,12 +111,12 @@ static void freeData(ModifierData *md) SubsurfModifierData *smd = (SubsurfModifierData *)md; if (smd->mCache) { - ccgSubSurf_free(smd->mCache); - smd->mCache = NULL; + ccgSubSurf_free(static_cast<CCGSubSurf *>(smd->mCache)); + smd->mCache = nullptr; } if (smd->emCache) { - ccgSubSurf_free(smd->emCache); - smd->emCache = NULL; + ccgSubSurf_free(static_cast<CCGSubSurf *>(smd->emCache)); + smd->emCache = nullptr; } freeRuntimeData(smd->modifier.runtime); } @@ -210,7 +208,7 @@ static void subdiv_cache_mesh_wrapper_settings(const ModifierEvalContext *ctx, runtime_data->calc_loop_normals = false; /* Set at the end of modifier stack evaluation. */ runtime_data->use_loop_normals = (smd->flags & eSubsurfModifierFlag_UseCustomNormals); - mesh->runtime.subsurf_runtime_data = runtime_data; + mesh->runtime->subsurf_runtime_data = runtime_data; } /* Modifier itself. */ @@ -237,7 +235,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * /* Same check as in `DRW_mesh_batch_cache_create_requested` to keep both code coherent. The * difference is that here we do not check for the final edit mesh pointer as it is not yet * assigned at this stage of modifier stack evaluation. */ - const bool is_editmode = (mesh->edit_mesh != NULL); + const bool is_editmode = (mesh->edit_mesh != nullptr); const int required_mode = BKE_subsurf_modifier_eval_required_mode(is_render_mode, is_editmode); if (BKE_subsurf_modifier_can_do_gpu_subdiv(scene, ctx->object, mesh, smd, required_mode)) { subdiv_cache_mesh_wrapper_settings(ctx, mesh, smd, runtime_data); @@ -246,7 +244,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } Subdiv *subdiv = BKE_subsurf_modifier_subdiv_descriptor_ensure(runtime_data, mesh, false); - if (subdiv == NULL) { + if (subdiv == nullptr) { /* Happens on bad topology, but also on empty input mesh. */ return result; } @@ -267,8 +265,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } if (use_clnors) { - float(*lnors)[3] = CustomData_get_layer(&result->ldata, CD_NORMAL); - BLI_assert(lnors != NULL); + float(*lnors)[3] = static_cast<float(*)[3]>(CustomData_get_layer(&result->ldata, CD_NORMAL)); + BLI_assert(lnors != nullptr); BKE_mesh_set_custom_normals(result, lnors); CustomData_set_layer_flag(&mesh->ldata, CD_NORMAL, CD_FLAG_TEMPORARY); CustomData_set_layer_flag(&result->ldata, CD_NORMAL, CD_FLAG_TEMPORARY); @@ -301,7 +299,7 @@ static void deformMatrices(ModifierData *md, } SubsurfRuntimeData *runtime_data = (SubsurfRuntimeData *)smd->modifier.runtime; Subdiv *subdiv = BKE_subsurf_modifier_subdiv_descriptor_ensure(runtime_data, mesh, false); - if (subdiv == NULL) { + if (subdiv == nullptr) { /* Happens on bad topology, but also on empty input mesh. */ return; } @@ -321,9 +319,9 @@ static bool get_show_adaptive_options(const bContext *C, Panel *panel) } /* Only show adaptive options if this is the last modifier. */ - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); - ModifierData *md = ptr->data; - if (md->next != NULL) { + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); + ModifierData *md = static_cast<ModifierData *>(ptr->data); + if (md->next != nullptr) { return false; } @@ -352,8 +350,8 @@ static void panel_draw(const bContext *C, Panel *panel) /* Only test for adaptive subdivision if built with cycles. */ bool show_adaptive_options = false; bool ob_use_adaptive_subdivision = false; - PointerRNA cycles_ptr = {NULL}; - PointerRNA ob_cycles_ptr = {NULL}; + PointerRNA cycles_ptr = {nullptr}; + PointerRNA ob_cycles_ptr = {nullptr}; #ifdef WITH_CYCLES PointerRNA scene_ptr; Scene *scene = CTX_data_scene(C); @@ -370,7 +368,7 @@ static void panel_draw(const bContext *C, Panel *panel) UNUSED_VARS(C); #endif - uiItemR(layout, ptr, "subdivision_type", UI_ITEM_R_EXPAND, NULL, ICON_NONE); + uiItemR(layout, ptr, "subdivision_type", UI_ITEM_R_EXPAND, nullptr, ICON_NONE); uiLayoutSetPropSep(layout, true); @@ -383,7 +381,7 @@ static void panel_draw(const bContext *C, Panel *panel) ICON_NONE); } if (ob_use_adaptive_subdivision && show_adaptive_options) { - uiItemR(layout, &ob_cycles_ptr, "dicing_rate", 0, NULL, ICON_NONE); + uiItemR(layout, &ob_cycles_ptr, "dicing_rate", 0, nullptr, ICON_NONE); float render = MAX2(RNA_float_get(&cycles_ptr, "dicing_rate") * RNA_float_get(&ob_cycles_ptr, "dicing_rate"), 0.1f); @@ -408,11 +406,11 @@ static void panel_draw(const bContext *C, Panel *panel) uiItemR(col, ptr, "render_levels", 0, IFACE_("Render"), ICON_NONE); } - uiItemR(layout, ptr, "show_only_control_edges", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "show_only_control_edges", 0, nullptr, ICON_NONE); - SubsurfModifierData *smd = ptr->data; - Object *ob = ob_ptr.data; - Mesh *mesh = ob->data; + SubsurfModifierData *smd = static_cast<SubsurfModifierData *>(ptr->data); + const Object *ob = static_cast<const Object *>(ob_ptr.data); + const Mesh *mesh = static_cast<const Mesh *>(ob->data); if (BKE_subsurf_modifier_force_disable_gpu_evaluation_for_mesh(smd, mesh)) { uiItemL(layout, "Autosmooth or custom normals detected, disabling GPU subdivision", ICON_INFO); } @@ -445,30 +443,30 @@ static void advanced_panel_draw(const bContext *C, Panel *panel) uiLayoutSetPropSep(layout, true); uiLayoutSetActive(layout, !(show_adaptive_options && ob_use_adaptive_subdivision)); - uiItemR(layout, ptr, "use_limit_surface", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "use_limit_surface", 0, nullptr, ICON_NONE); uiLayout *col = uiLayoutColumn(layout, true); uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_limit_surface")); - uiItemR(col, ptr, "quality", 0, NULL, ICON_NONE); + uiItemR(col, ptr, "quality", 0, nullptr, ICON_NONE); - uiItemR(layout, ptr, "uv_smooth", 0, NULL, ICON_NONE); - uiItemR(layout, ptr, "boundary_smooth", 0, NULL, ICON_NONE); - uiItemR(layout, ptr, "use_creases", 0, NULL, ICON_NONE); - uiItemR(layout, ptr, "use_custom_normals", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "uv_smooth", 0, nullptr, ICON_NONE); + uiItemR(layout, ptr, "boundary_smooth", 0, nullptr, ICON_NONE); + uiItemR(layout, ptr, "use_creases", 0, nullptr, ICON_NONE); + uiItemR(layout, ptr, "use_custom_normals", 0, nullptr, ICON_NONE); } static void panelRegister(ARegionType *region_type) { PanelType *panel_type = modifier_panel_register(region_type, eModifierType_Subsurf, panel_draw); modifier_subpanel_register( - region_type, "advanced", "Advanced", NULL, advanced_panel_draw, panel_type); + region_type, "advanced", "Advanced", nullptr, advanced_panel_draw, panel_type); } -static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md) +static void blendRead(BlendDataReader * /*reader*/, ModifierData *md) { SubsurfModifierData *smd = (SubsurfModifierData *)md; - smd->emCache = smd->mCache = NULL; + smd->emCache = smd->mCache = nullptr; } ModifierTypeInfo modifierType_Subsurf = { @@ -484,24 +482,24 @@ ModifierTypeInfo modifierType_Subsurf = { /* copyData */ copyData, - /* deformVerts */ NULL, + /* deformVerts */ nullptr, /* deformMatrices */ deformMatrices, - /* deformVertsEM */ NULL, - /* deformMatricesEM */ NULL, + /* deformVertsEM */ nullptr, + /* deformMatricesEM */ nullptr, /* modifyMesh */ modifyMesh, - /* modifyGeometrySet */ NULL, + /* modifyGeometrySet */ nullptr, /* initData */ initData, /* requiredDataMask */ requiredDataMask, /* freeData */ freeData, /* isDisabled */ isDisabled, - /* updateDepsgraph */ NULL, - /* dependsOnTime */ NULL, + /* updateDepsgraph */ nullptr, + /* dependsOnTime */ nullptr, /* dependsOnNormals */ dependsOnNormals, - /* foreachIDLink */ NULL, - /* foreachTexLink */ NULL, + /* foreachIDLink */ nullptr, + /* foreachTexLink */ nullptr, /* freeRuntimeData */ freeRuntimeData, /* panelRegister */ panelRegister, - /* blendWrite */ NULL, + /* blendWrite */ nullptr, /* blendRead */ blendRead, }; diff --git a/source/blender/modifiers/intern/MOD_surface.c b/source/blender/modifiers/intern/MOD_surface.c index c5e117635b5..a34d66f394b 100644 --- a/source/blender/modifiers/intern/MOD_surface.c +++ b/source/blender/modifiers/intern/MOD_surface.c @@ -154,7 +154,7 @@ static void deformVerts(ModifierData *md, MVert *verts = BKE_mesh_verts_for_write(surmd->mesh); for (i = 0, x = surmd->x, v = surmd->v; i < mesh_verts_num; i++, x++, v++) { float *vec = verts[i].co; - mul_m4_v3(ctx->object->obmat, vec); + mul_m4_v3(ctx->object->object_to_world, vec); if (init) { v->co[0] = v->co[1] = v->co[2] = 0.0f; diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.c b/source/blender/modifiers/intern/MOD_surfacedeform.c index e0083b37ef0..6a9321a78a2 100644 --- a/source/blender/modifiers/intern/MOD_surfacedeform.c +++ b/source/blender/modifiers/intern/MOD_surfacedeform.c @@ -192,9 +192,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(smd, DNA_struct_default_get(SurfaceDeformModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md; @@ -1331,7 +1329,7 @@ static void deformVert(void *__restrict userdata, const SDefDeformData *const data = (SDefDeformData *)userdata; const SDefBind *sdbind = data->bind_verts[index].binds; const int sdbind_num = data->bind_verts[index].binds_num; - const unsigned int vertex_idx = data->bind_verts[index].vertex_idx; + const uint vertex_idx = data->bind_verts[index].vertex_idx; float *const vertexCos = data->vertexCos[vertex_idx]; float norm[3], temp[3], offset[3]; @@ -1468,8 +1466,8 @@ static void surfacedeformModifier_do(ModifierData *md, ob, md); float tmp_mat[4][4]; - invert_m4_m4(tmp_mat, ob->obmat); - mul_m4_m4m4(smd_orig->mat, tmp_mat, ob_target->obmat); + invert_m4_m4(tmp_mat, ob->object_to_world); + mul_m4_m4m4(smd_orig->mat, tmp_mat, ob_target->object_to_world); /* Avoid converting edit-mesh data, binding is an exception. */ BKE_mesh_wrapper_ensure_mdata(target); @@ -1505,7 +1503,7 @@ static void surfacedeformModifier_do(ModifierData *md, ob, md, "Target polygons changed from %u to %u", smd->target_polys_num, target_polys_num); return; } - if (smd->target_verts_num != 0 && smd->target_verts_num != target_verts_num) { + if (!ELEM(smd->target_verts_num, 0, target_verts_num)) { if (smd->target_verts_num > target_verts_num) { /* Number of vertices on the target did reduce. There is no usable recovery from this. */ BKE_modifier_set_error(ob, diff --git a/source/blender/modifiers/intern/MOD_triangulate.c b/source/blender/modifiers/intern/MOD_triangulate.c index e8280bc9c97..5bae6090758 100644 --- a/source/blender/modifiers/intern/MOD_triangulate.c +++ b/source/blender/modifiers/intern/MOD_triangulate.c @@ -86,7 +86,7 @@ static Mesh *triangulate_mesh(Mesh *mesh, /* force drawing of all edges (seems to be omitted in CDDM_from_bmesh) */ for (i = 0; i < edges_num; i++, me++) { - me->flag |= ME_EDGEDRAW | ME_EDGERENDER; + me->flag |= ME_EDGEDRAW; } return result; diff --git a/source/blender/modifiers/intern/MOD_ui_common.c b/source/blender/modifiers/intern/MOD_ui_common.c index c027cae8cdb..0f6c40610a0 100644 --- a/source/blender/modifiers/intern/MOD_ui_common.c +++ b/source/blender/modifiers/intern/MOD_ui_common.c @@ -326,8 +326,34 @@ static void modifier_panel_header(const bContext *C, Panel *panel) } } /* Tessellation point for curve-typed objects. */ else if (ELEM(ob->type, OB_CURVES_LEGACY, OB_SURF, OB_FONT)) { + /* Smooth modifier can work with tessellated curves only (works on mesh edges explicitly). */ + if (md->type == eModifierType_Smooth) { + /* Add button (appearing to be OFF) and add tip why this can't be changed. */ + sub = uiLayoutRow(row, true); + uiBlock *block = uiLayoutGetBlock(sub); + static int apply_on_spline_always_off_hack = 0; + uiBut *but = uiDefIconButBitI(block, + UI_BTYPE_TOGGLE, + eModifierMode_ApplyOnSpline, + 0, + ICON_SURFACE_DATA, + 0, + 0, + UI_UNIT_X - 2, + UI_UNIT_Y, + &apply_on_spline_always_off_hack, + 0.0, + 0.0, + 0.0, + 0.0, + TIP_("Apply on Spline")); + UI_but_disable( + but, TIP_("This modifier can only deform filled curve/surface, not the control points")); + buttons_number++; + } /* Some modifiers can work with pre-tessellated curves only. */ - if (ELEM(md->type, eModifierType_Hook, eModifierType_Softbody, eModifierType_MeshDeform)) { + else if (ELEM( + md->type, eModifierType_Hook, eModifierType_Softbody, eModifierType_MeshDeform)) { /* Add button (appearing to be ON) and add tip why this can't be changed. */ sub = uiLayoutRow(row, true); uiBlock *block = uiLayoutGetBlock(sub); diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.cc index bc1a04d65ce..a94fc6732a0 100644 --- a/source/blender/modifiers/intern/MOD_util.c +++ b/source/blender/modifiers/intern/MOD_util.cc @@ -5,7 +5,7 @@ * \ingroup modifiers */ -#include <string.h> +#include <cstring> #include "BLI_utildefines.h" @@ -46,7 +46,7 @@ void MOD_init_texture(MappingInfoModifierData *dmd, const ModifierEvalContext *c { Tex *tex = dmd->texture; - if (tex == NULL) { + if (tex == nullptr) { return; } @@ -57,7 +57,7 @@ void MOD_init_texture(MappingInfoModifierData *dmd, const ModifierEvalContext *c /* TODO: to be renamed to get_texture_coords once we are done with moving modifiers to Mesh. */ void MOD_get_texture_coords(MappingInfoModifierData *dmd, - const ModifierEvalContext *UNUSED(ctx), + const ModifierEvalContext * /*ctx*/, Object *ob, Mesh *mesh, float (*cos)[3], @@ -69,21 +69,21 @@ void MOD_get_texture_coords(MappingInfoModifierData *dmd, float mapref_imat[4][4]; if (texmapping == MOD_DISP_MAP_OBJECT) { - if (dmd->map_object != NULL) { + if (dmd->map_object != nullptr) { Object *map_object = dmd->map_object; if (dmd->map_bone[0] != '\0') { bPoseChannel *pchan = BKE_pose_channel_find_name(map_object->pose, dmd->map_bone); if (pchan) { float mat_bone_world[4][4]; - mul_m4_m4m4(mat_bone_world, map_object->obmat, pchan->pose_mat); + mul_m4_m4m4(mat_bone_world, map_object->object_to_world, pchan->pose_mat); invert_m4_m4(mapref_imat, mat_bone_world); } else { - invert_m4_m4(mapref_imat, map_object->obmat); + invert_m4_m4(mapref_imat, map_object->object_to_world); } } else { - invert_m4_m4(mapref_imat, map_object->obmat); + invert_m4_m4(mapref_imat, map_object->object_to_world); } } else { /* if there is no map object, default to local */ @@ -102,7 +102,8 @@ void MOD_get_texture_coords(MappingInfoModifierData *dmd, char uvname[MAX_CUSTOMDATA_LAYER_NAME]; CustomData_validate_layer_name(&mesh->ldata, CD_MLOOPUV, dmd->uvlayer_name, uvname); - const MLoopUV *mloop_uv = CustomData_get_layer_named(&mesh->ldata, CD_MLOOPUV, uvname); + const MLoopUV *mloop_uv = static_cast<const MLoopUV *>( + CustomData_get_layer_named(&mesh->ldata, CD_MLOOPUV, uvname)); /* verts are given the UV from the first face that uses them */ for (i = 0, mp = mpoly; i < polys_num; i++, mp++) { @@ -134,17 +135,17 @@ void MOD_get_texture_coords(MappingInfoModifierData *dmd, for (i = 0; i < verts_num; i++, mv++, r_texco++) { switch (texmapping) { case MOD_DISP_MAP_LOCAL: - copy_v3_v3(*r_texco, cos != NULL ? *cos : mv->co); + copy_v3_v3(*r_texco, cos != nullptr ? *cos : mv->co); break; case MOD_DISP_MAP_GLOBAL: - mul_v3_m4v3(*r_texco, ob->obmat, cos != NULL ? *cos : mv->co); + mul_v3_m4v3(*r_texco, ob->object_to_world, cos != nullptr ? *cos : mv->co); break; case MOD_DISP_MAP_OBJECT: - mul_v3_m4v3(*r_texco, ob->obmat, cos != NULL ? *cos : mv->co); + mul_v3_m4v3(*r_texco, ob->object_to_world, cos != nullptr ? *cos : mv->co); mul_m4_v3(mapref_imat, *r_texco); break; } - if (cos != NULL) { + if (cos != nullptr) { cos++; } } @@ -154,8 +155,8 @@ 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->vert_coords_prev == NULL) { - amd->vert_coords_prev = MEM_dupallocN(vert_coords); + if (amd->multi && amd->vert_coords_prev == nullptr) { + amd->vert_coords_prev = static_cast<float(*)[3]>(MEM_dupallocN(vert_coords)); } else { break; @@ -171,25 +172,26 @@ Mesh *MOD_deform_mesh_eval_get(Object *ob, const int verts_num, const bool use_orco) { - if (mesh != NULL) { + if (mesh != nullptr) { /* pass */ } else if (ob->type == OB_MESH) { if (em) { - mesh = BKE_mesh_wrapper_from_editmesh_with_coords(em, NULL, vertexCos, ob->data); + mesh = BKE_mesh_wrapper_from_editmesh_with_coords( + em, nullptr, vertexCos, static_cast<const Mesh *>(ob->data)); } else { /* TODO(sybren): after modifier conversion of DM to Mesh is done, check whether * we really need a copy here. Maybe the CoW ob->data can be directly used. */ Mesh *mesh_prior_modifiers = BKE_object_get_pre_modified_mesh(ob); - mesh = (Mesh *)BKE_id_copy_ex(NULL, + mesh = (Mesh *)BKE_id_copy_ex(nullptr, &mesh_prior_modifiers->id, - NULL, + nullptr, (LIB_ID_COPY_LOCALIZE | LIB_ID_COPY_CD_REFERENCE)); - mesh->runtime.deformed_only = 1; + mesh->runtime->deformed_only = 1; } - if (em != NULL) { + if (em != nullptr) { /* pass */ } /* TODO(sybren): after modifier conversion of DM to Mesh is done, check whether @@ -210,13 +212,13 @@ Mesh *MOD_deform_mesh_eval_get(Object *ob, /* Currently, that may not be the case every time * (texts e.g. tend to give issues, * also when deforming curve points instead of generated curve geometry... ). */ - if (mesh != NULL && mesh->totvert != verts_num) { - BKE_id_free(NULL, mesh); - mesh = NULL; + if (mesh != nullptr && mesh->totvert != verts_num) { + BKE_id_free(nullptr, mesh); + mesh = nullptr; } } - if (mesh && mesh->runtime.wrapper_type == ME_WRAPPER_TYPE_MDATA) { + if (mesh && mesh->runtime->wrapper_type == ME_WRAPPER_TYPE_MDATA) { BLI_assert(mesh->totvert == verts_num); } @@ -232,7 +234,7 @@ void MOD_get_vgroup( *dvert = BKE_mesh_deform_verts(mesh); } else { - *dvert = NULL; + *dvert = nullptr; } } else { @@ -241,7 +243,7 @@ void MOD_get_vgroup( *dvert = BKE_lattice_deform_verts_get(ob); } else { - *dvert = NULL; + *dvert = nullptr; } } } @@ -251,7 +253,7 @@ void MOD_depsgraph_update_object_bone_relation(struct DepsNodeHandle *node, const char *bonename, const char *description) { - if (object == NULL) { + if (object == nullptr) { return; } if (bonename[0] != '\0' && object->type == OB_ARMATURE) { diff --git a/source/blender/modifiers/intern/MOD_uvproject.c b/source/blender/modifiers/intern/MOD_uvproject.cc index 8db92fefd31..895572d9477 100644 --- a/source/blender/modifiers/intern/MOD_uvproject.c +++ b/source/blender/modifiers/intern/MOD_uvproject.cc @@ -52,9 +52,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(umd, DNA_struct_default_get(UVProjectModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *UNUSED(md), - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData * /*md*/, CustomData_MeshMasks *r_cddata_masks) { /* ask for UV coordinates */ r_cddata_masks->lmask |= CD_MASK_MLOOPUV; @@ -73,7 +71,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte UVProjectModifierData *umd = (UVProjectModifierData *)md; bool do_add_own_transform = false; for (int i = 0; i < umd->projectors_num; i++) { - if (umd->projectors[i] != NULL) { + if (umd->projectors[i] != nullptr) { DEG_add_object_relation( ctx->node, umd->projectors[i], DEG_OB_COMP_TRANSFORM, "UV Project Modifier"); do_add_own_transform = true; @@ -84,20 +82,19 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } -typedef struct Projector { +struct Projector { Object *ob; /* object this projector is derived from */ float projmat[4][4]; /* projection matrix */ float normal[3]; /* projector normal in world space */ void *uci; /* optional uv-project info (panorama projection) */ -} Projector; +}; static Mesh *uvprojectModifier_do(UVProjectModifierData *umd, - const ModifierEvalContext *UNUSED(ctx), + const ModifierEvalContext * /*ctx*/, Object *ob, Mesh *mesh) { float(*coords)[3], (*co)[3]; - MLoopUV *mloop_uv; int i, verts_num, polys_num, loops_num; const MPoly *mp; Projector projectors[MOD_UVPROJECT_MAXPROJECTORS]; @@ -110,7 +107,7 @@ static Mesh *uvprojectModifier_do(UVProjectModifierData *umd, int free_uci = 0; for (i = 0; i < umd->projectors_num; i++) { - if (umd->projectors[i] != NULL) { + if (umd->projectors[i] != nullptr) { projectors[projectors_num++].ob = umd->projectors[i]; } } @@ -123,7 +120,7 @@ static Mesh *uvprojectModifier_do(UVProjectModifierData *umd, * (e.g. if a preceding modifier could not preserve it). */ if (!CustomData_has_layer(&mesh->ldata, CD_MLOOPUV)) { CustomData_add_layer_named( - &mesh->ldata, CD_MLOOPUV, CD_SET_DEFAULT, NULL, mesh->totloop, umd->uvlayer_name); + &mesh->ldata, CD_MLOOPUV, CD_SET_DEFAULT, nullptr, mesh->totloop, umd->uvlayer_name); } /* make sure we're using an existing layer */ @@ -133,17 +130,18 @@ static Mesh *uvprojectModifier_do(UVProjectModifierData *umd, for (i = 0; i < projectors_num; i++) { float tmpmat[4][4]; float offsetmat[4][4]; - Camera *cam = NULL; + Camera *cam = nullptr; /* calculate projection matrix */ - invert_m4_m4(projectors[i].projmat, projectors[i].ob->obmat); + invert_m4_m4(projectors[i].projmat, projectors[i].ob->object_to_world); - projectors[i].uci = NULL; + projectors[i].uci = nullptr; if (projectors[i].ob->type == OB_CAMERA) { cam = (Camera *)projectors[i].ob->data; if (cam->type == CAM_PANO) { - projectors[i].uci = BLI_uvproject_camera_info(projectors[i].ob, NULL, aspx, aspy); - BLI_uvproject_camera_info_scale(projectors[i].uci, scax, scay); + projectors[i].uci = BLI_uvproject_camera_info(projectors[i].ob, nullptr, aspx, aspy); + BLI_uvproject_camera_info_scale( + static_cast<ProjCameraInfo *>(projectors[i].uci), scax, scay); free_uci = 1; } else { @@ -180,25 +178,25 @@ static Mesh *uvprojectModifier_do(UVProjectModifierData *umd, projectors[i].normal[0] = 0; projectors[i].normal[1] = 0; projectors[i].normal[2] = 1; - mul_mat3_m4_v3(projectors[i].ob->obmat, projectors[i].normal); + mul_mat3_m4_v3(projectors[i].ob->object_to_world, projectors[i].normal); } polys_num = mesh->totpoly; loops_num = mesh->totloop; /* make sure we are not modifying the original UV map */ - mloop_uv = CustomData_duplicate_referenced_layer_named( - &mesh->ldata, CD_MLOOPUV, uvname, loops_num); + MLoopUV *mloop_uv = static_cast<MLoopUV *>( + CustomData_duplicate_referenced_layer_named(&mesh->ldata, CD_MLOOPUV, uvname, loops_num)); coords = BKE_mesh_vert_coords_alloc(mesh, &verts_num); /* Convert coords to world-space. */ for (i = 0, co = coords; i < verts_num; i++, co++) { - mul_m4_v3(ob->obmat, *co); + mul_m4_v3(ob->object_to_world, *co); } /* if only one projector, project coords to UVs */ - if (projectors_num == 1 && projectors[0].uci == NULL) { + if (projectors_num == 1 && projectors[0].uci == nullptr) { for (i = 0, co = coords; i < verts_num; i++, co++) { mul_project_m4_v3(projectors[0].projmat, *co); } @@ -215,7 +213,8 @@ static Mesh *uvprojectModifier_do(UVProjectModifierData *umd, do { uint lidx = mp->loopstart + fidx; uint vidx = loops[lidx].v; - BLI_uvproject_from_camera(mloop_uv[lidx].uv, coords[vidx], projectors[0].uci); + BLI_uvproject_from_camera( + mloop_uv[lidx].uv, coords[vidx], static_cast<ProjCameraInfo *>(projectors[0].uci)); } while (fidx--); } else { @@ -258,7 +257,8 @@ static Mesh *uvprojectModifier_do(UVProjectModifierData *umd, do { uint lidx = mp->loopstart + fidx; uint vidx = loops[lidx].v; - BLI_uvproject_from_camera(mloop_uv[lidx].uv, coords[vidx], best_projector->uci); + BLI_uvproject_from_camera( + mloop_uv[lidx].uv, coords[vidx], static_cast<ProjCameraInfo *>(best_projector->uci)); } while (fidx--); } else { @@ -283,7 +283,7 @@ static Mesh *uvprojectModifier_do(UVProjectModifierData *umd, } } - mesh->runtime.is_original_bmesh = false; + mesh->runtime->is_original_bmesh = false; return mesh; } @@ -298,7 +298,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * return result; } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *sub; uiLayout *layout = panel->layout; @@ -310,7 +310,7 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetPropSep(layout, true); - uiItemPointerR(layout, ptr, "uv_layer", &obj_data_ptr, "uv_layers", NULL, ICON_NONE); + uiItemPointerR(layout, ptr, "uv_layer", &obj_data_ptr, "uv_layers", nullptr, ICON_NONE); /* Aspect and Scale are only used for camera projectors. */ bool has_camera = false; @@ -325,17 +325,17 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) sub = uiLayoutColumn(layout, true); uiLayoutSetActive(sub, has_camera); - uiItemR(sub, ptr, "aspect_x", 0, NULL, ICON_NONE); + uiItemR(sub, ptr, "aspect_x", 0, nullptr, ICON_NONE); uiItemR(sub, ptr, "aspect_y", 0, IFACE_("Y"), ICON_NONE); sub = uiLayoutColumn(layout, true); uiLayoutSetActive(sub, has_camera); - uiItemR(sub, ptr, "scale_x", 0, NULL, ICON_NONE); + uiItemR(sub, ptr, "scale_x", 0, nullptr, ICON_NONE); uiItemR(sub, ptr, "scale_y", 0, IFACE_("Y"), ICON_NONE); uiItemR(layout, ptr, "projector_count", 0, IFACE_("Projectors"), ICON_NONE); RNA_BEGIN (ptr, projector_ptr, "projectors") { - uiItemR(layout, &projector_ptr, "object", 0, NULL, ICON_NONE); + uiItemR(layout, &projector_ptr, "object", 0, nullptr, ICON_NONE); } RNA_END; @@ -359,24 +359,24 @@ ModifierTypeInfo modifierType_UVProject = { /* copyData */ BKE_modifier_copydata_generic, - /* deformVerts */ NULL, - /* deformMatrices */ NULL, - /* deformVertsEM */ NULL, - /* deformMatricesEM */ NULL, + /* deformVerts */ nullptr, + /* deformMatrices */ nullptr, + /* deformVertsEM */ nullptr, + /* deformMatricesEM */ nullptr, /* modifyMesh */ modifyMesh, - /* modifyGeometrySet */ NULL, + /* modifyGeometrySet */ nullptr, /* initData */ initData, /* requiredDataMask */ requiredDataMask, - /* freeData */ NULL, - /* isDisabled */ NULL, + /* freeData */ nullptr, + /* isDisabled */ nullptr, /* updateDepsgraph */ updateDepsgraph, - /* dependsOnTime */ NULL, - /* dependsOnNormals */ NULL, + /* dependsOnTime */ nullptr, + /* dependsOnNormals */ nullptr, /* foreachIDLink */ foreachIDLink, - /* foreachTexLink */ NULL, - /* freeRuntimeData */ NULL, + /* foreachTexLink */ nullptr, + /* freeRuntimeData */ nullptr, /* panelRegister */ panelRegister, - /* blendWrite */ NULL, - /* blendRead */ NULL, + /* blendWrite */ nullptr, + /* blendRead */ nullptr, }; diff --git a/source/blender/modifiers/intern/MOD_uvwarp.c b/source/blender/modifiers/intern/MOD_uvwarp.cc index ba6e18f6b7e..a96b28b4e2e 100644 --- a/source/blender/modifiers/intern/MOD_uvwarp.c +++ b/source/blender/modifiers/intern/MOD_uvwarp.cc @@ -4,7 +4,7 @@ * \ingroup modifiers */ -#include <string.h> +#include <cstring> #include "BLI_utildefines.h" @@ -58,9 +58,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(umd, DNA_struct_default_get(UVWarpModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { UVWarpModifierData *umd = (UVWarpModifierData *)md; @@ -74,14 +72,14 @@ static void matrix_from_obj_pchan(float mat[4][4], Object *ob, const char *bonen { bPoseChannel *pchan = BKE_pose_channel_find_name(ob->pose, bonename); if (pchan) { - mul_m4_m4m4(mat, ob->obmat, pchan->pose_mat); + mul_m4_m4m4(mat, ob->object_to_world, pchan->pose_mat); } else { - copy_m4_m4(mat, ob->obmat); + copy_m4_m4(mat, ob->object_to_world); } } -typedef struct UVWarpData { +struct UVWarpData { const MPoly *mpoly; const MLoop *mloop; MLoopUV *mloopuv; @@ -91,13 +89,13 @@ typedef struct UVWarpData { float (*warp_mat)[4]; bool invert_vgroup; -} UVWarpData; +}; static void uv_warp_compute(void *__restrict userdata, const int i, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { - const UVWarpData *data = userdata; + const UVWarpData *data = static_cast<const UVWarpData *>(userdata); const MPoly *mp = &data->mpoly[i]; const MLoop *ml = &data->mloop[mp->loopstart]; @@ -132,7 +130,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * { UVWarpModifierData *umd = (UVWarpModifierData *)md; int polys_num, loops_num; - MLoopUV *mloopuv; const MDeformVert *dvert; int defgrp_index; char uvname[MAX_CUSTOMDATA_LAYER_NAME]; @@ -146,7 +143,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * return mesh; } - if (!ELEM(NULL, umd->object_src, umd->object_dst)) { + if (!ELEM(nullptr, umd->object_src, umd->object_dst)) { float mat_src[4][4]; float mat_dst[4][4]; float imat_dst[4][4]; @@ -201,25 +198,25 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * loops_num = mesh->totloop; /* make sure we are not modifying the original UV map */ - mloopuv = CustomData_duplicate_referenced_layer_named( - &mesh->ldata, CD_MLOOPUV, uvname, loops_num); + MLoopUV *mloopuv = static_cast<MLoopUV *>( + CustomData_duplicate_referenced_layer_named(&mesh->ldata, CD_MLOOPUV, uvname, loops_num)); MOD_get_vgroup(ctx->object, mesh, umd->vgroup_name, &dvert, &defgrp_index); - UVWarpData data = { - .mpoly = polys, - .mloop = loops, - .mloopuv = mloopuv, - .dvert = dvert, - .defgrp_index = defgrp_index, - .warp_mat = warp_mat, - .invert_vgroup = invert_vgroup, - }; + UVWarpData data{}; + data.mpoly = polys; + data.mloop = loops; + data.mloopuv = mloopuv; + data.dvert = dvert; + data.defgrp_index = defgrp_index; + data.warp_mat = warp_mat; + data.invert_vgroup = invert_vgroup; + TaskParallelSettings settings; BLI_parallel_range_settings_defaults(&settings); settings.use_threading = (polys_num > 1000); BLI_task_parallel_range(0, polys_num, &data, uv_warp_compute, &settings); - mesh->runtime.is_original_bmesh = false; + mesh->runtime->is_original_bmesh = false; return mesh; } @@ -244,7 +241,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte DEG_add_depends_on_transform_relation(ctx->node, "UVWarp Modifier"); } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *col; uiLayout *layout = panel->layout; @@ -257,53 +254,53 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetPropSep(layout, true); - uiItemPointerR(layout, ptr, "uv_layer", &obj_data_ptr, "uv_layers", NULL, ICON_NONE); + uiItemPointerR(layout, ptr, "uv_layer", &obj_data_ptr, "uv_layers", nullptr, ICON_NONE); col = uiLayoutColumn(layout, false); - uiItemR(col, ptr, "center", 0, NULL, ICON_NONE); + uiItemR(col, ptr, "center", 0, nullptr, ICON_NONE); col = uiLayoutColumn(layout, false); uiItemR(col, ptr, "axis_u", 0, IFACE_("Axis U"), ICON_NONE); uiItemR(col, ptr, "axis_v", 0, IFACE_("V"), ICON_NONE); col = uiLayoutColumn(layout, false); - uiItemR(col, ptr, "object_from", 0, NULL, ICON_NONE); + uiItemR(col, ptr, "object_from", 0, nullptr, ICON_NONE); warp_obj_ptr = RNA_pointer_get(ptr, "object_from"); if (!RNA_pointer_is_null(&warp_obj_ptr) && RNA_enum_get(&warp_obj_ptr, "type") == OB_ARMATURE) { PointerRNA warp_obj_data_ptr = RNA_pointer_get(&warp_obj_ptr, "data"); - uiItemPointerR(col, ptr, "bone_from", &warp_obj_data_ptr, "bones", NULL, ICON_NONE); + uiItemPointerR(col, ptr, "bone_from", &warp_obj_data_ptr, "bones", nullptr, ICON_NONE); } uiItemR(col, ptr, "object_to", 0, IFACE_("To"), ICON_NONE); warp_obj_ptr = RNA_pointer_get(ptr, "object_to"); if (!RNA_pointer_is_null(&warp_obj_ptr) && RNA_enum_get(&warp_obj_ptr, "type") == OB_ARMATURE) { PointerRNA warp_obj_data_ptr = RNA_pointer_get(&warp_obj_ptr, "data"); - uiItemPointerR(col, ptr, "bone_to", &warp_obj_data_ptr, "bones", NULL, ICON_NONE); + uiItemPointerR(col, ptr, "bone_to", &warp_obj_data_ptr, "bones", nullptr, ICON_NONE); } - modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", NULL); + modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", nullptr); modifier_panel_end(layout, ptr); } -static void transform_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void transform_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetPropSep(layout, true); - uiItemR(layout, ptr, "offset", 0, NULL, ICON_NONE); - uiItemR(layout, ptr, "scale", 0, NULL, ICON_NONE); - uiItemR(layout, ptr, "rotation", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "offset", 0, nullptr, ICON_NONE); + uiItemR(layout, ptr, "scale", 0, nullptr, ICON_NONE); + uiItemR(layout, ptr, "rotation", 0, nullptr, ICON_NONE); } static void panelRegister(ARegionType *region_type) { PanelType *panel_type = modifier_panel_register(region_type, eModifierType_UVWarp, panel_draw); modifier_subpanel_register( - region_type, "offset", "Transform", NULL, transform_panel_draw, panel_type); + region_type, "offset", "Transform", nullptr, transform_panel_draw, panel_type); } ModifierTypeInfo modifierType_UVWarp = { @@ -318,24 +315,24 @@ ModifierTypeInfo modifierType_UVWarp = { /* copyData */ BKE_modifier_copydata_generic, - /* deformVerts */ NULL, - /* deformMatrices */ NULL, - /* deformVertsEM */ NULL, - /* deformMatricesEM */ NULL, + /* deformVerts */ nullptr, + /* deformMatrices */ nullptr, + /* deformVertsEM */ nullptr, + /* deformMatricesEM */ nullptr, /* modifyMesh */ modifyMesh, - /* modifyGeometrySet */ NULL, + /* modifyGeometrySet */ nullptr, /* initData */ initData, /* requiredDataMask */ requiredDataMask, - /* freeData */ NULL, - /* isDisabled */ NULL, + /* freeData */ nullptr, + /* isDisabled */ nullptr, /* updateDepsgraph */ updateDepsgraph, - /* dependsOnTime */ NULL, - /* dependsOnNormals */ NULL, + /* dependsOnTime */ nullptr, + /* dependsOnNormals */ nullptr, /* foreachIDLink */ foreachIDLink, - /* foreachTexLink */ NULL, - /* freeRuntimeData */ NULL, + /* foreachTexLink */ nullptr, + /* freeRuntimeData */ nullptr, /* panelRegister */ panelRegister, - /* blendWrite */ NULL, - /* blendRead */ NULL, + /* blendWrite */ nullptr, + /* blendRead */ nullptr, }; diff --git a/source/blender/modifiers/intern/MOD_volume_displace.cc b/source/blender/modifiers/intern/MOD_volume_displace.cc index d9b94d79348..2d6f8c100e7 100644 --- a/source/blender/modifiers/intern/MOD_volume_displace.cc +++ b/source/blender/modifiers/intern/MOD_volume_displace.cc @@ -84,7 +84,7 @@ static void foreachTexLink(ModifierData *md, Object *ob, TexWalkFunc walk, void walk(userData, ob, md, "texture"); } -static bool dependsOnTime(struct Scene *UNUSED(scene), ModifierData *md) +static bool dependsOnTime(struct Scene * /*scene*/, ModifierData *md) { VolumeDisplaceModifierData *vdmd = reinterpret_cast<VolumeDisplaceModifierData *>(md); if (vdmd->texture) { @@ -213,7 +213,7 @@ struct DisplaceGridOp { const float sample_radius = vdmd.texture_sample_radius * std::abs(vdmd.strength) / max_voxel_side_length / 2.0f; openvdb::tools::dilateActiveValues(temp_grid->tree(), - static_cast<int>(std::ceil(sample_radius)), + int(std::ceil(sample_radius)), openvdb::tools::NN_FACE_EDGE, openvdb::tools::EXPAND_TILES); @@ -254,15 +254,16 @@ struct DisplaceGridOp { return index_to_object; } case MOD_VOLUME_DISPLACE_MAP_GLOBAL: { - const openvdb::Mat4s object_to_world = matrix_to_openvdb(ctx.object->obmat); + const openvdb::Mat4s object_to_world = matrix_to_openvdb(ctx.object->object_to_world); return index_to_object * object_to_world; } case MOD_VOLUME_DISPLACE_MAP_OBJECT: { if (vdmd.texture_map_object == nullptr) { return index_to_object; } - const openvdb::Mat4s object_to_world = matrix_to_openvdb(ctx.object->obmat); - const openvdb::Mat4s world_to_texture = matrix_to_openvdb(vdmd.texture_map_object->imat); + const openvdb::Mat4s object_to_world = matrix_to_openvdb(ctx.object->object_to_world); + const openvdb::Mat4s world_to_texture = matrix_to_openvdb( + vdmd.texture_map_object->world_to_object); return index_to_object * object_to_world * world_to_texture; } } diff --git a/source/blender/modifiers/intern/MOD_volume_to_mesh.cc b/source/blender/modifiers/intern/MOD_volume_to_mesh.cc index 0065012db97..2a8883dc2eb 100644 --- a/source/blender/modifiers/intern/MOD_volume_to_mesh.cc +++ b/source/blender/modifiers/intern/MOD_volume_to_mesh.cc @@ -77,7 +77,7 @@ static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *u walk(userData, ob, (ID **)&vmmd->object, IDWALK_CB_NOP); } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; @@ -157,8 +157,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * volume_grid); openvdb::math::Transform::Ptr transform = local_grid->transform().copy(); - transform->postMult(openvdb::Mat4d(((float *)vmmd->object->obmat))); - openvdb::Mat4d imat = openvdb::Mat4d((float *)ctx->object->imat); + transform->postMult(openvdb::Mat4d((float *)vmmd->object->object_to_world)); + openvdb::Mat4d imat = openvdb::Mat4d((float *)ctx->object->world_to_object); /* `imat` had floating point issues and wasn't affine. */ imat.setCol(3, openvdb::Vec4d(0, 0, 0, 1)); transform->postMult(imat); diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c index ab6b2941d2f..791eed28a71 100644 --- a/source/blender/modifiers/intern/MOD_warp.c +++ b/source/blender/modifiers/intern/MOD_warp.c @@ -70,9 +70,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla twmd->curfalloff = BKE_curvemapping_copy(wmd->curfalloff); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WarpModifierData *wmd = (WarpModifierData *)md; @@ -95,11 +93,11 @@ static void matrix_from_obj_pchan(float mat[4][4], bPoseChannel *pchan = BKE_pose_channel_find_name(ob->pose, bonename); if (pchan) { float mat_bone_world[4][4]; - mul_m4_m4m4(mat_bone_world, ob->obmat, pchan->pose_mat); + mul_m4_m4m4(mat_bone_world, ob->object_to_world, pchan->pose_mat); mul_m4_m4m4(mat, obinv, mat_bone_world); } else { - mul_m4_m4m4(mat, obinv, ob->obmat); + mul_m4_m4m4(mat, obinv, ob->object_to_world); } } @@ -217,7 +215,7 @@ static void warpModifier_do(WarpModifierData *wmd, BKE_curvemapping_init(wmd->curfalloff); } - invert_m4_m4(obinv, ob->obmat); + invert_m4_m4(obinv, ob->object_to_world); /* Checks that the objects/bones are available. */ matrix_from_obj_pchan(mat_from, obinv, wmd->object_from, wmd->bone_from); diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.cc index a6b274909c0..dce006bda92 100644 --- a/source/blender/modifiers/intern/MOD_wave.c +++ b/source/blender/modifiers/intern/MOD_wave.cc @@ -21,6 +21,7 @@ #include "BKE_context.h" #include "BKE_deform.h" #include "BKE_editmesh.h" +#include "BKE_editmesh_cache.h" #include "BKE_lib_id.h" #include "BKE_lib_query.h" #include "BKE_mesh.h" @@ -55,7 +56,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(wmd, DNA_struct_default_get(WaveModifierData), modifier); } -static bool dependsOnTime(struct Scene *UNUSED(scene), ModifierData *UNUSED(md)) +static bool dependsOnTime(Scene * /*scene*/, ModifierData * /*md*/) { return true; } @@ -79,15 +80,15 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte WaveModifierData *wmd = (WaveModifierData *)md; bool need_transform_relation = false; - if (wmd->objectcenter != NULL) { + if (wmd->objectcenter != nullptr) { DEG_add_object_relation(ctx->node, wmd->objectcenter, DEG_OB_COMP_TRANSFORM, "Wave Modifier"); need_transform_relation = true; } - if (wmd->texture != NULL) { + if (wmd->texture != nullptr) { DEG_add_generic_id_relation(ctx->node, &wmd->texture->id, "Wave Modifier"); - if ((wmd->texmapping == MOD_DISP_MAP_OBJECT) && wmd->map_object != NULL) { + if ((wmd->texmapping == MOD_DISP_MAP_OBJECT) && wmd->map_object != nullptr) { MOD_depsgraph_update_object_bone_relation( ctx->node, wmd->map_object, wmd->map_bone, "Wave Modifier"); need_transform_relation = true; @@ -102,9 +103,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WaveModifierData *wmd = (WaveModifierData *)md; @@ -137,24 +136,24 @@ static void waveModifier_do(WaveModifierData *md, const MDeformVert *dvert; int defgrp_index; float ctime = DEG_get_ctime(ctx->depsgraph); - float minfac = (float)(1.0 / exp(wmd->width * wmd->narrow * wmd->width * wmd->narrow)); + float minfac = float(1.0 / exp(wmd->width * wmd->narrow * wmd->width * wmd->narrow)); float lifefac = wmd->height; - float(*tex_co)[3] = NULL; + float(*tex_co)[3] = nullptr; const int wmd_axis = wmd->flag & (MOD_WAVE_X | MOD_WAVE_Y); const float falloff = wmd->falloff; float falloff_fac = 1.0f; /* when falloff == 0.0f this stays at 1.0f */ const bool invert_group = (wmd->flag & MOD_WAVE_INVERT_VGROUP) != 0; - const float(*vert_normals)[3] = NULL; - if ((wmd->flag & MOD_WAVE_NORM) && (mesh != NULL)) { + const float(*vert_normals)[3] = nullptr; + if ((wmd->flag & MOD_WAVE_NORM) && (mesh != nullptr)) { vert_normals = BKE_mesh_vertex_normals_ensure(mesh); } - if (wmd->objectcenter != NULL) { + if (wmd->objectcenter != nullptr) { float mat[4][4]; /* get the control object's location in local coordinates */ - invert_m4_m4(ob->imat, ob->obmat); - mul_m4_m4m4(mat, ob->imat, wmd->objectcenter->obmat); + invert_m4_m4(ob->world_to_object, ob->object_to_world); + mul_m4_m4m4(mat, ob->world_to_object, wmd->objectcenter->object_to_world); wmd->startx = mat[3][0]; wmd->starty = mat[3][1]; @@ -177,14 +176,14 @@ static void waveModifier_do(WaveModifierData *md, lifefac = 0.0; } else { - lifefac = (float)(wmd->height * (1.0f - sqrtf(lifefac / wmd->damp))); + lifefac = float(wmd->height * (1.0f - sqrtf(lifefac / wmd->damp))); } } } Tex *tex_target = wmd->texture; - if (mesh != NULL && tex_target != NULL) { - tex_co = MEM_malloc_arrayN(verts_num, sizeof(*tex_co), "waveModifier_do tex_co"); + if (mesh != nullptr && tex_target != nullptr) { + tex_co = static_cast<float(*)[3]>(MEM_malloc_arrayN(verts_num, sizeof(*tex_co), __func__)); MOD_get_texture_coords((MappingInfoModifierData *)wmd, ctx, ob, mesh, vertexCos, tex_co); MOD_init_texture((MappingInfoModifierData *)wmd, ctx); @@ -229,7 +228,7 @@ static void waveModifier_do(WaveModifierData *md, amplit -= (ctime - wmd->timeoffs) * wmd->speed; if (wmd->flag & MOD_WAVE_CYCL) { - amplit = (float)fmodf(amplit - wmd->width, 2.0f * wmd->width) + wmd->width; + amplit = float(fmodf(amplit - wmd->width, 2.0f * wmd->width)) + wmd->width; } if (falloff != 0.0f) { @@ -254,7 +253,7 @@ static void waveModifier_do(WaveModifierData *md, /* GAUSSIAN */ if ((falloff_fac != 0.0f) && (amplit > -wmd->width) && (amplit < wmd->width)) { amplit = amplit * wmd->narrow; - amplit = (float)(1.0f / expf(amplit * amplit) - minfac); + amplit = float(1.0f / expf(amplit * amplit) - minfac); /* Apply texture. */ if (tex_co) { @@ -297,58 +296,58 @@ static void deformVerts(ModifierData *md, int verts_num) { WaveModifierData *wmd = (WaveModifierData *)md; - Mesh *mesh_src = NULL; + Mesh *mesh_src = nullptr; if (wmd->flag & MOD_WAVE_NORM) { - mesh_src = MOD_deform_mesh_eval_get(ctx->object, NULL, mesh, vertexCos, verts_num, false); + mesh_src = MOD_deform_mesh_eval_get(ctx->object, nullptr, mesh, vertexCos, verts_num, false); } - else if (wmd->texture != NULL || wmd->defgrp_name[0] != '\0') { - mesh_src = MOD_deform_mesh_eval_get(ctx->object, NULL, mesh, NULL, verts_num, false); + else if (wmd->texture != nullptr || wmd->defgrp_name[0] != '\0') { + mesh_src = MOD_deform_mesh_eval_get(ctx->object, nullptr, mesh, nullptr, verts_num, false); } waveModifier_do(wmd, ctx, ctx->object, mesh_src, vertexCos, verts_num); - if (!ELEM(mesh_src, NULL, mesh)) { - BKE_id_free(NULL, mesh_src); + if (!ELEM(mesh_src, nullptr, mesh)) { + BKE_id_free(nullptr, mesh_src); } } static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx, - struct BMEditMesh *editData, + BMEditMesh *editData, Mesh *mesh, float (*vertexCos)[3], int verts_num) { WaveModifierData *wmd = (WaveModifierData *)md; - Mesh *mesh_src = NULL; + Mesh *mesh_src = nullptr; if (wmd->flag & MOD_WAVE_NORM) { mesh_src = MOD_deform_mesh_eval_get(ctx->object, editData, mesh, vertexCos, verts_num, false); } - else if (wmd->texture != NULL || wmd->defgrp_name[0] != '\0') { - mesh_src = MOD_deform_mesh_eval_get(ctx->object, editData, mesh, NULL, verts_num, false); + else if (wmd->texture != nullptr || wmd->defgrp_name[0] != '\0') { + mesh_src = MOD_deform_mesh_eval_get(ctx->object, editData, mesh, nullptr, verts_num, false); } /* TODO(@campbellbarton): use edit-mode data only (remove this line). */ - if (mesh_src != NULL) { + if (mesh_src != nullptr) { BKE_mesh_wrapper_ensure_mdata(mesh_src); } waveModifier_do(wmd, ctx, ctx->object, mesh_src, vertexCos, verts_num); - if (!ELEM(mesh_src, NULL, mesh)) { + if (!ELEM(mesh_src, nullptr, mesh)) { /* Important not to free `vertexCos` owned by the caller. */ - EditMeshData *edit_data = mesh_src->runtime.edit_data; + EditMeshData *edit_data = mesh_src->runtime->edit_data; if (edit_data->vertexCos == vertexCos) { - edit_data->vertexCos = NULL; + edit_data->vertexCos = nullptr; } - BKE_id_free(NULL, mesh_src); + BKE_id_free(nullptr, mesh_src); } } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *sub, *row, *col; uiLayout *layout = panel->layout; @@ -359,10 +358,12 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetPropSep(layout, true); row = uiLayoutRowWithHeading(layout, true, IFACE_("Motion")); - uiItemR(row, ptr, "use_x", UI_ITEM_R_TOGGLE | UI_ITEM_R_FORCE_BLANK_DECORATE, NULL, ICON_NONE); - uiItemR(row, ptr, "use_y", UI_ITEM_R_TOGGLE | UI_ITEM_R_FORCE_BLANK_DECORATE, NULL, ICON_NONE); + uiItemR( + row, ptr, "use_x", UI_ITEM_R_TOGGLE | UI_ITEM_R_FORCE_BLANK_DECORATE, nullptr, ICON_NONE); + uiItemR( + row, ptr, "use_y", UI_ITEM_R_TOGGLE | UI_ITEM_R_FORCE_BLANK_DECORATE, nullptr, ICON_NONE); - uiItemR(layout, ptr, "use_cyclic", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "use_cyclic", 0, nullptr, ICON_NONE); row = uiLayoutRowWithHeading(layout, true, IFACE_("Along Normals")); uiItemR(row, ptr, "use_normal", 0, "", ICON_NONE); @@ -374,21 +375,21 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) col = uiLayoutColumn(layout, false); uiItemR(col, ptr, "falloff_radius", 0, IFACE_("Falloff"), ICON_NONE); - uiItemR(col, ptr, "height", UI_ITEM_R_SLIDER, NULL, ICON_NONE); - uiItemR(col, ptr, "width", UI_ITEM_R_SLIDER, NULL, ICON_NONE); - uiItemR(col, ptr, "narrowness", UI_ITEM_R_SLIDER, NULL, ICON_NONE); + uiItemR(col, ptr, "height", UI_ITEM_R_SLIDER, nullptr, ICON_NONE); + uiItemR(col, ptr, "width", UI_ITEM_R_SLIDER, nullptr, ICON_NONE); + uiItemR(col, ptr, "narrowness", UI_ITEM_R_SLIDER, nullptr, ICON_NONE); - modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", NULL); + modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", nullptr); modifier_panel_end(layout, ptr); } -static void position_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void position_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *col; uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetPropSep(layout, true); @@ -399,12 +400,12 @@ static void position_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(col, ptr, "start_position_y", 0, "Y", ICON_NONE); } -static void time_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void time_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *col; uiLayout *layout = panel->layout; - PointerRNA *ptr = modifier_panel_get_property_pointers(panel, NULL); + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, nullptr); uiLayoutSetPropSep(layout, true); @@ -412,7 +413,7 @@ static void time_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(col, ptr, "time_offset", 0, IFACE_("Offset"), ICON_NONE); uiItemR(col, ptr, "lifetime", 0, IFACE_("Life"), ICON_NONE); uiItemR(col, ptr, "damping_time", 0, IFACE_("Damping"), ICON_NONE); - uiItemR(col, ptr, "speed", UI_ITEM_R_SLIDER, NULL, ICON_NONE); + uiItemR(col, ptr, "speed", UI_ITEM_R_SLIDER, nullptr, ICON_NONE); } static void texture_panel_draw(const bContext *C, Panel *panel) @@ -425,7 +426,7 @@ static void texture_panel_draw(const bContext *C, Panel *panel) int texture_coords = RNA_enum_get(ptr, "texture_coords"); - uiTemplateID(layout, C, ptr, "texture", "texture.new", NULL, NULL, 0, ICON_NONE, NULL); + uiTemplateID(layout, C, ptr, "texture", "texture.new", nullptr, nullptr, 0, ICON_NONE, nullptr); uiLayoutSetPropSep(layout, true); @@ -448,7 +449,7 @@ static void texture_panel_draw(const bContext *C, Panel *panel) } else if (texture_coords == MOD_DISP_MAP_UV && RNA_enum_get(&ob_ptr, "type") == OB_MESH) { PointerRNA obj_data_ptr = RNA_pointer_get(&ob_ptr, "data"); - uiItemPointerR(col, ptr, "uv_layer", &obj_data_ptr, "uv_layers", NULL, ICON_NONE); + uiItemPointerR(col, ptr, "uv_layer", &obj_data_ptr, "uv_layers", nullptr, ICON_NONE); } } @@ -456,10 +457,10 @@ static void panelRegister(ARegionType *region_type) { PanelType *panel_type = modifier_panel_register(region_type, eModifierType_Wave, panel_draw); modifier_subpanel_register( - region_type, "position", "Start Position", NULL, position_panel_draw, panel_type); - modifier_subpanel_register(region_type, "time", "Time", NULL, time_panel_draw, panel_type); + region_type, "position", "Start Position", nullptr, position_panel_draw, panel_type); + modifier_subpanel_register(region_type, "time", "Time", nullptr, time_panel_draw, panel_type); modifier_subpanel_register( - region_type, "texture", "Texture", NULL, texture_panel_draw, panel_type); + region_type, "texture", "Texture", nullptr, texture_panel_draw, panel_type); } ModifierTypeInfo modifierType_Wave = { @@ -475,23 +476,23 @@ ModifierTypeInfo modifierType_Wave = { /* copyData */ BKE_modifier_copydata_generic, /* deformVerts */ deformVerts, - /* deformMatrices */ NULL, + /* deformMatrices */ nullptr, /* deformVertsEM */ deformVertsEM, - /* deformMatricesEM */ NULL, - /* modifyMesh */ NULL, - /* modifyGeometrySet */ NULL, + /* deformMatricesEM */ nullptr, + /* modifyMesh */ nullptr, + /* modifyGeometrySet */ nullptr, /* initData */ initData, /* requiredDataMask */ requiredDataMask, - /* freeData */ NULL, - /* isDisabled */ NULL, + /* freeData */ nullptr, + /* isDisabled */ nullptr, /* updateDepsgraph */ updateDepsgraph, /* dependsOnTime */ dependsOnTime, /* dependsOnNormals */ dependsOnNormals, /* foreachIDLink */ foreachIDLink, /* foreachTexLink */ foreachTexLink, - /* freeRuntimeData */ NULL, + /* freeRuntimeData */ nullptr, /* panelRegister */ panelRegister, - /* blendWrite */ NULL, - /* blendRead */ NULL, + /* blendWrite */ nullptr, + /* blendRead */ nullptr, }; diff --git a/source/blender/modifiers/intern/MOD_weighted_normal.c b/source/blender/modifiers/intern/MOD_weighted_normal.cc index ba441581770..1ebd5423d39 100644 --- a/source/blender/modifiers/intern/MOD_weighted_normal.c +++ b/source/blender/modifiers/intern/MOD_weighted_normal.cc @@ -39,10 +39,10 @@ #define CLNORS_VALID_VEC_LEN (1e-6f) -typedef struct ModePair { +struct ModePair { float val; /* Contains mode based value (face area / corner angle). */ int index; /* Index value per poly or per loop. */ -} ModePair; +}; /* Sorting function used in modifier, sorts in decreasing order. */ static int modepair_cmp_by_val_inverse(const void *p1, const void *p2) @@ -55,21 +55,21 @@ static int modepair_cmp_by_val_inverse(const void *p1, const void *p2) /* There will be one of those per vertex * (simple case, computing one normal per vertex), or per smooth fan. */ -typedef struct WeightedNormalDataAggregateItem { +struct WeightedNormalDataAggregateItem { float normal[3]; int loops_num; /* Count number of loops using this item so far. */ float curr_val; /* Current max val for this item. */ int curr_strength; /* Current max strength encountered for this item. */ -} WeightedNormalDataAggregateItem; +}; #define NUM_CACHED_INVERSE_POWERS_OF_WEIGHT 128 -typedef struct WeightedNormalData { - const int verts_num; - const int edges_num; - const int loops_num; - const int polys_num; +struct WeightedNormalData { + int verts_num; + int edges_num; + int loops_num; + int polys_num; const MVert *mvert; const float (*vert_normals)[3]; @@ -77,19 +77,19 @@ typedef struct WeightedNormalData { const MLoop *mloop; short (*clnors)[2]; - const bool has_clnors; /* True if clnors already existed, false if we had to create them. */ - const float split_angle; + bool has_clnors; /* True if clnors already existed, false if we had to create them. */ + float split_angle; const MPoly *mpoly; const float (*polynors)[3]; const int *poly_strength; const MDeformVert *dvert; - const int defgrp_index; - const bool use_invert_vgroup; + int defgrp_index; + bool use_invert_vgroup; - const float weight; - const short mode; + float weight; + short mode; /* Lower-level, internal processing data. */ float cached_inverse_powers_of_weight[NUM_CACHED_INVERSE_POWERS_OF_WEIGHT]; @@ -99,7 +99,7 @@ typedef struct WeightedNormalData { ModePair *mode_pair; int *loop_to_poly; -} WeightedNormalData; +}; /** * Check strength of given poly compared to those found so far for that given item @@ -109,7 +109,7 @@ static bool check_item_poly_strength(WeightedNormalData *wn_data, WeightedNormalDataAggregateItem *item_data, const int mp_index) { - BLI_assert(wn_data->poly_strength != NULL); + BLI_assert(wn_data->poly_strength != nullptr); const int mp_strength = wn_data->poly_strength[mp_index]; @@ -141,9 +141,9 @@ static void aggregate_item_normal(WeightedNormalModifierData *wnmd, float *cached_inverse_powers_of_weight = wn_data->cached_inverse_powers_of_weight; - const bool has_vgroup = dvert != NULL; + const bool has_vgroup = dvert != nullptr; const bool vert_of_group = has_vgroup && - BKE_defvert_find_index(&dvert[mv_index], defgrp_index) != NULL; + BKE_defvert_find_index(&dvert[mv_index], defgrp_index) != nullptr; if (has_vgroup && ((vert_of_group && use_invert_vgroup) || (!vert_of_group && !use_invert_vgroup))) { @@ -204,23 +204,24 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, const bool has_clnors = wn_data->has_clnors; const float split_angle = wn_data->split_angle; - MLoopNorSpaceArray lnors_spacearr = {NULL}; + MLoopNorSpaceArray lnors_spacearr = {nullptr}; const bool keep_sharp = (wnmd->flag & MOD_WEIGHTEDNORMAL_KEEP_SHARP) != 0; const bool use_face_influence = (wnmd->flag & MOD_WEIGHTEDNORMAL_FACE_INFLUENCE) != 0 && - poly_strength != NULL; - const bool has_vgroup = dvert != NULL; + poly_strength != nullptr; + const bool has_vgroup = dvert != nullptr; - float(*loop_normals)[3] = NULL; + float(*loop_normals)[3] = nullptr; - WeightedNormalDataAggregateItem *items_data = NULL; + WeightedNormalDataAggregateItem *items_data = nullptr; int items_num = 0; if (keep_sharp) { BLI_bitmap *done_loops = BLI_BITMAP_NEW(loops_num, __func__); /* This will give us loop normal spaces, * we do not actually care about computed loop_normals for now... */ - loop_normals = MEM_calloc_arrayN((size_t)loops_num, sizeof(*loop_normals), __func__); + loop_normals = static_cast<float(*)[3]>( + MEM_calloc_arrayN(size_t(loops_num), sizeof(*loop_normals), __func__)); BKE_mesh_normals_loop_split(mvert, wn_data->vert_normals, verts_num, @@ -235,11 +236,12 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, true, split_angle, &lnors_spacearr, - has_clnors ? clnors : NULL, + has_clnors ? clnors : nullptr, loop_to_poly); items_num = lnors_spacearr.spaces_num; - items_data = MEM_calloc_arrayN((size_t)items_num, sizeof(*items_data), __func__); + items_data = static_cast<WeightedNormalDataAggregateItem *>( + MEM_calloc_arrayN(size_t(items_num), sizeof(*items_data), __func__)); /* In this first loop, we assign each WeightedNormalDataAggregateItem * to its smooth fan of loops (aka lnor space). */ @@ -281,7 +283,8 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, } else { items_num = verts_num; - items_data = MEM_calloc_arrayN((size_t)items_num, sizeof(*items_data), __func__); + items_data = static_cast<WeightedNormalDataAggregateItem *>( + MEM_calloc_arrayN(size_t(items_num), sizeof(*items_data), __func__)); if (use_face_influence) { for (int item_index = 0; item_index < items_num; item_index++) { items_data[item_index].curr_strength = FACE_STRENGTH_WEAK; @@ -301,7 +304,9 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, for (; ml_index < ml_index_end; ml_index++) { const int mv_index = mloop[ml_index].v; WeightedNormalDataAggregateItem *item_data = - keep_sharp ? lnors_spacearr.lspacearr[ml_index]->user_data : &items_data[mv_index]; + keep_sharp ? static_cast<WeightedNormalDataAggregateItem *>( + lnors_spacearr.lspacearr[ml_index]->user_data) : + &items_data[mv_index]; aggregate_item_normal( wnmd, wn_data, item_data, mv_index, mp_index, mp_val, use_face_influence); @@ -310,7 +315,7 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, break; case MOD_WEIGHTEDNORMAL_MODE_ANGLE: case MOD_WEIGHTEDNORMAL_MODE_FACE_ANGLE: - BLI_assert(loop_to_poly != NULL); + BLI_assert(loop_to_poly != nullptr); for (int i = 0; i < loops_num; i++) { const int ml_index = mode_pair[i].index; @@ -319,7 +324,9 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, const int mp_index = loop_to_poly[ml_index]; const int mv_index = mloop[ml_index].v; WeightedNormalDataAggregateItem *item_data = - keep_sharp ? lnors_spacearr.lspacearr[ml_index]->user_data : &items_data[mv_index]; + keep_sharp ? static_cast<WeightedNormalDataAggregateItem *>( + lnors_spacearr.lspacearr[ml_index]->user_data) : + &items_data[mv_index]; aggregate_item_normal( wnmd, wn_data, item_data, mv_index, mp_index, ml_val, use_face_influence); @@ -342,7 +349,8 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, * (before this modifier is applied, at start of this function), * so no need to recompute them here. */ for (int ml_index = 0; ml_index < loops_num; ml_index++) { - WeightedNormalDataAggregateItem *item_data = lnors_spacearr.lspacearr[ml_index]->user_data; + WeightedNormalDataAggregateItem *item_data = static_cast<WeightedNormalDataAggregateItem *>( + lnors_spacearr.lspacearr[ml_index]->user_data); if (!is_zero_v3(item_data->normal)) { copy_v3_v3(loop_normals[ml_index], item_data->normal); } @@ -371,8 +379,8 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, /* NOTE: in theory, we could avoid this extra allocation & copying... * But think we can live with it for now, * and it makes code simpler & cleaner. */ - float(*vert_normals)[3] = MEM_calloc_arrayN( - (size_t)verts_num, sizeof(*loop_normals), __func__); + float(*vert_normals)[3] = static_cast<float(*)[3]>( + MEM_calloc_arrayN(size_t(verts_num), sizeof(*loop_normals), __func__)); for (int ml_index = 0; ml_index < loops_num; ml_index++) { const int mv_index = mloop[ml_index].v; @@ -395,7 +403,8 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, MEM_freeN(vert_normals); } else { - loop_normals = MEM_calloc_arrayN((size_t)loops_num, sizeof(*loop_normals), __func__); + loop_normals = static_cast<float(*)[3]>( + MEM_calloc_arrayN(size_t(loops_num), sizeof(*loop_normals), __func__)); BKE_mesh_normals_loop_split(mvert, wn_data->vert_normals, @@ -410,8 +419,8 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, polys_num, true, split_angle, - NULL, - has_clnors ? clnors : NULL, + nullptr, + has_clnors ? clnors : nullptr, loop_to_poly); for (int ml_index = 0; ml_index < loops_num; ml_index++) { @@ -453,7 +462,8 @@ static void wn_face_area(WeightedNormalModifierData *wnmd, WeightedNormalData *w const MPoly *mp; int mp_index; - ModePair *face_area = MEM_malloc_arrayN((size_t)polys_num, sizeof(*face_area), __func__); + ModePair *face_area = static_cast<ModePair *>( + MEM_malloc_arrayN(size_t(polys_num), sizeof(*face_area), __func__)); ModePair *f_area = face_area; for (mp_index = 0, mp = mpoly; mp_index < polys_num; mp_index++, mp++, f_area++) { @@ -479,21 +489,24 @@ static void wn_corner_angle(WeightedNormalModifierData *wnmd, WeightedNormalData const MPoly *mp; int mp_index; - int *loop_to_poly = MEM_malloc_arrayN((size_t)loops_num, sizeof(*loop_to_poly), __func__); + int *loop_to_poly = static_cast<int *>( + MEM_malloc_arrayN(size_t(loops_num), sizeof(*loop_to_poly), __func__)); - ModePair *corner_angle = MEM_malloc_arrayN((size_t)loops_num, sizeof(*corner_angle), __func__); + ModePair *corner_angle = static_cast<ModePair *>( + MEM_malloc_arrayN(size_t(loops_num), sizeof(*corner_angle), __func__)); for (mp_index = 0, mp = mpoly; mp_index < polys_num; mp_index++, mp++) { const MLoop *ml_start = &mloop[mp->loopstart]; - float *index_angle = MEM_malloc_arrayN((size_t)mp->totloop, sizeof(*index_angle), __func__); + float *index_angle = static_cast<float *>( + MEM_malloc_arrayN(size_t(mp->totloop), sizeof(*index_angle), __func__)); BKE_mesh_calc_poly_angles(mp, ml_start, mvert, index_angle); ModePair *c_angl = &corner_angle[mp->loopstart]; float *angl = index_angle; for (int ml_index = mp->loopstart; ml_index < mp->loopstart + mp->totloop; ml_index++, c_angl++, angl++) { - c_angl->val = (float)M_PI - *angl; + c_angl->val = float(M_PI) - *angl; c_angl->index = ml_index; loop_to_poly[ml_index] = mp_index; @@ -520,15 +533,18 @@ static void wn_face_with_angle(WeightedNormalModifierData *wnmd, WeightedNormalD const MPoly *mp; int mp_index; - int *loop_to_poly = MEM_malloc_arrayN((size_t)loops_num, sizeof(*loop_to_poly), __func__); + int *loop_to_poly = static_cast<int *>( + MEM_malloc_arrayN(size_t(loops_num), sizeof(*loop_to_poly), __func__)); - ModePair *combined = MEM_malloc_arrayN((size_t)loops_num, sizeof(*combined), __func__); + ModePair *combined = static_cast<ModePair *>( + MEM_malloc_arrayN(size_t(loops_num), sizeof(*combined), __func__)); for (mp_index = 0, mp = mpoly; mp_index < polys_num; mp_index++, mp++) { const MLoop *ml_start = &mloop[mp->loopstart]; float face_area = BKE_mesh_calc_poly_area(mp, ml_start, mvert); - float *index_angle = MEM_malloc_arrayN((size_t)mp->totloop, sizeof(*index_angle), __func__); + float *index_angle = static_cast<float *>( + MEM_malloc_arrayN(size_t(mp->totloop), sizeof(*index_angle), __func__)); BKE_mesh_calc_poly_angles(mp, ml_start, mvert, index_angle); ModePair *cmbnd = &combined[mp->loopstart]; @@ -536,7 +552,7 @@ static void wn_face_with_angle(WeightedNormalModifierData *wnmd, WeightedNormalD for (int ml_index = mp->loopstart; ml_index < mp->loopstart + mp->totloop; ml_index++, cmbnd++, angl++) { /* In this case val is product of corner angle and face area. */ - cmbnd->val = ((float)M_PI - *angl) * face_area; + cmbnd->val = (float(M_PI) - *angl) * face_area; cmbnd->index = ml_index; loop_to_poly[ml_index] = mp_index; @@ -573,7 +589,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } Mesh *result; - result = (Mesh *)BKE_id_copy_ex(NULL, &mesh->id, NULL, LIB_ID_COPY_LOCALIZE); + result = (Mesh *)BKE_id_copy_ex(nullptr, &mesh->id, nullptr, LIB_ID_COPY_LOCALIZE); const int verts_num = result->totvert; const int edges_num = result->totedge; @@ -590,59 +606,59 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * * If weight < 50 then more weight given to faces with lesser vals. However current calculation * does not converge to min/max. */ - float weight = ((float)wnmd->weight) / 50.0f; + float weight = float(wnmd->weight) / 50.0f; if (wnmd->weight == 100) { - weight = (float)SHRT_MAX; + weight = float(SHRT_MAX); } else if (wnmd->weight == 1) { - weight = 1 / (float)SHRT_MAX; + weight = 1 / float(SHRT_MAX); } else if ((weight - 1) * 25 > 1) { weight = (weight - 1) * 25; } const float split_angle = mesh->smoothresh; - short(*clnors)[2] = CustomData_get_layer(&result->ldata, CD_CUSTOMLOOPNORMAL); + short(*clnors)[2] = static_cast<short(*)[2]>( + CustomData_get_layer(&result->ldata, CD_CUSTOMLOOPNORMAL)); /* Keep info whether we had clnors, * it helps when generating clnor spaces and default normals. */ - const bool has_clnors = clnors != NULL; + const bool has_clnors = clnors != nullptr; if (!clnors) { - clnors = CustomData_add_layer( - &result->ldata, CD_CUSTOMLOOPNORMAL, CD_SET_DEFAULT, NULL, loops_num); + clnors = static_cast<short(*)[2]>(CustomData_add_layer( + &result->ldata, CD_CUSTOMLOOPNORMAL, CD_SET_DEFAULT, nullptr, loops_num)); } const MDeformVert *dvert; int defgrp_index; MOD_get_vgroup(ctx->object, mesh, wnmd->defgrp_name, &dvert, &defgrp_index); - WeightedNormalData wn_data = { - .verts_num = verts_num, - .edges_num = edges_num, - .loops_num = loops_num, - .polys_num = polys_num, + WeightedNormalData wn_data{}; + wn_data.verts_num = verts_num; + wn_data.edges_num = edges_num; + wn_data.loops_num = loops_num; + wn_data.polys_num = polys_num; - .mvert = mvert, - .vert_normals = BKE_mesh_vertex_normals_ensure(result), - .medge = medge, + wn_data.mvert = mvert; + wn_data.vert_normals = BKE_mesh_vertex_normals_ensure(result); + wn_data.medge = medge; - .mloop = mloop, - .clnors = clnors, - .has_clnors = has_clnors, - .split_angle = split_angle, + wn_data.mloop = mloop; + wn_data.clnors = clnors; + wn_data.has_clnors = has_clnors; + wn_data.split_angle = split_angle; - .mpoly = mpoly, - .polynors = BKE_mesh_poly_normals_ensure(mesh), - .poly_strength = CustomData_get_layer_named( - &result->pdata, CD_PROP_INT32, MOD_WEIGHTEDNORMALS_FACEWEIGHT_CDLAYER_ID), + wn_data.mpoly = mpoly; + wn_data.polynors = BKE_mesh_poly_normals_ensure(mesh); + wn_data.poly_strength = static_cast<const int *>(CustomData_get_layer_named( + &result->pdata, CD_PROP_INT32, MOD_WEIGHTEDNORMALS_FACEWEIGHT_CDLAYER_ID)); - .dvert = dvert, - .defgrp_index = defgrp_index, - .use_invert_vgroup = (wnmd->flag & MOD_WEIGHTEDNORMAL_INVERT_VGROUP) != 0, + wn_data.dvert = dvert; + wn_data.defgrp_index = defgrp_index; + wn_data.use_invert_vgroup = (wnmd->flag & MOD_WEIGHTEDNORMAL_INVERT_VGROUP) != 0; - .weight = weight, - .mode = wnmd->mode, - }; + wn_data.weight = weight; + wn_data.mode = wnmd->mode; switch (wnmd->mode) { case MOD_WEIGHTEDNORMAL_MODE_FACE: @@ -660,7 +676,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * MEM_SAFE_FREE(wn_data.mode_pair); MEM_SAFE_FREE(wn_data.items_data); - result->runtime.is_original_bmesh = false; + result->runtime->is_original_bmesh = false; return result; } @@ -674,9 +690,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(wnmd, DNA_struct_default_get(WeightedNormalModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WeightedNormalModifierData *wnmd = (WeightedNormalModifierData *)md; @@ -691,12 +705,12 @@ static void requiredDataMask(Object *UNUSED(ob), } } -static bool dependsOnNormals(ModifierData *UNUSED(md)) +static bool dependsOnNormals(ModifierData * /*md*/) { return true; } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *col; uiLayout *layout = panel->layout; @@ -706,16 +720,16 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetPropSep(layout, true); - uiItemR(layout, ptr, "mode", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "mode", 0, nullptr, ICON_NONE); uiItemR(layout, ptr, "weight", 0, IFACE_("Weight"), ICON_NONE); uiItemR(layout, ptr, "thresh", 0, IFACE_("Threshold"), ICON_NONE); col = uiLayoutColumn(layout, false); - uiItemR(col, ptr, "keep_sharp", 0, NULL, ICON_NONE); - uiItemR(col, ptr, "use_face_influence", 0, NULL, ICON_NONE); + uiItemR(col, ptr, "keep_sharp", 0, nullptr, ICON_NONE); + uiItemR(col, ptr, "use_face_influence", 0, nullptr, ICON_NONE); - modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", NULL); + modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", nullptr); modifier_panel_end(layout, ptr); } @@ -737,24 +751,24 @@ ModifierTypeInfo modifierType_WeightedNormal = { /* copyData */ BKE_modifier_copydata_generic, - /* deformVerts */ NULL, - /* deformMatrices */ NULL, - /* deformVertsEM */ NULL, - /* deformMatricesEM */ NULL, + /* deformVerts */ nullptr, + /* deformMatrices */ nullptr, + /* deformVertsEM */ nullptr, + /* deformMatricesEM */ nullptr, /* modifyMesh */ modifyMesh, - /* modifyGeometrySet */ NULL, + /* modifyGeometrySet */ nullptr, /* initData */ initData, /* requiredDataMask */ requiredDataMask, - /* freeData */ NULL, - /* isDisabled */ NULL, - /* updateDepsgraph */ NULL, - /* dependsOnTime */ NULL, + /* freeData */ nullptr, + /* isDisabled */ nullptr, + /* updateDepsgraph */ nullptr, + /* dependsOnTime */ nullptr, /* dependsOnNormals */ dependsOnNormals, - /* foreachIDLink */ NULL, - /* foreachTexLink */ NULL, - /* freeRuntimeData */ NULL, + /* foreachIDLink */ nullptr, + /* foreachTexLink */ nullptr, + /* freeRuntimeData */ nullptr, /* panelRegister */ panelRegister, - /* blendWrite */ NULL, - /* blendRead */ NULL, + /* blendWrite */ nullptr, + /* blendRead */ nullptr, }; diff --git a/source/blender/modifiers/intern/MOD_weightvg_util.h b/source/blender/modifiers/intern/MOD_weightvg_util.h index 2d86518aaa0..f6ff03fae18 100644 --- a/source/blender/modifiers/intern/MOD_weightvg_util.h +++ b/source/blender/modifiers/intern/MOD_weightvg_util.h @@ -7,6 +7,10 @@ #pragma once +#ifdef __cplusplus +extern "C" { +#endif + struct CurveMapping; struct MDeformVert; struct MDeformWeight; @@ -101,3 +105,7 @@ void weightvg_update_vg(struct MDeformVert *dvert, * Common vertex weight mask interface elements for the modifier panels. */ void weightvg_ui_common(const bContext *C, PointerRNA *ob_ptr, PointerRNA *ptr, uiLayout *layout); + +#ifdef __cplusplus +} +#endif diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.cc index 4002718d06c..e4fbca633f7 100644 --- a/source/blender/modifiers/intern/MOD_weightvgedit.c +++ b/source/blender/modifiers/intern/MOD_weightvgedit.cc @@ -5,7 +5,7 @@ * \ingroup modifiers */ -#include <string.h> +#include <cstring> #include "BLI_utildefines.h" @@ -81,9 +81,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla twmd->cmap_curve = BKE_curvemapping_copy(wmd->cmap_curve); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md; @@ -98,7 +96,7 @@ static void requiredDataMask(Object *UNUSED(ob), /* No need to ask for CD_PREVIEW_MLOOPCOL... */ } -static bool dependsOnTime(struct Scene *UNUSED(scene), ModifierData *md) +static bool dependsOnTime(Scene * /*scene*/, ModifierData *md) { WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md; @@ -126,10 +124,10 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md; bool need_transform_relation = false; - if (wmd->mask_texture != NULL) { + if (wmd->mask_texture != nullptr) { DEG_add_generic_id_relation(ctx->node, &wmd->mask_texture->id, "WeightVGEdit Modifier"); - if (wmd->mask_tex_map_obj != NULL && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) { + if (wmd->mask_tex_map_obj != nullptr && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) { MOD_depsgraph_update_object_bone_relation( ctx->node, wmd->mask_tex_map_obj, wmd->mask_tex_map_bone, "WeightVGEdit Modifier"); need_transform_relation = true; @@ -144,9 +142,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } -static bool isDisabled(const struct Scene *UNUSED(scene), - ModifierData *md, - bool UNUSED(useRenderParams)) +static bool isDisabled(const Scene * /*scene*/, ModifierData *md, bool /*useRenderParams*/) { WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md; /* If no vertex group, bypass. */ @@ -155,11 +151,11 @@ static bool isDisabled(const struct Scene *UNUSED(scene), static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) { - BLI_assert(mesh != NULL); + BLI_assert(mesh != nullptr); WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md; - MDeformWeight **dw = NULL; + MDeformWeight **dw = nullptr; float *org_w; /* Array original weights. */ float *new_w; /* Array new weights. */ int i; @@ -190,7 +186,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } const bool has_mdef = CustomData_has_layer(&mesh->vdata, CD_MDEFORMVERT); - /* If no vertices were ever added to an object's vgroup, dvert might be NULL. */ + /* If no vertices were ever added to an object's vgroup, dvert might be nullptr. */ if (!has_mdef) { /* If this modifier is not allowed to add vertices, just return. */ if (!do_add) { @@ -206,9 +202,10 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } /* Get org weights, assuming 0.0 for vertices not in given vgroup. */ - org_w = MEM_malloc_arrayN(verts_num, sizeof(float), "WeightVGEdit Modifier, org_w"); - new_w = MEM_malloc_arrayN(verts_num, sizeof(float), "WeightVGEdit Modifier, new_w"); - dw = MEM_malloc_arrayN(verts_num, sizeof(MDeformWeight *), "WeightVGEdit Modifier, dw"); + org_w = static_cast<float *>(MEM_malloc_arrayN(verts_num, sizeof(float), __func__)); + new_w = static_cast<float *>(MEM_malloc_arrayN(verts_num, sizeof(float), __func__)); + dw = static_cast<MDeformWeight **>( + MEM_malloc_arrayN(verts_num, sizeof(MDeformWeight *), __func__)); for (i = 0; i < verts_num; i++) { dw[i] = BKE_defvert_find_index(&dvert[i], defgrp_index); if (dw[i]) { @@ -223,7 +220,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * const bool do_invert_mapping = (wmd->edit_flags & MOD_WVG_INVERT_FALLOFF) != 0; const bool do_normalize = (wmd->edit_flags & MOD_WVG_EDIT_WEIGHTS_NORMALIZE) != 0; if (do_invert_mapping || wmd->falloff_type != MOD_WVG_MAPPING_NONE) { - RNG *rng = NULL; + RNG *rng = nullptr; if (wmd->falloff_type == MOD_WVG_MAPPING_RANDOM) { rng = BLI_rng_new_srandom(BLI_ghashutil_strhash(ctx->object->id.name + 2)); @@ -237,10 +234,10 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } /* Do masking. */ - struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); weightvg_do_mask(ctx, verts_num, - NULL, + nullptr, org_w, new_w, ctx->object, @@ -261,7 +258,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * defgrp_index, dw, verts_num, - NULL, + nullptr, org_w, do_add, wmd->add_threshold, @@ -272,7 +269,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * /* If weight preview enabled... */ #if 0 /* XXX Currently done in mod stack :/ */ if (do_prev) { - DM_update_weight_mcol(ob, dm, 0, org_w, 0, NULL); + DM_update_weight_mcol(ob, dm, 0, org_w, 0, nullptr); } #endif @@ -281,13 +278,13 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * MEM_freeN(new_w); MEM_freeN(dw); - mesh->runtime.is_original_bmesh = false; + mesh->runtime->is_original_bmesh = false; /* Return the vgroup-modified mesh. */ return mesh; } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *sub, *col, *row; uiLayout *layout = panel->layout; @@ -298,9 +295,9 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetPropSep(layout, true); col = uiLayoutColumn(layout, true); - uiItemPointerR(col, ptr, "vertex_group", &ob_ptr, "vertex_groups", NULL, ICON_NONE); + uiItemPointerR(col, ptr, "vertex_group", &ob_ptr, "vertex_groups", nullptr, ICON_NONE); - uiItemR(layout, ptr, "default_weight", UI_ITEM_R_SLIDER, NULL, ICON_NONE); + uiItemR(layout, ptr, "default_weight", UI_ITEM_R_SLIDER, nullptr, ICON_NONE); col = uiLayoutColumnWithHeading(layout, false, IFACE_("Group Add")); row = uiLayoutRow(col, true); @@ -324,12 +321,12 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(sub, ptr, "remove_threshold", UI_ITEM_R_SLIDER, IFACE_("Threshold"), ICON_NONE); uiItemDecoratorR(row, ptr, "remove_threshold", 0); - uiItemR(layout, ptr, "normalize", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "normalize", 0, nullptr, ICON_NONE); modifier_panel_end(layout, ptr); } -static void falloff_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void falloff_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *row, *sub; uiLayout *layout = panel->layout; @@ -364,12 +361,12 @@ static void panelRegister(ARegionType *region_type) PanelType *panel_type = modifier_panel_register( region_type, eModifierType_WeightVGEdit, panel_draw); modifier_subpanel_register( - region_type, "falloff", "Falloff", NULL, falloff_panel_draw, panel_type); + region_type, "falloff", "Falloff", nullptr, falloff_panel_draw, panel_type); modifier_subpanel_register( - region_type, "influence", "Influence", NULL, influence_panel_draw, panel_type); + region_type, "influence", "Influence", nullptr, influence_panel_draw, panel_type); } -static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID * /*id_owner*/, const ModifierData *md) { const WeightVGEditModifierData *wmd = (const WeightVGEditModifierData *)md; @@ -402,12 +399,12 @@ ModifierTypeInfo modifierType_WeightVGEdit = { /* copyData */ copyData, - /* deformVerts */ NULL, - /* deformMatrices */ NULL, - /* deformVertsEM */ NULL, - /* deformMatricesEM */ NULL, + /* deformVerts */ nullptr, + /* deformMatrices */ nullptr, + /* deformVertsEM */ nullptr, + /* deformMatricesEM */ nullptr, /* modifyMesh */ modifyMesh, - /* modifyGeometrySet */ NULL, + /* modifyGeometrySet */ nullptr, /* initData */ initData, /* requiredDataMask */ requiredDataMask, @@ -415,10 +412,10 @@ ModifierTypeInfo modifierType_WeightVGEdit = { /* isDisabled */ isDisabled, /* updateDepsgraph */ updateDepsgraph, /* dependsOnTime */ dependsOnTime, - /* dependsOnNormals */ NULL, + /* dependsOnNormals */ nullptr, /* foreachIDLink */ foreachIDLink, /* foreachTexLink */ foreachTexLink, - /* freeRuntimeData */ NULL, + /* freeRuntimeData */ nullptr, /* panelRegister */ panelRegister, /* blendWrite */ blendWrite, /* blendRead */ blendRead, diff --git a/source/blender/modifiers/intern/MOD_weightvgmix.c b/source/blender/modifiers/intern/MOD_weightvgmix.cc index 1481ffad82c..d860e93d535 100644 --- a/source/blender/modifiers/intern/MOD_weightvgmix.c +++ b/source/blender/modifiers/intern/MOD_weightvgmix.cc @@ -129,9 +129,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(wmd, DNA_struct_default_get(WeightVGMixModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WeightVGMixModifierData *wmd = (WeightVGMixModifierData *)md; @@ -146,7 +144,7 @@ static void requiredDataMask(Object *UNUSED(ob), /* No need to ask for CD_PREVIEW_MLOOPCOL... */ } -static bool dependsOnTime(struct Scene *UNUSED(scene), ModifierData *md) +static bool dependsOnTime(Scene * /*scene*/, ModifierData *md) { WeightVGMixModifierData *wmd = (WeightVGMixModifierData *)md; @@ -174,10 +172,10 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte WeightVGMixModifierData *wmd = (WeightVGMixModifierData *)md; bool need_transform_relation = false; - if (wmd->mask_texture != NULL) { + if (wmd->mask_texture != nullptr) { DEG_add_generic_id_relation(ctx->node, &wmd->mask_texture->id, "WeightVGMix Modifier"); - if (wmd->mask_tex_map_obj != NULL && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) { + if (wmd->mask_tex_map_obj != nullptr && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) { MOD_depsgraph_update_object_bone_relation( ctx->node, wmd->mask_tex_map_obj, wmd->mask_tex_map_bone, "WeightVGMix Modifier"); need_transform_relation = true; @@ -192,9 +190,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } -static bool isDisabled(const struct Scene *UNUSED(scene), - ModifierData *md, - bool UNUSED(useRenderParams)) +static bool isDisabled(const Scene * /*scene*/, ModifierData *md, bool /*useRenderParams*/) { WeightVGMixModifierData *wmd = (WeightVGMixModifierData *)md; /* If no vertex group, bypass. */ @@ -203,14 +199,14 @@ static bool isDisabled(const struct Scene *UNUSED(scene), static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) { - BLI_assert(mesh != NULL); + BLI_assert(mesh != nullptr); WeightVGMixModifierData *wmd = (WeightVGMixModifierData *)md; MDeformWeight **dw1, **tdw1, **dw2, **tdw2; float *org_w; float *new_w; - int *tidx, *indices = NULL; + int *tidx, *indices = nullptr; int index_num = 0; int i; const bool invert_vgroup_mask = (wmd->flag & MOD_WVG_MIX_INVERT_VGROUP_MASK) != 0; @@ -255,7 +251,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } const bool has_mdef = CustomData_has_layer(&mesh->vdata, CD_MDEFORMVERT); - /* If no vertices were ever added to an object's vgroup, dvert might be NULL. */ + /* If no vertices were ever added to an object's vgroup, dvert might be nullptr. */ if (!has_mdef) { /* If not affecting all vertices, just return. */ if (wmd->mix_set != MOD_WVG_SET_ALL) { @@ -271,9 +267,11 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } /* Find out which vertices to work on. */ - tidx = MEM_malloc_arrayN(verts_num, sizeof(int), "WeightVGMix Modifier, tidx"); - tdw1 = MEM_malloc_arrayN(verts_num, sizeof(MDeformWeight *), "WeightVGMix Modifier, tdw1"); - tdw2 = MEM_malloc_arrayN(verts_num, sizeof(MDeformWeight *), "WeightVGMix Modifier, tdw2"); + tidx = static_cast<int *>(MEM_malloc_arrayN(verts_num, sizeof(int), __func__)); + tdw1 = static_cast<MDeformWeight **>( + MEM_malloc_arrayN(verts_num, sizeof(MDeformWeight *), __func__)); + tdw2 = static_cast<MDeformWeight **>( + MEM_malloc_arrayN(verts_num, sizeof(MDeformWeight *), __func__)); switch (wmd->mix_set) { case MOD_WVG_SET_A: /* All vertices in first vgroup. */ @@ -283,7 +281,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * tdw1[index_num] = dw; tdw2[index_num] = (defgrp_index_other >= 0) ? BKE_defvert_find_index(&dvert[i], defgrp_index_other) : - NULL; + nullptr; tidx[index_num++] = i; } } @@ -293,7 +291,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * for (i = 0; i < verts_num; i++) { MDeformWeight *dw = (defgrp_index_other >= 0) ? BKE_defvert_find_index(&dvert[i], defgrp_index_other) : - NULL; + nullptr; if (dw) { tdw1[index_num] = BKE_defvert_find_index(&dvert[i], defgrp_index); tdw2[index_num] = dw; @@ -307,7 +305,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * MDeformWeight *adw = BKE_defvert_find_index(&dvert[i], defgrp_index); MDeformWeight *bdw = (defgrp_index_other >= 0) ? BKE_defvert_find_index(&dvert[i], defgrp_index_other) : - NULL; + nullptr; if (adw || bdw) { tdw1[index_num] = adw; tdw2[index_num] = bdw; @@ -321,7 +319,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * MDeformWeight *adw = BKE_defvert_find_index(&dvert[i], defgrp_index); MDeformWeight *bdw = (defgrp_index_other >= 0) ? BKE_defvert_find_index(&dvert[i], defgrp_index_other) : - NULL; + nullptr; if (adw && bdw) { tdw1[index_num] = adw; tdw2[index_num] = bdw; @@ -336,7 +334,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * tdw1[i] = BKE_defvert_find_index(&dvert[i], defgrp_index); tdw2[i] = (defgrp_index_other >= 0) ? BKE_defvert_find_index(&dvert[i], defgrp_index_other) : - NULL; + nullptr; } index_num = -1; break; @@ -349,12 +347,14 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * return mesh; } if (index_num != -1) { - indices = MEM_malloc_arrayN(index_num, sizeof(int), "WeightVGMix Modifier, indices"); + indices = static_cast<int *>(MEM_malloc_arrayN(index_num, sizeof(int), __func__)); memcpy(indices, tidx, sizeof(int) * index_num); - dw1 = MEM_malloc_arrayN(index_num, sizeof(MDeformWeight *), "WeightVGMix Modifier, dw1"); + dw1 = static_cast<MDeformWeight **>( + MEM_malloc_arrayN(index_num, sizeof(MDeformWeight *), __func__)); memcpy(dw1, tdw1, sizeof(MDeformWeight *) * index_num); MEM_freeN(tdw1); - dw2 = MEM_malloc_arrayN(index_num, sizeof(MDeformWeight *), "WeightVGMix Modifier, dw2"); + dw2 = static_cast<MDeformWeight **>( + MEM_malloc_arrayN(index_num, sizeof(MDeformWeight *), __func__)); memcpy(dw2, tdw2, sizeof(MDeformWeight *) * index_num); MEM_freeN(tdw2); } @@ -367,8 +367,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } MEM_freeN(tidx); - org_w = MEM_malloc_arrayN(index_num, sizeof(float), "WeightVGMix Modifier, org_w"); - new_w = MEM_malloc_arrayN(index_num, sizeof(float), "WeightVGMix Modifier, new_w"); + org_w = static_cast<float *>(MEM_malloc_arrayN(index_num, sizeof(float), __func__)); + new_w = static_cast<float *>(MEM_malloc_arrayN(index_num, sizeof(float), __func__)); /* Mix weights. */ for (i = 0; i < index_num; i++) { @@ -390,7 +390,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } /* Do masking. */ - struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); weightvg_do_mask(ctx, index_num, indices, @@ -438,13 +438,13 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * MEM_freeN(dw2); MEM_SAFE_FREE(indices); - mesh->runtime.is_original_bmesh = false; + mesh->runtime->is_original_bmesh = false; /* Return the vgroup-modified mesh. */ return mesh; } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; @@ -453,20 +453,20 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetPropSep(layout, true); - modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group_a", "invert_vertex_group_a", NULL); + modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group_a", "invert_vertex_group_a", nullptr); modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group_b", "invert_vertex_group_b", IFACE_("B")); uiItemS(layout); - uiItemR(layout, ptr, "default_weight_a", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "default_weight_a", 0, nullptr, ICON_NONE); uiItemR(layout, ptr, "default_weight_b", 0, IFACE_("B"), ICON_NONE); uiItemS(layout); - uiItemR(layout, ptr, "mix_set", 0, NULL, ICON_NONE); - uiItemR(layout, ptr, "mix_mode", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "mix_set", 0, nullptr, ICON_NONE); + uiItemR(layout, ptr, "mix_mode", 0, nullptr, ICON_NONE); - uiItemR(layout, ptr, "normalize", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "normalize", 0, nullptr, ICON_NONE); modifier_panel_end(layout, ptr); } @@ -486,7 +486,7 @@ static void panelRegister(ARegionType *region_type) PanelType *panel_type = modifier_panel_register( region_type, eModifierType_WeightVGMix, panel_draw); modifier_subpanel_register( - region_type, "influence", "Influence", NULL, influence_panel_draw, panel_type); + region_type, "influence", "Influence", nullptr, influence_panel_draw, panel_type); } ModifierTypeInfo modifierType_WeightVGMix = { @@ -501,24 +501,24 @@ ModifierTypeInfo modifierType_WeightVGMix = { /* copyData */ BKE_modifier_copydata_generic, - /* deformVerts */ NULL, - /* deformMatrices */ NULL, - /* deformVertsEM */ NULL, - /* deformMatricesEM */ NULL, + /* deformVerts */ nullptr, + /* deformMatrices */ nullptr, + /* deformVertsEM */ nullptr, + /* deformMatricesEM */ nullptr, /* modifyMesh */ modifyMesh, - /* modifyGeometrySet */ NULL, + /* modifyGeometrySet */ nullptr, /* initData */ initData, /* requiredDataMask */ requiredDataMask, - /* freeData */ NULL, + /* freeData */ nullptr, /* isDisabled */ isDisabled, /* updateDepsgraph */ updateDepsgraph, /* dependsOnTime */ dependsOnTime, - /* dependsOnNormals */ NULL, + /* dependsOnNormals */ nullptr, /* foreachIDLink */ foreachIDLink, /* foreachTexLink */ foreachTexLink, - /* freeRuntimeData */ NULL, + /* freeRuntimeData */ nullptr, /* panelRegister */ panelRegister, - /* blendWrite */ NULL, - /* blendRead */ NULL, + /* blendWrite */ nullptr, + /* blendRead */ nullptr, }; diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.cc index 80c49745003..e4e03a2cbc9 100644 --- a/source/blender/modifiers/intern/MOD_weightvgproximity.c +++ b/source/blender/modifiers/intern/MOD_weightvgproximity.cc @@ -69,7 +69,7 @@ /* Util macro. */ #define OUT_OF_MEMORY() ((void)printf("WeightVGProximity: Out of memory.\n")) -typedef struct Vert2GeomData { +struct Vert2GeomData { /* Read-only data */ float (*v_cos)[3]; @@ -79,17 +79,17 @@ typedef struct Vert2GeomData { /* Write data, but not needing locking (two different threads will never write same index). */ float *dist[3]; -} Vert2GeomData; +}; /** * Data which is localized to each computed chunk * (i.e. thread-safe, and with continuous subset of index range). */ -typedef struct Vert2GeomDataChunk { +struct Vert2GeomDataChunk { /* Read-only data */ float last_hit_co[3][3]; bool is_init[3]; -} Vert2GeomDataChunk; +}; /** * Callback used by BLI_task 'for loop' helper. @@ -98,8 +98,8 @@ static void vert2geom_task_cb_ex(void *__restrict userdata, const int iter, const TaskParallelTLS *__restrict tls) { - Vert2GeomData *data = userdata; - Vert2GeomDataChunk *data_chunk = tls->userdata_chunk; + Vert2GeomData *data = static_cast<Vert2GeomData *>(userdata); + Vert2GeomDataChunk *data_chunk = static_cast<Vert2GeomDataChunk *>(tls->userdata_chunk); float tmp_co[3]; int i; @@ -151,17 +151,17 @@ static void get_vert2geom_distance(int verts_num, Mesh *target, const SpaceTransform *loc2trgt) { - Vert2GeomData data = {0}; + Vert2GeomData data{}; Vert2GeomDataChunk data_chunk = {{{0}}}; - BVHTreeFromMesh treeData_v = {NULL}; - BVHTreeFromMesh treeData_e = {NULL}; - BVHTreeFromMesh treeData_f = {NULL}; + BVHTreeFromMesh treeData_v = {nullptr}; + BVHTreeFromMesh treeData_e = {nullptr}; + BVHTreeFromMesh treeData_f = {nullptr}; if (dist_v) { /* Create a BVH-tree of the given target's verts. */ BKE_bvhtree_from_mesh_get(&treeData_v, target, BVHTREE_FROM_VERTS, 2); - if (treeData_v.tree == NULL) { + if (treeData_v.tree == nullptr) { OUT_OF_MEMORY(); return; } @@ -169,7 +169,7 @@ static void get_vert2geom_distance(int verts_num, if (dist_e) { /* Create a BVH-tree of the given target's edges. */ BKE_bvhtree_from_mesh_get(&treeData_e, target, BVHTREE_FROM_EDGES, 2); - if (treeData_e.tree == NULL) { + if (treeData_e.tree == nullptr) { OUT_OF_MEMORY(); return; } @@ -177,7 +177,7 @@ static void get_vert2geom_distance(int verts_num, if (dist_f) { /* Create a BVH-tree of the given target's faces. */ BKE_bvhtree_from_mesh_get(&treeData_f, target, BVHTREE_FROM_LOOPTRI, 2); - if (treeData_f.tree == NULL) { + if (treeData_f.tree == nullptr) { OUT_OF_MEMORY(); return; } @@ -223,9 +223,9 @@ static void get_vert2ob_distance( while (i-- > 0) { /* Get world-coordinates of the vertex (constraints and anim included). */ - mul_v3_m4v3(v_wco, ob->obmat, v_cos[i]); + mul_v3_m4v3(v_wco, ob->object_to_world, v_cos[i]); /* Return distance between both coordinates. */ - dist[i] = len_v3v3(v_wco, obr->obmat[3]); + dist[i] = len_v3v3(v_wco, obr->object_to_world[3]); } } @@ -235,7 +235,7 @@ static void get_vert2ob_distance( */ static float get_ob2ob_distance(const Object *ob, const Object *obr) { - return len_v3v3(ob->obmat[3], obr->obmat[3]); + return len_v3v3(ob->object_to_world[3], obr->object_to_world[3]); } /** @@ -285,7 +285,7 @@ static void do_map(Object *ob, } if (do_invert_mapping || mode != MOD_WVG_MAPPING_NONE) { - RNG *rng = NULL; + RNG *rng = nullptr; if (mode == MOD_WVG_MAPPING_RANDOM) { rng = BLI_rng_new_srandom(BLI_ghashutil_strhash(ob->id.name + 2)); @@ -330,9 +330,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla twmd->cmap_curve = BKE_curvemapping_copy(wmd->cmap_curve); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md; @@ -347,14 +345,14 @@ static void requiredDataMask(Object *UNUSED(ob), /* No need to ask for CD_PREVIEW_MLOOPCOL... */ } -static bool dependsOnTime(struct Scene *UNUSED(scene), ModifierData *md) +static bool dependsOnTime(Scene * /*scene*/, ModifierData *md) { WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md; if (wmd->mask_texture) { return BKE_texture_dependsOnTime(wmd->mask_texture); } - return 0; + return false; } static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *userData) @@ -376,10 +374,10 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md; bool need_transform_relation = false; - if (wmd->proximity_ob_target != NULL) { + if (wmd->proximity_ob_target != nullptr) { DEG_add_object_relation( ctx->node, wmd->proximity_ob_target, DEG_OB_COMP_TRANSFORM, "WeightVGProximity Modifier"); - if (wmd->proximity_ob_target->data != NULL && + if (wmd->proximity_ob_target->data != nullptr && wmd->proximity_mode == MOD_WVG_PROXIMITY_GEOMETRY) { DEG_add_object_relation( ctx->node, wmd->proximity_ob_target, DEG_OB_COMP_GEOMETRY, "WeightVGProximity Modifier"); @@ -387,10 +385,10 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte need_transform_relation = true; } - if (wmd->mask_texture != NULL) { + if (wmd->mask_texture != nullptr) { DEG_add_generic_id_relation(ctx->node, &wmd->mask_texture->id, "WeightVGProximity Modifier"); - if (wmd->mask_tex_map_obj != NULL && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) { + if (wmd->mask_tex_map_obj != nullptr && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) { MOD_depsgraph_update_object_bone_relation( ctx->node, wmd->mask_tex_map_obj, wmd->mask_tex_map_bone, "WeightVGProximity Modifier"); need_transform_relation = true; @@ -405,9 +403,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } -static bool isDisabled(const struct Scene *UNUSED(scene), - ModifierData *md, - bool UNUSED(useRenderParams)) +static bool isDisabled(const Scene * /*scene*/, ModifierData *md, bool /*useRenderParams*/) { WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md; /* If no vertex group, bypass. */ @@ -415,23 +411,23 @@ static bool isDisabled(const struct Scene *UNUSED(scene), return true; } /* If no target object, bypass. */ - return (wmd->proximity_ob_target == NULL); + return (wmd->proximity_ob_target == nullptr); } static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) { - BLI_assert(mesh != NULL); + BLI_assert(mesh != nullptr); WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md; MDeformWeight **dw, **tdw; - float(*v_cos)[3] = NULL; /* The vertices coordinates. */ + float(*v_cos)[3] = nullptr; /* The vertices coordinates. */ Object *ob = ctx->object; - Object *obr = NULL; /* Our target object. */ + Object *obr = nullptr; /* Our target object. */ int defgrp_index; - float *tw = NULL; - float *org_w = NULL; - float *new_w = NULL; - int *tidx, *indices = NULL; + float *tw = nullptr; + float *org_w = nullptr; + float *new_w = nullptr; + int *tidx, *indices = nullptr; int index_num = 0; int i; const bool invert_vgroup_mask = (wmd->proximity_flags & MOD_WVG_PROXIMITY_INVERT_VGROUP_MASK) != @@ -458,7 +454,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * /* Get our target object. */ obr = wmd->proximity_ob_target; - if (obr == NULL) { + if (obr == nullptr) { return mesh; } @@ -468,7 +464,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * return mesh; } const bool has_mdef = CustomData_has_layer(&mesh->vdata, CD_MDEFORMVERT); - /* If no vertices were ever added to an object's vgroup, dvert might be NULL. */ + /* If no vertices were ever added to an object's vgroup, dvert might be nullptr. */ /* As this modifier never add vertices to vgroup, just return. */ if (!has_mdef) { return mesh; @@ -481,9 +477,10 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } /* Find out which vertices to work on (all vertices in vgroup), and get their relevant weight. */ - tidx = MEM_malloc_arrayN(verts_num, sizeof(int), "WeightVGProximity Modifier, tidx"); - tw = MEM_malloc_arrayN(verts_num, sizeof(float), "WeightVGProximity Modifier, tw"); - tdw = MEM_malloc_arrayN(verts_num, sizeof(MDeformWeight *), "WeightVGProximity Modifier, tdw"); + tidx = static_cast<int *>(MEM_malloc_arrayN(verts_num, sizeof(int), __func__)); + tw = static_cast<float *>(MEM_malloc_arrayN(verts_num, sizeof(float), __func__)); + tdw = static_cast<MDeformWeight **>( + MEM_malloc_arrayN(verts_num, sizeof(MDeformWeight *), __func__)); for (i = 0; i < verts_num; i++) { MDeformWeight *_dw = BKE_defvert_find_index(&dvert[i], defgrp_index); if (_dw) { @@ -500,11 +497,12 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * return mesh; } if (index_num != verts_num) { - indices = MEM_malloc_arrayN(index_num, sizeof(int), "WeightVGProximity Modifier, indices"); + indices = static_cast<int *>(MEM_malloc_arrayN(index_num, sizeof(int), __func__)); memcpy(indices, tidx, sizeof(int) * index_num); - org_w = MEM_malloc_arrayN(index_num, sizeof(float), "WeightVGProximity Modifier, org_w"); + org_w = static_cast<float *>(MEM_malloc_arrayN(index_num, sizeof(float), __func__)); memcpy(org_w, tw, sizeof(float) * index_num); - dw = MEM_malloc_arrayN(index_num, sizeof(MDeformWeight *), "WeightVGProximity Modifier, dw"); + dw = static_cast<MDeformWeight **>( + MEM_malloc_arrayN(index_num, sizeof(MDeformWeight *), __func__)); memcpy(dw, tdw, sizeof(MDeformWeight *) * index_num); MEM_freeN(tw); MEM_freeN(tdw); @@ -513,20 +511,20 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * org_w = tw; dw = tdw; } - new_w = MEM_malloc_arrayN(index_num, sizeof(float), "WeightVGProximity Modifier, new_w"); + new_w = static_cast<float *>(MEM_malloc_arrayN(index_num, sizeof(float), __func__)); MEM_freeN(tidx); /* Get our vertex coordinates. */ if (index_num != verts_num) { - float(*tv_cos)[3] = BKE_mesh_vert_coords_alloc(mesh, NULL); - v_cos = MEM_malloc_arrayN(index_num, sizeof(float[3]), "WeightVGProximity Modifier, v_cos"); + float(*tv_cos)[3] = BKE_mesh_vert_coords_alloc(mesh, nullptr); + v_cos = static_cast<float(*)[3]>(MEM_malloc_arrayN(index_num, sizeof(float[3]), __func__)); for (i = 0; i < index_num; i++) { copy_v3_v3(v_cos[i], tv_cos[indices[i]]); } MEM_freeN(tv_cos); } else { - v_cos = BKE_mesh_vert_coords_alloc(mesh, NULL); + v_cos = BKE_mesh_vert_coords_alloc(mesh, nullptr); } /* Compute wanted distances. */ @@ -545,19 +543,22 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * Mesh *target_mesh = BKE_modifier_get_evaluated_mesh_from_evaluated_object(obr); /* We must check that we do have a valid target_mesh! */ - if (target_mesh != NULL) { + if (target_mesh != nullptr) { /* TODO: edit-mode versions of the BVH lookup functions are available so it could be * avoided. */ BKE_mesh_wrapper_ensure_mdata(target_mesh); SpaceTransform loc2trgt; - float *dists_v = use_trgt_verts ? MEM_malloc_arrayN(index_num, sizeof(float), "dists_v") : - NULL; - float *dists_e = use_trgt_edges ? MEM_malloc_arrayN(index_num, sizeof(float), "dists_e") : - NULL; - float *dists_f = use_trgt_faces ? MEM_malloc_arrayN(index_num, sizeof(float), "dists_f") : - NULL; + float *dists_v = use_trgt_verts ? static_cast<float *>(MEM_malloc_arrayN( + index_num, sizeof(float), __func__)) : + nullptr; + float *dists_e = use_trgt_edges ? static_cast<float *>(MEM_malloc_arrayN( + index_num, sizeof(float), __func__)) : + nullptr; + float *dists_f = use_trgt_faces ? static_cast<float *>(MEM_malloc_arrayN( + index_num, sizeof(float), __func__)) : + nullptr; BLI_SPACE_TRANSFORM_SETUP(&loc2trgt, ob, obr); get_vert2geom_distance( @@ -597,7 +598,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * wmd->cmap_curve); /* Do masking. */ - struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); weightvg_do_mask(ctx, index_num, indices, @@ -638,13 +639,13 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * TIMEIT_END(perf); #endif - mesh->runtime.is_original_bmesh = false; + mesh->runtime->is_original_bmesh = false; /* Return the vgroup-modified mesh. */ return mesh; } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *col; uiLayout *layout = panel->layout; @@ -654,25 +655,25 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) uiLayoutSetPropSep(layout, true); - uiItemPointerR(layout, ptr, "vertex_group", &ob_ptr, "vertex_groups", NULL, ICON_NONE); + uiItemPointerR(layout, ptr, "vertex_group", &ob_ptr, "vertex_groups", nullptr, ICON_NONE); - uiItemR(layout, ptr, "target", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "target", 0, nullptr, ICON_NONE); uiItemS(layout); - uiItemR(layout, ptr, "proximity_mode", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "proximity_mode", 0, nullptr, ICON_NONE); if (RNA_enum_get(ptr, "proximity_mode") == MOD_WVG_PROXIMITY_GEOMETRY) { uiItemR(layout, ptr, "proximity_geometry", UI_ITEM_R_EXPAND, IFACE_("Geometry"), ICON_NONE); } col = uiLayoutColumn(layout, true); - uiItemR(col, ptr, "min_dist", 0, NULL, ICON_NONE); - uiItemR(col, ptr, "max_dist", 0, NULL, ICON_NONE); + uiItemR(col, ptr, "min_dist", 0, nullptr, ICON_NONE); + uiItemR(col, ptr, "max_dist", 0, nullptr, ICON_NONE); - uiItemR(layout, ptr, "normalize", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "normalize", 0, nullptr, ICON_NONE); } -static void falloff_panel_draw(const bContext *UNUSED(C), Panel *panel) +static void falloff_panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *row, *sub; uiLayout *layout = panel->layout; @@ -708,12 +709,12 @@ static void panelRegister(ARegionType *region_type) PanelType *panel_type = modifier_panel_register( region_type, eModifierType_WeightVGProximity, panel_draw); modifier_subpanel_register( - region_type, "falloff", "Falloff", NULL, falloff_panel_draw, panel_type); + region_type, "falloff", "Falloff", nullptr, falloff_panel_draw, panel_type); modifier_subpanel_register( - region_type, "influence", "Influence", NULL, influence_panel_draw, panel_type); + region_type, "influence", "Influence", nullptr, influence_panel_draw, panel_type); } -static void blendWrite(BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md) +static void blendWrite(BlendWriter *writer, const ID * /*id_owner*/, const ModifierData *md) { const WeightVGProximityModifierData *wmd = (const WeightVGProximityModifierData *)md; @@ -746,12 +747,12 @@ ModifierTypeInfo modifierType_WeightVGProximity = { /* copyData */ copyData, - /* deformVerts */ NULL, - /* deformMatrices */ NULL, - /* deformVertsEM */ NULL, - /* deformMatricesEM */ NULL, + /* deformVerts */ nullptr, + /* deformMatrices */ nullptr, + /* deformVertsEM */ nullptr, + /* deformMatricesEM */ nullptr, /* modifyMesh */ modifyMesh, - /* modifyGeometrySet */ NULL, + /* modifyGeometrySet */ nullptr, /* initData */ initData, /* requiredDataMask */ requiredDataMask, @@ -759,10 +760,10 @@ ModifierTypeInfo modifierType_WeightVGProximity = { /* isDisabled */ isDisabled, /* updateDepsgraph */ updateDepsgraph, /* dependsOnTime */ dependsOnTime, - /* dependsOnNormals */ NULL, + /* dependsOnNormals */ nullptr, /* foreachIDLink */ foreachIDLink, /* foreachTexLink */ foreachTexLink, - /* freeRuntimeData */ NULL, + /* freeRuntimeData */ nullptr, /* panelRegister */ panelRegister, /* blendWrite */ blendWrite, /* blendRead */ blendRead, diff --git a/source/blender/modifiers/intern/MOD_weld.cc b/source/blender/modifiers/intern/MOD_weld.cc index 19b0bf62fea..bbd440f377e 100644 --- a/source/blender/modifiers/intern/MOD_weld.cc +++ b/source/blender/modifiers/intern/MOD_weld.cc @@ -127,7 +127,7 @@ static std::optional<Mesh *> calculate_weld(const Mesh &mesh, const WeldModifier return nullptr; } -static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *UNUSED(ctx), Mesh *mesh) +static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext * /*ctx*/, Mesh *mesh) { const WeldModifierData &wmd = reinterpret_cast<WeldModifierData &>(*md); @@ -147,9 +147,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(wmd, DNA_struct_default_get(WeldModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WeldModifierData *wmd = (WeldModifierData *)md; @@ -159,7 +157,7 @@ static void requiredDataMask(Object *UNUSED(ob), } } -static void panel_draw(const bContext *UNUSED(C), Panel *panel) +static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; diff --git a/source/blender/modifiers/intern/MOD_wireframe.c b/source/blender/modifiers/intern/MOD_wireframe.c index 5799da5d156..85696bed162 100644 --- a/source/blender/modifiers/intern/MOD_wireframe.c +++ b/source/blender/modifiers/intern/MOD_wireframe.c @@ -41,9 +41,7 @@ static void initData(ModifierData *md) MEMCPY_STRUCT_AFTER(wmd, DNA_struct_default_get(WireframeModifierData), modifier); } -static void requiredDataMask(Object *UNUSED(ob), - ModifierData *md, - CustomData_MeshMasks *r_cddata_masks) +static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WireframeModifierData *wmd = (WireframeModifierData *)md; |