Refactor CDData masks, to have one mask per mesh elem type.
We already have different storages for cddata of verts, edges etc., 'simply' do the same for the mask flags we use all around Blender code to request some data, or limit some operation to some layers, etc. Reason we need this is that some cddata types (like Normals) are actually shared between verts/polys/loops, and we don’t want to generate clnors everytime we request vnors! As a side note, this also does final fix to T59338, which was the trigger for this patch (need to request computed loop normals for another mesh than evaluated one). Reviewers: brecht, campbellbarton, sergey Differential Revision: https://developer.blender.org/D4407
This commit is contained in:
@@ -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))
|
||||
|
@@ -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 &&
|
||||
|
@@ -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 = {
|
||||
|
@@ -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(
|
||||
|
@@ -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 (cloth_uses_vgroup(clmd)) {
|
||||
r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT;
|
||||
}
|
||||
|
||||
if (clmd->sim_parms->shapekey_rest != 0)
|
||||
dataMask |= CD_MASK_CLOTH_ORCO;
|
||||
|
||||
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)
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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))
|
||||
|
@@ -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");
|
||||
|
@@ -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 */
|
||||
|
@@ -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;
|
||||
|
||||
/* ask for UV coordinates if we need them */
|
||||
if (dmd->texmapping == MOD_DISP_MAP_UV) dataMask |= CD_MASK_MTFACE;
|
||||
|
||||
if (dmd->direction == MOD_DISP_DIR_CLNOR) {
|
||||
dataMask |= CD_MASK_CUSTOMLOOPNORMAL;
|
||||
if (dmd->defgrp_name[0] != '\0') {
|
||||
r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT;
|
||||
}
|
||||
|
||||
return dataMask;
|
||||
/* ask for UV coordinates if we need them */
|
||||
if (dmd->texmapping == MOD_DISP_MAP_UV) {
|
||||
r_cddata_masks->fmask |= CD_MASK_MTFACE;
|
||||
}
|
||||
|
||||
if (dmd->direction == MOD_DISP_DIR_CLNOR) {
|
||||
r_cddata_masks->lmask |= CD_MASK_CUSTOMLOOPNORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
static bool dependsOnTime(ModifierData *md)
|
||||
|
@@ -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(
|
||||
|
@@ -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;
|
||||
|
@@ -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(
|
||||
|
@@ -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)
|
||||
|
@@ -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(
|
||||
|
@@ -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(
|
||||
|
@@ -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))
|
||||
|
@@ -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(
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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))
|
||||
|
@@ -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 */
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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. */
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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(
|
||||
|
@@ -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 = {
|
||||
|
@@ -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(
|
||||
|
@@ -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(
|
||||
|
@@ -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 */
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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(
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
|
@@ -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))
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user