diff options
Diffstat (limited to 'source/blender/modifiers')
42 files changed, 192 insertions, 242 deletions
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c index e58beaaa42d..4a474dde585 100644 --- a/source/blender/modifiers/intern/MOD_armature.c +++ b/source/blender/modifiers/intern/MOD_armature.c @@ -65,14 +65,10 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla tamd->prevCos = NULL; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md)) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md), CustomData_MeshMasks *r_cddata_masks) { - CustomDataMask dataMask = 0; - /* ask for vertexgroups */ - dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; } static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(useRenderParams)) diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index 0b28f51a338..3450e745341 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -69,15 +69,14 @@ static void copyData(const ModifierData *md_src, ModifierData *md_dst, const int modifier_copyData_generic(md_src, md_dst, flag); } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { BevelModifierData *bmd = (BevelModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (bmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (bmd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } /* @@ -117,7 +116,8 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes .add_key_index = false, .use_shapekey = false, .active_shapekey = 0, - .cd_mask_extra = CD_MASK_ORIGINDEX, + /* XXX We probably can use CD_MASK_BAREMESH_ORIGDINDEX here instead (also for other modifiers cases)? */ + .cd_mask_extra = {.vmask=CD_MASK_ORIGINDEX, .emask=CD_MASK_ORIGINDEX, .pmask=CD_MASK_ORIGINDEX}, }); if ((bmd->lim_flags & MOD_BEVEL_VGROUP) && bmd->defgrp_name[0]) @@ -188,7 +188,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes harden_normals, face_strength_mode, miter_outer, miter_inner, spread, mesh->smoothresh); - result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); + result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); BLI_assert(bm->vtoolflagpool == NULL && bm->etoolflagpool == NULL && diff --git a/source/blender/modifiers/intern/MOD_boolean.c b/source/blender/modifiers/intern/MOD_boolean.c index b81536ff947..a90ddde7946 100644 --- a/source/blender/modifiers/intern/MOD_boolean.c +++ b/source/blender/modifiers/intern/MOD_boolean.c @@ -301,7 +301,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes MEM_freeN(looptris); } - result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); + result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); BM_mesh_free(bm); @@ -321,13 +321,11 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes return result; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md)) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md), CustomData_MeshMasks *r_cddata_masks) { - CustomDataMask dataMask = CD_MASK_MTFACE | CD_MASK_MEDGE; - - dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + r_cddata_masks->emask |= CD_MASK_MEDGE; + r_cddata_masks->fmask |= CD_MASK_MTFACE; } ModifierTypeInfo modifierType_Boolean = { diff --git a/source/blender/modifiers/intern/MOD_cast.c b/source/blender/modifiers/intern/MOD_cast.c index 4aac71dd58d..f408a22aadf 100644 --- a/source/blender/modifiers/intern/MOD_cast.c +++ b/source/blender/modifiers/intern/MOD_cast.c @@ -66,15 +66,14 @@ static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool return false; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { CastModifierData *cmd = (CastModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (cmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (cmd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static void foreachObjectLink( diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c index 54dcf796036..41f35faac1b 100644 --- a/source/blender/modifiers/intern/MOD_cloth.c +++ b/source/blender/modifiers/intern/MOD_cloth.c @@ -127,18 +127,17 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte DEG_add_modifier_to_transform_relation(ctx->node, "Cloth Modifier"); } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { - CustomDataMask dataMask = 0; ClothModifierData *clmd = (ClothModifierData *)md; - if (cloth_uses_vgroup(clmd)) - dataMask |= CD_MASK_MDEFORMVERT; - - if (clmd->sim_parms->shapekey_rest != 0) - dataMask |= CD_MASK_CLOTH_ORCO; + if (cloth_uses_vgroup(clmd)) { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } - return dataMask; + if (clmd->sim_parms->shapekey_rest != 0) { + r_cddata_masks->vmask |= CD_MASK_CLOTH_ORCO; + } } static void copyData(const ModifierData *md, ModifierData *target, const int flag) diff --git a/source/blender/modifiers/intern/MOD_correctivesmooth.c b/source/blender/modifiers/intern/MOD_correctivesmooth.c index fa5e68fa630..cc6177b9bc8 100644 --- a/source/blender/modifiers/intern/MOD_correctivesmooth.c +++ b/source/blender/modifiers/intern/MOD_correctivesmooth.c @@ -105,15 +105,14 @@ static void freeData(ModifierData *md) } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { CorrectiveSmoothModifierData *csmd = (CorrectiveSmoothModifierData *)md; - CustomDataMask dataMask = 0; + /* ask for vertex groups if we need them */ - if (csmd->defgrp_name[0]) { - dataMask |= CD_MASK_MDEFORMVERT; + if (csmd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; } - return dataMask; } diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c index 4a8b6de9981..f3a5e280947 100644 --- a/source/blender/modifiers/intern/MOD_curve.c +++ b/source/blender/modifiers/intern/MOD_curve.c @@ -50,15 +50,14 @@ static void initData(ModifierData *md) cmd->defaxis = MOD_CURVE_POSX; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { CurveModifierData *cmd = (CurveModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (cmd->name[0]) dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (cmd->name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static bool isDisabled(const Scene *UNUSED(scene), ModifierData *md, bool UNUSED(userRenderParams)) diff --git a/source/blender/modifiers/intern/MOD_datatransfer.c b/source/blender/modifiers/intern/MOD_datatransfer.c index d7b18074b09..3e461476eac 100644 --- a/source/blender/modifiers/intern/MOD_datatransfer.c +++ b/source/blender/modifiers/intern/MOD_datatransfer.c @@ -75,19 +75,16 @@ static void initData(ModifierData *md) dtmd->flags = MOD_DATATRANSFER_OBSRC_TRANSFORM; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { DataTransferModifierData *dtmd = (DataTransferModifierData *) md; - CustomDataMask dataMask = 0; - if (dtmd->defgrp_name[0]) { + if (dtmd->defgrp_name[0] != '\0') { /* We need vertex groups! */ - dataMask |= CD_MASK_MDEFORMVERT; + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; } - dataMask |= BKE_object_data_transfer_dttypes_to_cdmask(dtmd->data_types); - - return dataMask; + BKE_object_data_transfer_dttypes_to_cdmask(dtmd->data_types, r_cddata_masks); } static bool dependsOnNormals(ModifierData *md) @@ -123,10 +120,11 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte { DataTransferModifierData *dtmd = (DataTransferModifierData *) md; if (dtmd->ob_source != NULL) { - CustomDataMask mask = BKE_object_data_transfer_dttypes_to_cdmask(dtmd->data_types); + CustomData_MeshMasks cddata_masks = {0}; + BKE_object_data_transfer_dttypes_to_cdmask(dtmd->data_types, &cddata_masks); DEG_add_object_relation(ctx->node, dtmd->ob_source, DEG_OB_COMP_GEOMETRY, "DataTransfer Modifier"); - DEG_add_customdata_mask(ctx->node, dtmd->ob_source, mask); + DEG_add_customdata_mask(ctx->node, dtmd->ob_source, &cddata_masks); if (dtmd->flags & MOD_DATATRANSFER_OBSRC_TRANSFORM) { DEG_add_object_relation(ctx->node, dtmd->ob_source, DEG_OB_COMP_TRANSFORM, "DataTransfer Modifier"); diff --git a/source/blender/modifiers/intern/MOD_decimate.c b/source/blender/modifiers/intern/MOD_decimate.c index fbc3529c221..52289ef107e 100644 --- a/source/blender/modifiers/intern/MOD_decimate.c +++ b/source/blender/modifiers/intern/MOD_decimate.c @@ -57,17 +57,14 @@ static void initData(ModifierData *md) dmd->defgrp_factor = 1.0; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { DecimateModifierData *dmd = (DecimateModifierData *) md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (dmd->defgrp_name[0] && (dmd->defgrp_factor > 0.0f)) { - dataMask |= CD_MASK_MDEFORMVERT; + if (dmd->defgrp_name[0] != '\0' && (dmd->defgrp_factor > 0.0f)) { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; } - - return dataMask; } static DecimateModifierData *getOriginalModifierData( @@ -166,7 +163,7 @@ static Mesh *applyModifier( &(struct BMeshCreateParams){0}, &(struct BMeshFromMeshParams){ .calc_face_normal = calc_face_normal, - .cd_mask_extra = CD_MASK_ORIGINDEX, + .cd_mask_extra = {.vmask=CD_MASK_ORIGINDEX, .emask=CD_MASK_ORIGINDEX, .pmask=CD_MASK_ORIGINDEX}, }); switch (dmd->mode) { @@ -199,7 +196,7 @@ static Mesh *applyModifier( updateFaceCount(ctx, dmd, bm->totface); - result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); + result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); BLI_assert(bm->vtoolflagpool == NULL && bm->etoolflagpool == NULL && bm->ftoolflagpool == NULL); /* make sure we never alloc'd these */ diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c index fc619837cb7..87b25982d81 100644 --- a/source/blender/modifiers/intern/MOD_displace.c +++ b/source/blender/modifiers/intern/MOD_displace.c @@ -65,22 +65,23 @@ static void initData(ModifierData *md) dmd->space = MOD_DISP_SPACE_LOCAL; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { DisplaceModifierData *dmd = (DisplaceModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (dmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; + if (dmd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } /* ask for UV coordinates if we need them */ - if (dmd->texmapping == MOD_DISP_MAP_UV) dataMask |= CD_MASK_MTFACE; + if (dmd->texmapping == MOD_DISP_MAP_UV) { + r_cddata_masks->fmask |= CD_MASK_MTFACE; + } if (dmd->direction == MOD_DISP_DIR_CLNOR) { - dataMask |= CD_MASK_CUSTOMLOOPNORMAL; + r_cddata_masks->lmask |= CD_MASK_CUSTOMLOOPNORMAL; } - - return dataMask; } static bool dependsOnTime(ModifierData *md) diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c index 3fea556c3e4..b84e46e145c 100644 --- a/source/blender/modifiers/intern/MOD_dynamicpaint.c +++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c @@ -64,10 +64,9 @@ static void freeData(ModifierData *md) dynamicPaint_Modifier_free(pmd); } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md; - CustomDataMask dataMask = 0; if (pmd->canvas) { DynamicPaintSurface *surface = pmd->canvas->surfaces.first; @@ -76,21 +75,20 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ || surface->init_color_type == MOD_DPAINT_INITIAL_TEXTURE) { - dataMask |= CD_MASK_MLOOPUV; + r_cddata_masks->lmask |= CD_MASK_MLOOPUV; } /* mcol */ if (surface->type == MOD_DPAINT_SURFACE_T_PAINT || surface->init_color_type == MOD_DPAINT_INITIAL_VERTEXCOLOR) { - dataMask |= CD_MASK_MLOOPCOL; + r_cddata_masks->lmask |= CD_MASK_MLOOPCOL; } /* CD_MDEFORMVERT */ if (surface->type == MOD_DPAINT_SURFACE_T_WEIGHT) { - dataMask |= CD_MASK_MDEFORMVERT; + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; } } } - return dataMask; } static Mesh *applyModifier( diff --git a/source/blender/modifiers/intern/MOD_edgesplit.c b/source/blender/modifiers/intern/MOD_edgesplit.c index 548790ef78f..70c1ec5a59b 100644 --- a/source/blender/modifiers/intern/MOD_edgesplit.c +++ b/source/blender/modifiers/intern/MOD_edgesplit.c @@ -60,7 +60,7 @@ static Mesh *doEdgeSplit(Mesh *mesh, EdgeSplitModifierData *emd) .add_key_index = false, .use_shapekey = false, .active_shapekey = 0, - .cd_mask_extra = CD_MASK_ORIGINDEX, + .cd_mask_extra = {.vmask=CD_MASK_ORIGINDEX, .emask=CD_MASK_ORIGINDEX, .pmask=CD_MASK_ORIGINDEX}, }); if (do_split_angle) { @@ -100,7 +100,7 @@ static Mesh *doEdgeSplit(Mesh *mesh, EdgeSplitModifierData *emd) /* BM_mesh_validate(bm); */ /* for troubleshooting */ - result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); + result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); BM_mesh_free(bm); result->runtime.cd_dirty_vert |= CD_MASK_NORMAL; diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c index 5c5612f29a4..3a0449a4e52 100644 --- a/source/blender/modifiers/intern/MOD_explode.c +++ b/source/blender/modifiers/intern/MOD_explode.c @@ -76,15 +76,13 @@ static bool dependsOnTime(ModifierData *UNUSED(md)) { return true; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { ExplodeModifierData *emd = (ExplodeModifierData *) md; - CustomDataMask dataMask = 0; - if (emd->vgroup) - dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (emd->vgroup) { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static void createFacepa( diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c index 0646f634e0d..e911dbc4b5a 100644 --- a/source/blender/modifiers/intern/MOD_hook.c +++ b/source/blender/modifiers/intern/MOD_hook.c @@ -67,16 +67,20 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla thmd->indexar = MEM_dupallocN(hmd->indexar); } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { HookModifierData *hmd = (HookModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (hmd->name[0]) dataMask |= CD_MASK_MDEFORMVERT; - if (hmd->indexar) dataMask |= CD_MASK_ORIGINDEX; - - return dataMask; + if (hmd->name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } + if (hmd->indexar != NULL) { + /* TODO check which origindex are actually needed? */ + r_cddata_masks->vmask |= CD_MASK_ORIGINDEX; + r_cddata_masks->emask |= CD_MASK_ORIGINDEX; + r_cddata_masks->pmask |= CD_MASK_ORIGINDEX; + } } static void freeData(ModifierData *md) diff --git a/source/blender/modifiers/intern/MOD_laplaciandeform.c b/source/blender/modifiers/intern/MOD_laplaciandeform.c index 827d555e900..db76b0fd0c2 100644 --- a/source/blender/modifiers/intern/MOD_laplaciandeform.c +++ b/source/blender/modifiers/intern/MOD_laplaciandeform.c @@ -716,12 +716,13 @@ static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool return 1; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { LaplacianDeformModifierData *lmd = (LaplacianDeformModifierData *)md; - CustomDataMask dataMask = 0; - if (lmd->anchor_grp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; - return dataMask; + + if (lmd->anchor_grp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static void deformVerts( diff --git a/source/blender/modifiers/intern/MOD_laplaciansmooth.c b/source/blender/modifiers/intern/MOD_laplaciansmooth.c index ee9f4ad8af7..a6670f313ce 100644 --- a/source/blender/modifiers/intern/MOD_laplaciansmooth.c +++ b/source/blender/modifiers/intern/MOD_laplaciansmooth.c @@ -69,7 +69,7 @@ struct BLaplacianSystem { }; typedef struct BLaplacianSystem LaplacianSystem; -static CustomDataMask required_data_mask(Object *ob, ModifierData *md); +static void required_data_mask(Object *ob, ModifierData *md, CustomData_MeshMasks *r_cddata_masks); static bool is_disabled(const struct Scene *UNUSED(scene), ModifierData *md, bool useRenderParams); static float compute_volume(const float center[3], float (*vertexCos)[3], const MPoly *mpoly, int numPolys, const MLoop *mloop); static LaplacianSystem *init_laplacian_system(int a_numEdges, int a_numPolys, int a_numLoops, int a_numVerts); @@ -476,15 +476,14 @@ static bool is_disabled(const struct Scene *UNUSED(scene), ModifierData *md, boo return 0; } -static CustomDataMask required_data_mask(Object *UNUSED(ob), ModifierData *md) +static void required_data_mask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { LaplacianSmoothModifierData *smd = (LaplacianSmoothModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (smd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (smd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static void deformVerts( diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c index ba3624be71e..46a9c4f0a47 100644 --- a/source/blender/modifiers/intern/MOD_lattice.c +++ b/source/blender/modifiers/intern/MOD_lattice.c @@ -47,15 +47,14 @@ static void initData(ModifierData *md) lmd->strength = 1.0f; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { LatticeModifierData *lmd = (LatticeModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (lmd->name[0]) dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (lmd->name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(userRenderParams)) diff --git a/source/blender/modifiers/intern/MOD_mask.c b/source/blender/modifiers/intern/MOD_mask.c index 3440f37516d..6d8317ffe77 100644 --- a/source/blender/modifiers/intern/MOD_mask.c +++ b/source/blender/modifiers/intern/MOD_mask.c @@ -49,9 +49,9 @@ #include "BLI_strict_flags.h" -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md)) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md), CustomData_MeshMasks *r_cddata_masks) { - return CD_MASK_MDEFORMVERT; + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; } static void foreachObjectLink( diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c index 1717e554798..e59a6ae9add 100644 --- a/source/blender/modifiers/intern/MOD_meshdeform.c +++ b/source/blender/modifiers/intern/MOD_meshdeform.c @@ -89,15 +89,14 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla if (mmd->bindcos) tmmd->bindcos = MEM_dupallocN(mmd->bindcos); /* deprecated */ } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { MeshDeformModifierData *mmd = (MeshDeformModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (mmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (mmd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(useRenderParams)) @@ -303,7 +302,7 @@ static void meshdeformModifier_do( if (cagemesh == NULL && mmd->bindcagecos == NULL && ob == DEG_get_original_object(ob)) { /* Special case, binding happens outside of depsgraph evaluation, so we can build our own * target mesh if needed. */ - cagemesh = mesh_create_eval_final_view(ctx->depsgraph, DEG_get_input_scene(ctx->depsgraph), mmd->object, 0); + cagemesh = mesh_create_eval_final_view(ctx->depsgraph, DEG_get_input_scene(ctx->depsgraph), mmd->object, &CD_MASK_BAREMESH); free_cagemesh = cagemesh != NULL; } #endif diff --git a/source/blender/modifiers/intern/MOD_mirror.c b/source/blender/modifiers/intern/MOD_mirror.c index 3f02268c04c..cb4243a6150 100644 --- a/source/blender/modifiers/intern/MOD_mirror.c +++ b/source/blender/modifiers/intern/MOD_mirror.c @@ -95,7 +95,7 @@ static Mesh *doBiscetOnMirrorPlane( &(struct BMeshCreateParams){0}, &(struct BMeshFromMeshParams){ .calc_face_normal = true, - .cd_mask_extra = CD_MASK_ORIGINDEX, + .cd_mask_extra = {.vmask=CD_MASK_ORIGINDEX, .emask=CD_MASK_ORIGINDEX, .pmask=CD_MASK_ORIGINDEX}, }); /* Define bisecting plane (aka mirror plane). */ @@ -122,7 +122,7 @@ static Mesh *doBiscetOnMirrorPlane( } } - result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); + result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); BM_mesh_free(bm); return result; diff --git a/source/blender/modifiers/intern/MOD_normal_edit.c b/source/blender/modifiers/intern/MOD_normal_edit.c index 8da49fb6632..d838d203ed5 100644 --- a/source/blender/modifiers/intern/MOD_normal_edit.c +++ b/source/blender/modifiers/intern/MOD_normal_edit.c @@ -499,17 +499,16 @@ static void initData(ModifierData *md) enmd->mix_limit = M_PI; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { NormalEditModifierData *enmd = (NormalEditModifierData *)md; - CustomDataMask dataMask = CD_MASK_CUSTOMLOOPNORMAL; + + r_cddata_masks->lmask |= CD_MASK_CUSTOMLOOPNORMAL; /* Ask for vertexgroups if we need them. */ - if (enmd->defgrp_name[0]) { - dataMask |= (CD_MASK_MDEFORMVERT); + if (enmd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; } - - return dataMask; } static bool dependsOnNormals(ModifierData *UNUSED(md)) diff --git a/source/blender/modifiers/intern/MOD_ocean.c b/source/blender/modifiers/intern/MOD_ocean.c index cf8e51d4694..50ec32bd605 100644 --- a/source/blender/modifiers/intern/MOD_ocean.c +++ b/source/blender/modifiers/intern/MOD_ocean.c @@ -150,22 +150,17 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla } #ifdef WITH_OCEANSIM -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { OceanModifierData *omd = (OceanModifierData *)md; - CustomDataMask dataMask = 0; - if (omd->flag & MOD_OCEAN_GENERATE_FOAM) - dataMask |= CD_MASK_MCOL; - - return dataMask; + if (omd->flag & MOD_OCEAN_GENERATE_FOAM) { + r_cddata_masks->fmask |= CD_MASK_MCOL; /* XXX Should be loop cddata I guess? */ + } } #else /* WITH_OCEANSIM */ -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md), CustomData_MeshMasks *UNUSED(r_cddata_masks)) { - /* unused */ - (void)md; - return 0; } #endif /* WITH_OCEANSIM */ diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c index d219375b187..a9d8db493b8 100644 --- a/source/blender/modifiers/intern/MOD_particleinstance.c +++ b/source/blender/modifiers/intern/MOD_particleinstance.c @@ -63,19 +63,15 @@ static void initData(ModifierData *md) STRNCPY(pimd->value_layer_name, ""); } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData *)md; - CustomDataMask dataMask = 0; if (pimd->index_layer_name[0] != '\0' || pimd->value_layer_name[0] != '\0') { - dataMask |= CD_MASK_MLOOPCOL; + r_cddata_masks->lmask |= CD_MASK_MLOOPCOL; } - - return dataMask; - } static bool isDisabled(const struct Scene *scene, ModifierData *md, bool useRenderParams) diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c index 2360d3e3713..08a19506694 100644 --- a/source/blender/modifiers/intern/MOD_particlesystem.c +++ b/source/blender/modifiers/intern/MOD_particlesystem.c @@ -81,10 +81,11 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla tpsmd->totdmvert = tpsmd->totdmedge = tpsmd->totdmface = 0; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { ParticleSystemModifierData *psmd = (ParticleSystemModifierData *) md; - return psys_emitter_customdata_mask(psmd->psys); + + psys_emitter_customdata_mask(psmd->psys, r_cddata_masks); } /* saves the current emitter state for a particle system and calculates particles */ @@ -154,7 +155,7 @@ static void deformVerts( if (em) { /* In edit mode get directly from the edit mesh. */ - psmd->mesh_original = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, 0); + psmd->mesh_original = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, NULL); } else { /* Otherwise get regular mesh. */ diff --git a/source/blender/modifiers/intern/MOD_shrinkwrap.c b/source/blender/modifiers/intern/MOD_shrinkwrap.c index 4af838df02a..7b33df5bf86 100644 --- a/source/blender/modifiers/intern/MOD_shrinkwrap.c +++ b/source/blender/modifiers/intern/MOD_shrinkwrap.c @@ -54,22 +54,20 @@ static void initData(ModifierData *md) smd->auxTarget = NULL; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (smd->vgroup_name[0]) - dataMask |= CD_MASK_MDEFORMVERT; + if (smd->vgroup_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } if ((smd->shrinkType == MOD_SHRINKWRAP_PROJECT) && (smd->projAxis == MOD_SHRINKWRAP_PROJECT_OVER_NORMAL)) { - dataMask |= CD_MASK_MVERT; + r_cddata_masks->vmask |= CD_MASK_MVERT; /* XXX Really? These should always be present, always... */ } - - return dataMask; } static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(useRenderParams)) @@ -136,16 +134,17 @@ static void deformVertsEM( static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx) { ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *)md; - CustomDataMask mask = 0; + CustomData_MeshMasks mask = {0}; if (BKE_shrinkwrap_needs_normals(smd->shrinkType, smd->shrinkMode)) { - mask |= CD_MASK_NORMAL | CD_MASK_CUSTOMLOOPNORMAL; + mask.vmask |= CD_MASK_NORMAL; + mask.lmask |= CD_MASK_NORMAL | CD_MASK_CUSTOMLOOPNORMAL; } if (smd->target != NULL) { DEG_add_object_relation(ctx->node, smd->target, DEG_OB_COMP_TRANSFORM, "Shrinkwrap Modifier"); DEG_add_object_relation(ctx->node, smd->target, DEG_OB_COMP_GEOMETRY, "Shrinkwrap Modifier"); - DEG_add_customdata_mask(ctx->node, smd->target, mask); + DEG_add_customdata_mask(ctx->node, smd->target, &mask); if (smd->shrinkType == MOD_SHRINKWRAP_TARGET_PROJECT) { DEG_add_special_eval_flag(ctx->node, &smd->target->id, DAG_EVAL_NEED_SHRINKWRAP_BOUNDARY); } @@ -153,7 +152,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte if (smd->auxTarget != NULL) { DEG_add_object_relation(ctx->node, smd->auxTarget, DEG_OB_COMP_TRANSFORM, "Shrinkwrap Modifier"); DEG_add_object_relation(ctx->node, smd->auxTarget, DEG_OB_COMP_GEOMETRY, "Shrinkwrap Modifier"); - DEG_add_customdata_mask(ctx->node, smd->auxTarget, mask); + DEG_add_customdata_mask(ctx->node, smd->auxTarget, &mask); if (smd->shrinkType == MOD_SHRINKWRAP_TARGET_PROJECT) { DEG_add_special_eval_flag(ctx->node, &smd->auxTarget->id, DAG_EVAL_NEED_SHRINKWRAP_BOUNDARY); } diff --git a/source/blender/modifiers/intern/MOD_simpledeform.c b/source/blender/modifiers/intern/MOD_simpledeform.c index f53f320d93f..cc36cfbf9eb 100644 --- a/source/blender/modifiers/intern/MOD_simpledeform.c +++ b/source/blender/modifiers/intern/MOD_simpledeform.c @@ -344,16 +344,14 @@ static void initData(ModifierData *md) smd->limit[1] = 1.0f; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { SimpleDeformModifierData *smd = (SimpleDeformModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (smd->vgroup_name[0]) - dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (smd->vgroup_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static void foreachObjectLink( diff --git a/source/blender/modifiers/intern/MOD_skin.c b/source/blender/modifiers/intern/MOD_skin.c index 75c485b879f..7ba7882d0d0 100644 --- a/source/blender/modifiers/intern/MOD_skin.c +++ b/source/blender/modifiers/intern/MOD_skin.c @@ -1875,7 +1875,7 @@ static Mesh *base_skin(Mesh *origmesh, if (!bm) return NULL; - result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); + result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); BM_mesh_free(bm); result->runtime.cd_dirty_vert |= CD_MASK_NORMAL; @@ -1926,10 +1926,9 @@ static Mesh *applyModifier(ModifierData *md, return result; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), - ModifierData *UNUSED(md)) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md), CustomData_MeshMasks *r_cddata_masks) { - return CD_MASK_MVERT_SKIN | CD_MASK_MDEFORMVERT; + r_cddata_masks->vmask |= CD_MASK_MVERT_SKIN | CD_MASK_MDEFORMVERT; } ModifierTypeInfo modifierType_Skin = { diff --git a/source/blender/modifiers/intern/MOD_smoke.c b/source/blender/modifiers/intern/MOD_smoke.c index 5269d651c6d..905e8a18e1b 100644 --- a/source/blender/modifiers/intern/MOD_smoke.c +++ b/source/blender/modifiers/intern/MOD_smoke.c @@ -75,22 +75,20 @@ static void freeData(ModifierData *md) smokeModifier_free(smd); } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { SmokeModifierData *smd = (SmokeModifierData *)md; - CustomDataMask dataMask = 0; if (smd && (smd->type & MOD_SMOKE_TYPE_FLOW) && smd->flow) { if (smd->flow->source == MOD_SMOKE_FLOW_SOURCE_MESH) { /* vertex groups */ if (smd->flow->vgroup_density) - dataMask |= CD_MASK_MDEFORMVERT; + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; /* uv layer */ if (smd->flow->texture_type == MOD_SMOKE_FLOW_TEXTURE_MAP_UV) - dataMask |= CD_MASK_MTFACE; + r_cddata_masks->fmask |= CD_MASK_MTFACE; } } - return dataMask; } static Mesh *applyModifier( diff --git a/source/blender/modifiers/intern/MOD_smooth.c b/source/blender/modifiers/intern/MOD_smooth.c index 65d93f0c608..2b9339842fa 100644 --- a/source/blender/modifiers/intern/MOD_smooth.c +++ b/source/blender/modifiers/intern/MOD_smooth.c @@ -64,15 +64,14 @@ static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool return 0; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { SmoothModifierData *smd = (SmoothModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (smd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (smd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static void smoothModifier_do( diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c index 1425269b642..e449403eb70 100644 --- a/source/blender/modifiers/intern/MOD_solidify.c +++ b/source/blender/modifiers/intern/MOD_solidify.c @@ -167,15 +167,14 @@ static void initData(ModifierData *md) smd->flag = MOD_SOLIDIFY_RIM; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { SolidifyModifierData *smd = (SolidifyModifierData *) md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (smd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (smd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } /* specific function for solidify - define locally */ diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.c b/source/blender/modifiers/intern/MOD_surfacedeform.c index d1e5a3e31f0..554545077fa 100644 --- a/source/blender/modifiers/intern/MOD_surfacedeform.c +++ b/source/blender/modifiers/intern/MOD_surfacedeform.c @@ -1153,7 +1153,7 @@ static void surfacedeformModifier_do( if (target == NULL && smd->verts == NULL && ob == DEG_get_original_object(ob)) { /* Special case, binding happens outside of depsgraph evaluation, so we can build our own * target mesh if needed. */ - target = mesh_create_eval_final_view(ctx->depsgraph, DEG_get_input_scene(ctx->depsgraph), smd->target, 0); + target = mesh_create_eval_final_view(ctx->depsgraph, DEG_get_input_scene(ctx->depsgraph), smd->target, CD_MASK_BAREMESH); free_target = target != NULL; } #endif diff --git a/source/blender/modifiers/intern/MOD_triangulate.c b/source/blender/modifiers/intern/MOD_triangulate.c index 94910fbe80e..1d28d28286b 100644 --- a/source/blender/modifiers/intern/MOD_triangulate.c +++ b/source/blender/modifiers/intern/MOD_triangulate.c @@ -40,7 +40,7 @@ static Mesh *triangulate_mesh(Mesh *mesh, const int quad_method, const int ngon_ BMesh *bm; int total_edges, i; MEdge *me; - CustomDataMask cddata_masks = CD_MASK_ORIGINDEX; + CustomData_MeshMasks cddata_masks = {.vmask=CD_MASK_ORIGINDEX, .emask=CD_MASK_ORIGINDEX, .pmask=CD_MASK_ORIGINDEX}; bool keep_clnors = (flag & MOD_TRIANGULATE_KEEP_CUSTOMLOOP_NORMALS) != 0; @@ -48,7 +48,7 @@ static Mesh *triangulate_mesh(Mesh *mesh, const int quad_method, const int ngon_ BKE_mesh_calc_normals_split(mesh); /* We need that one to 'survive' to/from BMesh conversions. */ CustomData_clear_layer_flag(&mesh->ldata, CD_NORMAL, CD_FLAG_TEMPORARY); - cddata_masks |= CD_MASK_NORMAL; /* TODO: once D4421 is in, only request CD_NORMAL on loop data... */ + cddata_masks.lmask |= CD_MASK_NORMAL; } bm = BKE_mesh_to_bmesh_ex( @@ -61,7 +61,7 @@ static Mesh *triangulate_mesh(Mesh *mesh, const int quad_method, const int ngon_ BM_mesh_triangulate(bm, quad_method, ngon_method, false, NULL, NULL, NULL); - result = BKE_mesh_from_bmesh_for_eval_nomain(bm, cddata_masks); + result = BKE_mesh_from_bmesh_for_eval_nomain(bm, &cddata_masks); BM_mesh_free(bm); diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c index 2d6e995403e..245186bbc02 100644 --- a/source/blender/modifiers/intern/MOD_util.c +++ b/source/blender/modifiers/intern/MOD_util.c @@ -179,7 +179,7 @@ Mesh *MOD_deform_mesh_eval_get( } else if (ob->type == OB_MESH) { if (em) { - mesh = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, 0); + mesh = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, NULL); } else { /* TODO(sybren): after modifier conversion of DM to Mesh is done, check whether diff --git a/source/blender/modifiers/intern/MOD_uvproject.c b/source/blender/modifiers/intern/MOD_uvproject.c index 670cceb1ed5..26c7ec7ed13 100644 --- a/source/blender/modifiers/intern/MOD_uvproject.c +++ b/source/blender/modifiers/intern/MOD_uvproject.c @@ -57,14 +57,10 @@ static void initData(ModifierData *md) umd->scalex = umd->scaley = 1.0f; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md)) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md), CustomData_MeshMasks *r_cddata_masks) { - CustomDataMask dataMask = 0; - /* ask for UV coordinates */ - dataMask |= CD_MLOOPUV; - - return dataMask; + r_cddata_masks->lmask |= CD_MLOOPUV; } static void foreachObjectLink( diff --git a/source/blender/modifiers/intern/MOD_uvwarp.c b/source/blender/modifiers/intern/MOD_uvwarp.c index 8bf950ff175..d4f17b742f1 100644 --- a/source/blender/modifiers/intern/MOD_uvwarp.c +++ b/source/blender/modifiers/intern/MOD_uvwarp.c @@ -62,16 +62,14 @@ static void initData(ModifierData *md) copy_v2_fl(umd->center, 0.5f); } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { UVWarpModifierData *umd = (UVWarpModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (umd->vgroup_name[0]) - dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (umd->vgroup_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static void matrix_from_obj_pchan(float mat[4][4], Object *ob, const char *bonename) diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c index 9276b7df9b3..adda5df61ea 100644 --- a/source/blender/modifiers/intern/MOD_warp.c +++ b/source/blender/modifiers/intern/MOD_warp.c @@ -69,19 +69,19 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla twmd->curfalloff = curvemapping_copy(wmd->curfalloff); } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WarpModifierData *wmd = (WarpModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (wmd->defgrp_name[0]) dataMask |= (CD_MASK_MDEFORMVERT); - dataMask |= (CD_MASK_MDEFORMVERT); + if (wmd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } /* ask for UV coordinates if we need them */ - if (wmd->texmapping == MOD_DISP_MAP_UV) dataMask |= (1 << CD_MTFACE); - - return dataMask; + if (wmd->texmapping == MOD_DISP_MAP_UV) { + r_cddata_masks->fmask |= CD_MASK_MTFACE; + } } static bool dependsOnTime(ModifierData *md) diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c index dce78819925..80ac323c82f 100644 --- a/source/blender/modifiers/intern/MOD_wave.c +++ b/source/blender/modifiers/intern/MOD_wave.c @@ -119,21 +119,19 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WaveModifierData *wmd = (WaveModifierData *)md; - CustomDataMask dataMask = 0; - /* ask for UV coordinates if we need them */ - if (wmd->texture && wmd->texmapping == MOD_DISP_MAP_UV) - dataMask |= CD_MASK_MTFACE; + if (wmd->texture && wmd->texmapping == MOD_DISP_MAP_UV) { + r_cddata_masks->fmask |= CD_MASK_MTFACE; + } /* ask for vertexgroups if we need them */ - if (wmd->defgrp_name[0]) - dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; + if (wmd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static bool dependsOnNormals(ModifierData *md) diff --git a/source/blender/modifiers/intern/MOD_weighted_normal.c b/source/blender/modifiers/intern/MOD_weighted_normal.c index 6321d1ac3cb..9eda072b7d3 100644 --- a/source/blender/modifiers/intern/MOD_weighted_normal.c +++ b/source/blender/modifiers/intern/MOD_weighted_normal.c @@ -602,20 +602,19 @@ static void initData(ModifierData *md) wnmd->flag = 0; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WeightedNormalModifierData *wnmd = (WeightedNormalModifierData *)md; - CustomDataMask dataMask = CD_MASK_CUSTOMLOOPNORMAL; - if (wnmd->defgrp_name[0]) { - dataMask |= CD_MASK_MDEFORMVERT; + r_cddata_masks->lmask = CD_MASK_CUSTOMLOOPNORMAL; + + if (wnmd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; } if (wnmd->flag & MOD_WEIGHTEDNORMAL_FACE_INFLUENCE) { - dataMask |= CD_MASK_PROP_INT; + r_cddata_masks->pmask |= CD_MASK_PROP_INT; } - - return dataMask; } static bool dependsOnNormals(ModifierData *UNUSED(md)) diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.c index 8723136078e..32d058e5659 100644 --- a/source/blender/modifiers/intern/MOD_weightvgedit.c +++ b/source/blender/modifiers/intern/MOD_weightvgedit.c @@ -84,21 +84,19 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla twmd->cmap_curve = curvemapping_copy(wmd->cmap_curve); } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WeightVGEditModifierData *wmd = (WeightVGEditModifierData *) md; - CustomDataMask dataMask = 0; /* We need vertex groups! */ - dataMask |= CD_MASK_MDEFORMVERT; + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; /* Ask for UV coordinates if we need them. */ - if (wmd->mask_tex_mapping == MOD_DISP_MAP_UV) - dataMask |= CD_MASK_MTFACE; + if (wmd->mask_tex_mapping == MOD_DISP_MAP_UV) { + r_cddata_masks->fmask |= CD_MASK_MTFACE; + } /* No need to ask for CD_PREVIEW_MLOOPCOL... */ - - return dataMask; } static bool dependsOnTime(ModifierData *md) diff --git a/source/blender/modifiers/intern/MOD_weightvgmix.c b/source/blender/modifiers/intern/MOD_weightvgmix.c index f54efc0e4dd..495d235b406 100644 --- a/source/blender/modifiers/intern/MOD_weightvgmix.c +++ b/source/blender/modifiers/intern/MOD_weightvgmix.c @@ -119,21 +119,19 @@ static void initData(ModifierData *md) wmd->mask_tex_mapping = MOD_DISP_MAP_LOCAL; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WeightVGMixModifierData *wmd = (WeightVGMixModifierData *) md; - CustomDataMask dataMask = 0; /* We need vertex groups! */ - dataMask |= CD_MASK_MDEFORMVERT; + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; /* Ask for UV coordinates if we need them. */ - if (wmd->mask_tex_mapping == MOD_DISP_MAP_UV) - dataMask |= CD_MASK_MTFACE; + if (wmd->mask_tex_mapping == MOD_DISP_MAP_UV) { + r_cddata_masks->fmask |= CD_MASK_MTFACE; + } /* No need to ask for CD_PREVIEW_MLOOPCOL... */ - - return dataMask; } static bool dependsOnTime(ModifierData *md) diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.c index 8df4b1df780..2e2e4fe963d 100644 --- a/source/blender/modifiers/intern/MOD_weightvgproximity.c +++ b/source/blender/modifiers/intern/MOD_weightvgproximity.c @@ -288,21 +288,19 @@ static void initData(ModifierData *md) wmd->max_dist = 1.0f; /* vert arbitrary distance, but don't use 0 */ } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *) md; - CustomDataMask dataMask = 0; /* We need vertex groups! */ - dataMask |= CD_MASK_MDEFORMVERT; + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; /* Ask for UV coordinates if we need them. */ - if (wmd->mask_tex_mapping == MOD_DISP_MAP_UV) - dataMask |= CD_MASK_MTFACE; + if (wmd->mask_tex_mapping == MOD_DISP_MAP_UV) { + r_cddata_masks->fmask |= CD_MASK_MTFACE; + } /* No need to ask for CD_PREVIEW_MLOOPCOL... */ - - return dataMask; } static bool dependsOnTime(ModifierData *md) diff --git a/source/blender/modifiers/intern/MOD_wireframe.c b/source/blender/modifiers/intern/MOD_wireframe.c index 39c932e8afa..b9136233456 100644 --- a/source/blender/modifiers/intern/MOD_wireframe.c +++ b/source/blender/modifiers/intern/MOD_wireframe.c @@ -39,16 +39,14 @@ static void initData(ModifierData *md) wmd->crease_weight = 1.0f; } -static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) { WireframeModifierData *wmd = (WireframeModifierData *)md; - CustomDataMask dataMask = 0; /* ask for vertexgroups if we need them */ - if (wmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; - - return dataMask; - + if (wmd->defgrp_name[0] != '\0') { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + } } static bool dependsOnNormals(ModifierData *UNUSED(md)) @@ -71,7 +69,7 @@ static Mesh *WireframeModifier_do(WireframeModifierData *wmd, Object *ob, Mesh * .add_key_index = false, .use_shapekey = false, .active_shapekey = 0, - .cd_mask_extra = CD_MASK_ORIGINDEX, + .cd_mask_extra = {.vmask=CD_MASK_ORIGINDEX, .emask=CD_MASK_ORIGINDEX, .pmask=CD_MASK_ORIGINDEX}, }); BM_mesh_wireframe( @@ -89,7 +87,7 @@ static Mesh *WireframeModifier_do(WireframeModifierData *wmd, Object *ob, Mesh * MAX2(ob->totcol - 1, 0), false); - result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); + result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); BM_mesh_free(bm); result->runtime.cd_dirty_vert |= CD_MASK_NORMAL; |