diff options
author | Rohan Rathi <rohanrathi08@gmail.com> | 2018-07-02 21:01:19 +0300 |
---|---|---|
committer | Rohan Rathi <rohanrathi08@gmail.com> | 2018-07-02 21:01:19 +0300 |
commit | 31e43d021fdc55c6ec6741d382f4bbb05d1d62e9 (patch) | |
tree | 8ad72888c5516dcc0eb982d629a732c406177c83 /source/blender/modifiers | |
parent | 368a64fe041ee0950584f5b51e2f64036edb31d0 (diff) | |
parent | 31c9bd35bc9bb913b7a786da9c80751dbc60e006 (diff) |
Merge branch 'blender2.8' into soc-2018-bevel
Diffstat (limited to 'source/blender/modifiers')
52 files changed, 268 insertions, 390 deletions
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c index 40d568537a0..09ba865cce3 100644 --- a/source/blender/modifiers/intern/MOD_armature.c +++ b/source/blender/modifiers/intern/MOD_armature.c @@ -85,7 +85,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED( return dataMask; } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { ArmatureModifierData *amd = (ArmatureModifierData *) md; @@ -119,7 +119,7 @@ static void deformVerts( { ArmatureModifierData *amd = (ArmatureModifierData *) md; - modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */ + MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */ armature_deform_verts(amd->object, ctx->object, mesh, vertexCos, NULL, numVerts, amd->deformflag, (float(*)[3])amd->prevCos, amd->defgrp_name); @@ -136,9 +136,9 @@ static void deformVertsEM( Mesh *mesh, float (*vertexCos)[3], int numVerts) { ArmatureModifierData *amd = (ArmatureModifierData *) md; - Mesh *mesh_src = get_mesh(ctx->object, em, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, em, mesh, NULL, false, false); - modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */ + MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */ armature_deform_verts(amd->object, ctx->object, mesh_src, vertexCos, NULL, numVerts, amd->deformflag, (float(*)[3])amd->prevCos, amd->defgrp_name); @@ -160,7 +160,7 @@ static void deformMatricesEM( float (*defMats)[3][3], int numVerts) { ArmatureModifierData *amd = (ArmatureModifierData *) md; - Mesh *mesh_src = get_mesh(ctx->object, em, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, em, mesh, NULL, false, false); armature_deform_verts(amd->object, ctx->object, mesh_src, vertexCos, defMats, numVerts, amd->deformflag, NULL, amd->defgrp_name); @@ -175,7 +175,7 @@ static void deformMatrices( float (*vertexCos)[3], float (*defMats)[3][3], int numVerts) { ArmatureModifierData *amd = (ArmatureModifierData *) md; - Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); armature_deform_verts(amd->object, ctx->object, mesh_src, vertexCos, defMats, numVerts, amd->deformflag, NULL, amd->defgrp_name); diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c index c1268157d58..5ae0013aab0 100644 --- a/source/blender/modifiers/intern/MOD_array.c +++ b/source/blender/modifiers/intern/MOD_array.c @@ -46,7 +46,6 @@ #include "DNA_object_types.h" #include "DNA_scene_types.h" -#include "BKE_cdderivedmesh.h" #include "BKE_displist.h" #include "BKE_curve.h" #include "BKE_library.h" diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index b30d6c2e669..aa12093b505 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -34,8 +34,9 @@ #include "MEM_guardedalloc.h" -#include "DNA_object_types.h" #include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_object_types.h" #include "DNA_scene_types.h" #include "BLI_utildefines.h" @@ -43,7 +44,6 @@ #include "BLI_math.h" #include "BLI_string.h" -#include "BKE_cdderivedmesh.h" #include "BKE_deform.h" #include "BKE_mesh.h" #include "BKE_modifier.h" @@ -300,7 +300,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes }); if ((bmd->lim_flags & MOD_BEVEL_VGROUP) && bmd->defgrp_name[0]) - modifier_get_vgroup_mesh(ctx->object, mesh, bmd->defgrp_name, &dvert, &vgroup); + MOD_get_vgroup(ctx->object, mesh, bmd->defgrp_name, &dvert, &vgroup); if (vertex_only) { BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { diff --git a/source/blender/modifiers/intern/MOD_boolean.c b/source/blender/modifiers/intern/MOD_boolean.c index f7b16431c48..6cea7b8fece 100644 --- a/source/blender/modifiers/intern/MOD_boolean.c +++ b/source/blender/modifiers/intern/MOD_boolean.c @@ -76,7 +76,7 @@ static void initData(ModifierData *md) bmd->double_threshold = 1e-6f; } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { BooleanModifierData *bmd = (BooleanModifierData *) md; diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c index 9b491d4333f..902a9e7f14f 100644 --- a/source/blender/modifiers/intern/MOD_build.c +++ b/source/blender/modifiers/intern/MOD_build.c @@ -46,7 +46,6 @@ #include "DEG_depsgraph_query.h" -#include "BKE_cdderivedmesh.h" #include "BKE_mesh.h" #include "BKE_modifier.h" #include "BKE_particle.h" diff --git a/source/blender/modifiers/intern/MOD_cast.c b/source/blender/modifiers/intern/MOD_cast.c index 4441af57c93..cd6cd709b1d 100644 --- a/source/blender/modifiers/intern/MOD_cast.c +++ b/source/blender/modifiers/intern/MOD_cast.c @@ -63,7 +63,7 @@ static void initData(ModifierData *md) cmd->object = NULL; } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { CastModifierData *cmd = (CastModifierData *) md; short flag; @@ -153,7 +153,7 @@ static void sphere_do( /* 3) if we were given a vertex group name, * only those vertices should be affected */ - modifier_get_vgroup_mesh(ob, mesh, cmd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, cmd->defgrp_name, &dvert, &defgrp_index); if (flag & MOD_CAST_SIZE_FROM_RADIUS) { len = cmd->radius; @@ -255,7 +255,7 @@ static void cuboid_do( /* 3) if we were given a vertex group name, * only those vertices should be affected */ - modifier_get_vgroup_mesh(ob, mesh, cmd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, cmd->defgrp_name, &dvert, &defgrp_index); if (ctrl_ob) { if (flag & MOD_CAST_USE_OB_TRANSFORM) { @@ -429,7 +429,7 @@ static void deformVerts( int numVerts) { CastModifierData *cmd = (CastModifierData *)md; - Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); BLI_assert(mesh_src->totvert == numVerts); @@ -451,7 +451,7 @@ static void deformVertsEM( Mesh *mesh, float (*vertexCos)[3], int numVerts) { CastModifierData *cmd = (CastModifierData *)md; - Mesh *mesh_src = get_mesh(ctx->object, editData, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, editData, mesh, NULL, false, false); BLI_assert(mesh_src->totvert == numVerts); diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c index 19afe30acae..58979fa201b 100644 --- a/source/blender/modifiers/intern/MOD_cloth.c +++ b/source/blender/modifiers/intern/MOD_cloth.c @@ -54,6 +54,9 @@ #include "BKE_modifier.h" #include "BKE_pointcache.h" +#include "DEG_depsgraph_physics.h" +#include "DEG_depsgraph_query.h" + #include "MOD_util.h" static void initData(ModifierData *md) @@ -78,6 +81,7 @@ static void deformVerts( { Mesh *mesh_src; ClothModifierData *clmd = (ClothModifierData *) md; + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); /* check for alloc failing */ if (!clmd->sim_parms || !clmd->coll_parms) { @@ -88,7 +92,7 @@ static void deformVerts( } if (mesh == NULL) { - mesh_src = get_mesh(ctx->object, NULL, NULL, NULL, false, false); + mesh_src = MOD_get_mesh_eval(ctx->object, NULL, NULL, NULL, false, false); } else { /* Not possible to use get_mesh() in this case as we'll modify its vertices @@ -123,7 +127,7 @@ static void deformVerts( BKE_mesh_apply_vert_coords(mesh_src, vertexCos); - clothModifier_do(clmd, ctx->depsgraph, md->scene, ctx->object, mesh_src, vertexCos); + clothModifier_do(clmd, ctx->depsgraph, scene, ctx->object, mesh_src, vertexCos); BKE_id_free(NULL, mesh_src); } @@ -132,10 +136,8 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte { ClothModifierData *clmd = (ClothModifierData *)md; if (clmd != NULL) { - /* Actual code uses get_collisionobjects */ - DEG_add_collision_relations(ctx->node, ctx->scene, ctx->object, clmd->coll_parms->group, eModifierType_Collision, NULL, true, "Cloth Collision"); - - DEG_add_forcefield_relations(ctx->node, ctx->scene, ctx->object, clmd->sim_parms->effector_weights, true, 0, "Cloth Field"); + DEG_add_collision_relations(ctx->node, ctx->object, clmd->coll_parms->group, eModifierType_Collision, NULL, "Cloth Collision"); + DEG_add_forcefield_relations(ctx->node, ctx->object, clmd->sim_parms->effector_weights, true, 0, "Cloth Field"); } } diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c index 7f02bbf0453..5a73d62433b 100644 --- a/source/blender/modifiers/intern/MOD_collision.c +++ b/source/blender/modifiers/intern/MOD_collision.c @@ -113,7 +113,7 @@ static void deformVerts( Object *ob = ctx->object; if (mesh == NULL) { - mesh_src = get_mesh(ob, NULL, NULL, NULL, false, false); + mesh_src = MOD_get_mesh_eval(ob, NULL, NULL, NULL, false, false); } else { /* Not possible to use get_mesh() in this case as we'll modify its vertices diff --git a/source/blender/modifiers/intern/MOD_correctivesmooth.c b/source/blender/modifiers/intern/MOD_correctivesmooth.c index df5cd956000..879b07de6d9 100644 --- a/source/blender/modifiers/intern/MOD_correctivesmooth.c +++ b/source/blender/modifiers/intern/MOD_correctivesmooth.c @@ -581,7 +581,7 @@ static void correctivesmooth_modifier_do( MDeformVert *dvert = NULL; int defgrp_index; - modifier_get_vgroup_mesh(ob, mesh, csmd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, csmd->defgrp_name, &dvert, &defgrp_index); /* if rest bind_coords not are defined, set them (only run during bind) */ if ((csmd->rest_source == MOD_CORRECTIVESMOOTH_RESTSOURCE_BIND) && @@ -717,7 +717,7 @@ static void deformVerts( ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, float (*vertexCos)[3], int numVerts) { - Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); correctivesmooth_modifier_do(md, ctx->object, mesh_src, vertexCos, (unsigned int)numVerts, NULL); @@ -731,7 +731,7 @@ static void deformVertsEM( ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData, Mesh *mesh, float (*vertexCos)[3], int numVerts) { - Mesh *mesh_src = get_mesh(ctx->object, editData, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, editData, mesh, NULL, false, false); correctivesmooth_modifier_do(md, ctx->object, mesh_src, vertexCos, (unsigned int)numVerts, editData); diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c index deda8213a65..e90ff939b68 100644 --- a/source/blender/modifiers/intern/MOD_curve.c +++ b/source/blender/modifiers/intern/MOD_curve.c @@ -71,7 +71,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) return dataMask; } -static bool isDisabled(ModifierData *md, int UNUSED(userRenderParams)) +static bool isDisabled(const Scene *UNUSED(scene), ModifierData *md, int UNUSED(userRenderParams)) { CurveModifierData *cmd = (CurveModifierData *) md; @@ -113,7 +113,7 @@ static void deformVerts( int numVerts) { CurveModifierData *cmd = (CurveModifierData *) md; - Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); BLI_assert(mesh_src->totvert == numVerts); @@ -134,7 +134,7 @@ static void deformVertsEM( float (*vertexCos)[3], int numVerts) { - Mesh *mesh_src = get_mesh(ctx->object, em, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, em, mesh, NULL, false, false); BLI_assert(mesh_src->totvert == numVerts); diff --git a/source/blender/modifiers/intern/MOD_datatransfer.c b/source/blender/modifiers/intern/MOD_datatransfer.c index 21d1a6a865d..8e025059d6c 100644 --- a/source/blender/modifiers/intern/MOD_datatransfer.c +++ b/source/blender/modifiers/intern/MOD_datatransfer.c @@ -37,9 +37,7 @@ #include "DNA_object_types.h" #include "BKE_customdata.h" -#include "BKE_cdderivedmesh.h" #include "BKE_data_transfer.h" -#include "BKE_DerivedMesh.h" #include "BKE_library.h" #include "BKE_library_query.h" #include "BKE_mesh_mapping.h" @@ -47,6 +45,8 @@ #include "BKE_modifier.h" #include "BKE_report.h" +#include "DEG_depsgraph_query.h" + #include "MEM_guardedalloc.h" #include "MOD_util.h" @@ -133,7 +133,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { DataTransferModifierData *dtmd = (DataTransferModifierData *) md; /* If no source object, bypass. */ @@ -148,10 +148,11 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) DT_TYPE_SHARP_FACE \ ) -static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, DerivedMesh *derivedData) +static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mesh *me_mod) { DataTransferModifierData *dtmd = (DataTransferModifierData *) md; - DerivedMesh *dm = derivedData; + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); + Mesh *result = me_mod; ReportList reports; /* Only used to check wehther we are operating on org data or not... */ @@ -168,18 +169,24 @@ static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *c BLI_SPACE_TRANSFORM_SETUP(space_transform, ctx->object, dtmd->ob_source); } - MVert *mvert = dm->getVertArray(dm); - MEdge *medge = dm->getEdgeArray(dm); - if (((me->mvert == mvert) || (me->medge == medge)) && (dtmd->data_types & DT_TYPES_AFFECT_MESH)) { + if ((result == me_mod || (me->mvert == result->mvert) || (me->medge == result->medge)) && + (dtmd->data_types & DT_TYPES_AFFECT_MESH)) + { /* We need to duplicate data here, otherwise setting custom normals, edges' shaprness, etc., could * modify org mesh, see T43671. */ - dm = CDDM_copy(dm); + BKE_id_copy_ex( + NULL, &me_mod->id, (ID **)&result, + LIB_ID_CREATE_NO_MAIN | + LIB_ID_CREATE_NO_USER_REFCOUNT | + LIB_ID_CREATE_NO_DEG_TAG | + LIB_ID_COPY_NO_PREVIEW, + false); } BKE_reports_init(&reports, RPT_STORE); /* Note: no islands precision for now here. */ - BKE_object_data_transfer_dm(ctx->depsgraph, md->scene, dtmd->ob_source, ctx->object, dm, dtmd->data_types, false, + BKE_object_data_transfer_ex(ctx->depsgraph, scene, dtmd->ob_source, ctx->object, result, dtmd->data_types, false, dtmd->vmap_mode, dtmd->emap_mode, dtmd->lmap_mode, dtmd->pmap_mode, space_transform, false, max_dist, dtmd->map_ray_radius, 0.0f, dtmd->layers_select_src, dtmd->layers_select_dst, @@ -191,11 +198,11 @@ static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *c else if ((dtmd->data_types & DT_TYPE_LNOR) && !(me->flag & ME_AUTOSMOOTH)) { modifier_setError((ModifierData *)dtmd, "Enable 'Auto Smooth' option in mesh settings"); } - else if (dm->getNumVerts(dm) > HIGH_POLY_WARNING || ((Mesh *)(dtmd->ob_source->data))->totvert > HIGH_POLY_WARNING) { + else if (result->totvert > HIGH_POLY_WARNING || ((Mesh *)(dtmd->ob_source->data))->totvert > HIGH_POLY_WARNING) { modifier_setError(md, "You are using a rather high poly as source or destination, computation might be slow"); } - return dm; + return result; } #undef HIGH_POLY_WARNING @@ -217,14 +224,14 @@ ModifierTypeInfo modifierType_DataTransfer = { /* deformMatrices_DM */ NULL, /* deformVertsEM_DM */ NULL, /* deformMatricesEM_DM*/NULL, - /* applyModifier_DM */ applyModifier, + /* applyModifier_DM */ NULL, /* applyModifierEM_DM */NULL, /* deformVerts */ NULL, /* deformMatrices */ NULL, /* deformVertsEM */ NULL, /* deformMatricesEM */ NULL, - /* applyModifier */ NULL, + /* applyModifier */ applyModifier, /* applyModifierEM */ NULL, /* initData */ initData, diff --git a/source/blender/modifiers/intern/MOD_decimate.c b/source/blender/modifiers/intern/MOD_decimate.c index 89ed8d627f1..9e35746c0a3 100644 --- a/source/blender/modifiers/intern/MOD_decimate.c +++ b/source/blender/modifiers/intern/MOD_decimate.c @@ -129,7 +129,7 @@ static Mesh *applyModifier( MDeformVert *dvert; int defgrp_index; - modifier_get_vgroup_mesh(ctx->object, mesh, dmd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ctx->object, mesh, dmd->defgrp_name, &dvert, &defgrp_index); if (dvert) { const unsigned int vert_tot = mesh->totvert; diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c index ef15b5fbf7a..ac8fb91bc8d 100644 --- a/source/blender/modifiers/intern/MOD_displace.c +++ b/source/blender/modifiers/intern/MOD_displace.c @@ -53,6 +53,7 @@ #include "BKE_object.h" #include "DEG_depsgraph.h" +#include "DEG_depsgraph_query.h" #include "MEM_guardedalloc.h" @@ -137,7 +138,7 @@ static void foreachTexLink( walk(userData, ob, md, "texture"); } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { DisplaceModifierData *dmd = (DisplaceModifierData *) md; return ((!dmd->texture && dmd->direction == MOD_DISP_DIR_RGB_XYZ) || dmd->strength == 0.0f); @@ -159,6 +160,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte typedef struct DisplaceUserdata { /*const*/ DisplaceModifierData *dmd; + struct Scene *scene; struct ImagePool *pool; MDeformVert *dvert; float weight; @@ -205,7 +207,7 @@ static void displaceModifier_do_task( if (dmd->texture) { texres.nor = NULL; - BKE_texture_get_value_ex(dmd->modifier.scene, dmd->texture, tex_co[iter], &texres, data->pool, false); + BKE_texture_get_value_ex(data->scene, dmd->texture, tex_co[iter], &texres, data->pool, false); delta = texres.tin - dmd->midlevel; } else { @@ -291,14 +293,14 @@ static void displaceModifier_do( if (dmd->strength == 0.0f) return; mvert = mesh->mvert; - modifier_get_vgroup_mesh(ob, mesh, dmd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, dmd->defgrp_name, &dvert, &defgrp_index); if (dmd->texture) { tex_co = MEM_calloc_arrayN((size_t)numVerts, sizeof(*tex_co), "displaceModifier_do tex_co"); - get_texture_coords_mesh((MappingInfoModifierData *)dmd, ob, mesh, vertexCos, tex_co); + MOD_get_texture_coords((MappingInfoModifierData *)dmd, ob, mesh, vertexCos, tex_co); - modifier_init_texture(depsgraph, dmd->texture); + MOD_init_texture(depsgraph, dmd->texture); } else { tex_co = NULL; @@ -330,6 +332,7 @@ static void displaceModifier_do( } DisplaceUserdata data = {NULL}; + data.scene = DEG_get_evaluated_scene(ctx->depsgraph); data.dmd = dmd; data.dvert = dvert; data.weight = weight; @@ -373,7 +376,7 @@ static void deformVerts( float (*vertexCos)[3], int numVerts) { - Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); BLI_assert(mesh_src->totvert == numVerts); @@ -388,7 +391,7 @@ static void deformVertsEM( ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData, Mesh *mesh, float (*vertexCos)[3], int numVerts) { - Mesh *mesh_src = get_mesh(ctx->object, editData, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, editData, mesh, NULL, false, false); BLI_assert(mesh_src->totvert == numVerts); diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c index 5ca367e342a..9131bc0659f 100644 --- a/source/blender/modifiers/intern/MOD_dynamicpaint.c +++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c @@ -42,8 +42,9 @@ #include "BKE_modifier.h" #include "DEG_depsgraph.h" - #include "DEG_depsgraph_build.h" +#include "DEG_depsgraph_physics.h" +#include "DEG_depsgraph_query.h" #include "MOD_modifiertypes.h" @@ -107,7 +108,8 @@ static DerivedMesh *applyModifier( /* dont apply dynamic paint on orco dm stack */ if (!(ctx->flag & MOD_APPLY_ORCO)) { - return dynamicPaint_Modifier_do(pmd, ctx->depsgraph, md->scene, ctx->object, dm); + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); + return dynamicPaint_Modifier_do(pmd, ctx->depsgraph, scene, ctx->object, dm); } return dm; } @@ -124,11 +126,11 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte if (pmd->canvas != NULL) { for (DynamicPaintSurface *surface = pmd->canvas->surfaces.first; surface; surface = surface->next) { if (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) { - DEG_add_forcefield_relations(ctx->node, ctx->scene, ctx->object, surface->effector_weights, true, 0, "Dynamic Paint Field"); + DEG_add_forcefield_relations(ctx->node, ctx->object, surface->effector_weights, true, 0, "Dynamic Paint Field"); } /* Actual code uses custom loop over group/scene without layer checks in dynamicPaint_doStep */ - DEG_add_collision_relations(ctx->node, ctx->scene, ctx->object, surface->brush_group, eModifierType_DynamicPaint, is_brush_cb, false, "Dynamic Paint Brush"); + DEG_add_collision_relations(ctx->node, ctx->object, surface->brush_group, eModifierType_DynamicPaint, is_brush_cb, "Dynamic Paint Brush"); } } } diff --git a/source/blender/modifiers/intern/MOD_edgesplit.c b/source/blender/modifiers/intern/MOD_edgesplit.c index e1806dc8283..a8d4d55c5d3 100644 --- a/source/blender/modifiers/intern/MOD_edgesplit.c +++ b/source/blender/modifiers/intern/MOD_edgesplit.c @@ -40,7 +40,6 @@ #include "BLI_utildefines.h" #include "BLI_math.h" -#include "BKE_cdderivedmesh.h" #include "BKE_library.h" #include "BKE_mesh.h" #include "BKE_modifier.h" diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c index cbb15665bef..948aaf0751e 100644 --- a/source/blender/modifiers/intern/MOD_explode.c +++ b/source/blender/modifiers/intern/MOD_explode.c @@ -51,6 +51,8 @@ #include "BKE_particle.h" #include "BKE_scene.h" +#include "DEG_depsgraph_query.h" + #include "MEM_guardedalloc.h" #include "MOD_modifiertypes.h" @@ -1028,18 +1030,20 @@ static DerivedMesh *applyModifier( createFacepa(emd, psmd, derivedData); } /* 2. create new mesh */ + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); if (emd->flag & eExplodeFlag_EdgeCut) { int *facepa = emd->facepa; DerivedMesh *splitdm = cutEdges(emd, dm); - DerivedMesh *explode = explodeMesh(emd, psmd, ctx, md->scene, splitdm); + DerivedMesh *explode = explodeMesh(emd, psmd, ctx, scene, splitdm); MEM_freeN(emd->facepa); emd->facepa = facepa; splitdm->release(splitdm); return explode; } - else - return explodeMesh(emd, psmd, ctx, md->scene, derivedData); + else { + return explodeMesh(emd, psmd, ctx, scene, derivedData); + } } return derivedData; } diff --git a/source/blender/modifiers/intern/MOD_fluidsim_util.h b/source/blender/modifiers/intern/MOD_fluidsim_util.h index 3329e6dbebe..0a0c8419a99 100644 --- a/source/blender/modifiers/intern/MOD_fluidsim_util.h +++ b/source/blender/modifiers/intern/MOD_fluidsim_util.h @@ -49,4 +49,3 @@ struct DerivedMesh *fluidsimModifier_do( struct DerivedMesh *dm); #endif - diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c index 76df31823a7..a5013bb38c6 100644 --- a/source/blender/modifiers/intern/MOD_hook.c +++ b/source/blender/modifiers/intern/MOD_hook.c @@ -96,7 +96,7 @@ static void freeData(ModifierData *md) MEM_SAFE_FREE(hmd->indexar); } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { HookModifierData *hmd = (HookModifierData *) md; @@ -271,7 +271,7 @@ static void deformVerts_do( /* Generic data needed for applying per-vertex calculations (initialize all members) */ hd.vertexCos = vertexCos; - modifier_get_vgroup_mesh(ob, mesh, hmd->name, &hd.dvert, &hd.defgrp_index); + MOD_get_vgroup(ob, mesh, hmd->name, &hd.dvert, &hd.defgrp_index); hd.curfalloff = hmd->curfalloff; @@ -354,7 +354,7 @@ static void deformVerts( float (*vertexCos)[3], int numVerts) { HookModifierData *hmd = (HookModifierData *)md; - Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); deformVerts_do(hmd, ctx->object, mesh_src, vertexCos, numVerts); @@ -369,7 +369,7 @@ static void deformVertsEM( struct Mesh *mesh, float (*vertexCos)[3], int numVerts) { HookModifierData *hmd = (HookModifierData *)md; - Mesh *mesh_src = get_mesh(ctx->object, editData, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, editData, mesh, NULL, false, false); deformVerts_do(hmd, ctx->object, mesh_src, vertexCos, numVerts); diff --git a/source/blender/modifiers/intern/MOD_laplaciandeform.c b/source/blender/modifiers/intern/MOD_laplaciandeform.c index 63b4e950697..e5b96c633f7 100644 --- a/source/blender/modifiers/intern/MOD_laplaciandeform.c +++ b/source/blender/modifiers/intern/MOD_laplaciandeform.c @@ -509,7 +509,7 @@ static bool isValidVertexGroup(LaplacianDeformModifierData *lmd, Object *ob, Mes int defgrp_index; MDeformVert *dvert = NULL; - modifier_get_vgroup_mesh(ob, mesh, lmd->anchor_grp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, lmd->anchor_grp_name, &dvert, &defgrp_index); return (dvert != NULL); } @@ -535,7 +535,7 @@ static void initSystem( STACK_INIT(index_anchors, numVerts); - modifier_get_vgroup_mesh(ob, mesh, lmd->anchor_grp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, lmd->anchor_grp_name, &dvert, &defgrp_index); BLI_assert(dvert != NULL); dv = dvert; for (i = 0; i < numVerts; i++) { @@ -595,7 +595,7 @@ static int isSystemDifferent(LaplacianDeformModifierData *lmd, Object *ob, Mesh if (!STREQ(lmd->anchor_grp_name, sys->anchor_grp_name)) { return LAPDEFORM_SYSTEM_ONLY_CHANGE_GROUP; } - modifier_get_vgroup_mesh(ob, mesh, lmd->anchor_grp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, lmd->anchor_grp_name, &dvert, &defgrp_index); if (!dvert) { return LAPDEFORM_SYSTEM_CHANGE_NOT_VALID_GROUP; } @@ -715,7 +715,7 @@ static void copyData(const ModifierData *md, ModifierData *target) tlmd->cache_system = NULL; } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { LaplacianDeformModifierData *lmd = (LaplacianDeformModifierData *)md; if (lmd->anchor_grp_name[0]) return 0; @@ -734,7 +734,7 @@ static void deformVerts( ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, float (*vertexCos)[3], int numVerts) { - Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); LaplacianDeformModifier_do((LaplacianDeformModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts); if (mesh_src != mesh) { @@ -746,7 +746,7 @@ static void deformVertsEM( ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData, Mesh *mesh, float (*vertexCos)[3], int numVerts) { - Mesh *mesh_src = get_mesh(ctx->object, editData, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, editData, mesh, NULL, false, false); LaplacianDeformModifier_do((LaplacianDeformModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts); if (mesh_src != mesh) { diff --git a/source/blender/modifiers/intern/MOD_laplaciansmooth.c b/source/blender/modifiers/intern/MOD_laplaciansmooth.c index 59e4faee633..580de4b1572 100644 --- a/source/blender/modifiers/intern/MOD_laplaciansmooth.c +++ b/source/blender/modifiers/intern/MOD_laplaciansmooth.c @@ -81,7 +81,7 @@ struct BLaplacianSystem { typedef struct BLaplacianSystem LaplacianSystem; static CustomDataMask required_data_mask(Object *ob, ModifierData *md); -static bool is_disabled(ModifierData *md, int useRenderParams); +static bool is_disabled(const struct Scene *UNUSED(scene), ModifierData *md, int 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); static void delete_laplacian_system(LaplacianSystem *sys); @@ -379,7 +379,7 @@ static void laplaciansmoothModifier_do( sys->medges = mesh->medge; sys->vertexCos = vertexCos; sys->min_area = 0.00001f; - modifier_get_vgroup_mesh(ob, mesh, smd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, smd->defgrp_name, &dvert, &defgrp_index); sys->vert_centroid[0] = 0.0f; sys->vert_centroid[1] = 0.0f; @@ -474,7 +474,7 @@ static void init_data(ModifierData *md) smd->defgrp_name[0] = '\0'; } -static bool is_disabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool is_disabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { LaplacianSmoothModifierData *smd = (LaplacianSmoothModifierData *) md; short flag; @@ -507,7 +507,7 @@ static void deformVerts( if (numVerts == 0) return; - mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); laplaciansmoothModifier_do((LaplacianSmoothModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts); @@ -525,7 +525,7 @@ static void deformVertsEM( if (numVerts == 0) return; - mesh_src = get_mesh(ctx->object, editData, mesh, NULL, false, false); + mesh_src = MOD_get_mesh_eval(ctx->object, editData, mesh, NULL, false, false); laplaciansmoothModifier_do((LaplacianSmoothModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts); diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c index 219d08fc0f6..540876ac339 100644 --- a/source/blender/modifiers/intern/MOD_lattice.c +++ b/source/blender/modifiers/intern/MOD_lattice.c @@ -67,7 +67,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) return dataMask; } -static bool isDisabled(ModifierData *md, int UNUSED(userRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(userRenderParams)) { LatticeModifierData *lmd = (LatticeModifierData *) md; @@ -100,9 +100,9 @@ static void deformVerts( int numVerts) { LatticeModifierData *lmd = (LatticeModifierData *) md; - struct Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + struct Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); - modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */ + MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */ lattice_deform_verts(lmd->object, ctx->object, mesh_src, vertexCos, numVerts, lmd->name, lmd->strength); @@ -115,7 +115,7 @@ static void deformVertsEM( ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em, struct Mesh *mesh, float (*vertexCos)[3], int numVerts) { - struct Mesh *mesh_src = get_mesh(ctx->object, em, mesh, NULL, false, false); + struct Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, em, mesh, NULL, false, false); deformVerts(md, ctx, mesh_src, vertexCos, numVerts); diff --git a/source/blender/modifiers/intern/MOD_meshcache.c b/source/blender/modifiers/intern/MOD_meshcache.c index 50765079785..9d6dfc0e1eb 100644 --- a/source/blender/modifiers/intern/MOD_meshcache.c +++ b/source/blender/modifiers/intern/MOD_meshcache.c @@ -42,6 +42,8 @@ #include "BKE_mesh.h" #include "BKE_main.h" +#include "DEG_depsgraph_query.h" + #include "MEM_guardedalloc.h" #include "MOD_meshcache_util.h" /* utility functions */ @@ -70,7 +72,7 @@ static bool dependsOnTime(ModifierData *md) return (mcmd->play_mode == MOD_MESHCACHE_PLAY_CFEA); } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { MeshCacheModifierData *mcmd = (MeshCacheModifierData *) md; @@ -80,7 +82,7 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) static void meshcache_do( - MeshCacheModifierData *mcmd, Object *ob, DerivedMesh *UNUSED(dm), + MeshCacheModifierData *mcmd, Scene *scene, Object *ob, DerivedMesh *UNUSED(dm), float (*vertexCos_Real)[3], int numVerts) { const bool use_factor = mcmd->factor < 1.0f; @@ -88,7 +90,6 @@ static void meshcache_do( MEM_malloc_arrayN(numVerts, sizeof(*vertexCos_Store), __func__) : NULL; float (*vertexCos)[3] = vertexCos_Store ? vertexCos_Store : vertexCos_Real; - Scene *scene = mcmd->modifier.scene; const float fps = FPS; char filepath[FILE_MAX]; @@ -270,8 +271,9 @@ static void deformVerts( int numVerts) { MeshCacheModifierData *mcmd = (MeshCacheModifierData *)md; + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); - meshcache_do(mcmd, ctx->object, derivedData, vertexCos, numVerts); + meshcache_do(mcmd, scene, ctx->object, derivedData, vertexCos, numVerts); } static void deformVertsEM( @@ -279,8 +281,9 @@ static void deformVertsEM( DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts) { MeshCacheModifierData *mcmd = (MeshCacheModifierData *)md; + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); - meshcache_do(mcmd, ctx->object, derivedData, vertexCos, numVerts); + meshcache_do(mcmd, scene, ctx->object, derivedData, vertexCos, numVerts); } diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c index b50672e4160..af37b30b7aa 100644 --- a/source/blender/modifiers/intern/MOD_meshdeform.c +++ b/source/blender/modifiers/intern/MOD_meshdeform.c @@ -52,6 +52,7 @@ #include "MEM_guardedalloc.h" #include "DEG_depsgraph.h" +#include "DEG_depsgraph_query.h" #include "MOD_util.h" @@ -108,7 +109,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) return dataMask; } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { MeshDeformModifierData *mmd = (MeshDeformModifierData *) md; @@ -294,7 +295,7 @@ static void meshdeformModifier_do( if (!mmd->object || (!mmd->bindcagecos && !mmd->bindfunc)) return; - /* Get cage derivedmesh. + /* Get cage mesh. * * Only do this is the target object is in edit mode by itself, meaning * we don't allow linked edit meshes here. @@ -324,8 +325,9 @@ static void meshdeformModifier_do( /* progress bar redraw can make this recursive .. */ if (!recursive) { + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); recursive = 1; - mmd->bindfunc(md->scene, mmd, cagemesh, (float *)vertexCos, numVerts, cagemat); + mmd->bindfunc(scene, mmd, cagemesh, (float *)vertexCos, numVerts, cagemat); recursive = 0; } } @@ -372,7 +374,7 @@ static void meshdeformModifier_do( copy_v3_v3(dco[a], co); } - modifier_get_vgroup_mesh(ob, mesh, mmd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, mmd->defgrp_name, &dvert, &defgrp_index); /* Initialize data to be pass to the for body function. */ data.mmd = mmd; @@ -392,7 +394,7 @@ static void meshdeformModifier_do( meshdeform_vert_task, &settings); - /* release cage derivedmesh */ + /* release cage mesh */ MEM_freeN(dco); MEM_freeN(cagecos); if (cagemesh != NULL && free_cagemesh) { @@ -406,9 +408,9 @@ static void deformVerts( float (*vertexCos)[3], int numVerts) { - Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); - modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */ + MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */ meshdeformModifier_do(md, ctx, mesh_src, vertexCos, numVerts); @@ -424,7 +426,7 @@ static void deformVertsEM( float (*vertexCos)[3], int numVerts) { - Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); meshdeformModifier_do(md, ctx, mesh_src, vertexCos, numVerts); diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.c b/source/blender/modifiers/intern/MOD_meshsequencecache.c index abd84799457..a6c9f865e4c 100644 --- a/source/blender/modifiers/intern/MOD_meshsequencecache.c +++ b/source/blender/modifiers/intern/MOD_meshsequencecache.c @@ -26,12 +26,12 @@ #include "DNA_cachefile_types.h" #include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" #include "DNA_modifier_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" #include "BKE_cachefile.h" -#include "BKE_cdderivedmesh.h" #include "BKE_library.h" #include "BKE_library_query.h" #include "BKE_scene.h" @@ -79,7 +79,7 @@ static void freeData(ModifierData *md) } } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { MeshSeqCacheModifierData *mcmd = (MeshSeqCacheModifierData *) md; @@ -98,7 +98,7 @@ static Mesh *applyModifier( Mesh *me = (ctx->object->type == OB_MESH) ? ctx->object->data : NULL; Mesh *org_mesh = mesh; - Scene *scene = md->scene; /* for FPS macro */ + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); const float frame = DEG_get_ctime(ctx->depsgraph); const float time = BKE_cachefile_time_offset(mcmd->cache_file, frame, FPS); const char *err_str = NULL; diff --git a/source/blender/modifiers/intern/MOD_multires.c b/source/blender/modifiers/intern/MOD_multires.c index a23511ff87a..aa9bc0dbc20 100644 --- a/source/blender/modifiers/intern/MOD_multires.c +++ b/source/blender/modifiers/intern/MOD_multires.c @@ -46,6 +46,8 @@ #include "BKE_modifier.h" #include "BKE_subsurf.h" +#include "DEG_depsgraph_query.h" + #include "MOD_modifiertypes.h" static void initData(ModifierData *md) @@ -63,6 +65,7 @@ static DerivedMesh *applyModifier( DerivedMesh *dm) { MultiresModifierData *mmd = (MultiresModifierData *)md; + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); DerivedMesh *result; Mesh *me = (Mesh *)ctx->object->data; const bool useRenderParams = (ctx->flag & MOD_APPLY_RENDER) != 0; @@ -86,7 +89,7 @@ static DerivedMesh *applyModifier( if (ignore_simplify) flags |= MULTIRES_IGNORE_SIMPLIFY; - result = multires_make_derived_from_derived(dm, mmd, ctx->object, flags); + result = multires_make_derived_from_derived(dm, mmd, scene, ctx->object, flags); if (result == dm) return dm; diff --git a/source/blender/modifiers/intern/MOD_none.c b/source/blender/modifiers/intern/MOD_none.c index b22b1768515..c973bd18830 100644 --- a/source/blender/modifiers/intern/MOD_none.c +++ b/source/blender/modifiers/intern/MOD_none.c @@ -43,7 +43,7 @@ * no other functions will be called */ -static bool isDisabled(ModifierData *UNUSED(md), int UNUSED(userRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *UNUSED(md), int UNUSED(userRenderParams)) { return true; } diff --git a/source/blender/modifiers/intern/MOD_normal_edit.c b/source/blender/modifiers/intern/MOD_normal_edit.c index 935d99e4a21..ae67296dda7 100644 --- a/source/blender/modifiers/intern/MOD_normal_edit.c +++ b/source/blender/modifiers/intern/MOD_normal_edit.c @@ -37,7 +37,6 @@ #include "BLI_utildefines.h" #include "BLI_bitmap.h" -#include "BKE_cdderivedmesh.h" #include "BKE_library.h" #include "BKE_library_query.h" #include "BKE_mesh.h" @@ -471,7 +470,7 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd, Object *ob, Mes clnors = CustomData_add_layer(ldata, CD_CUSTOMLOOPNORMAL, CD_CALLOC, NULL, num_loops); } - modifier_get_vgroup_mesh(ob, result, enmd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, result, enmd->defgrp_name, &dvert, &defgrp_index); if (enmd->mode == MOD_NORMALEDIT_MODE_RADIAL) { normalEditModifier_do_radial( @@ -525,7 +524,7 @@ static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, walk(userData, ob, &enmd->target, IDWALK_CB_NOP); } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { NormalEditModifierData *enmd = (NormalEditModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_ocean.c b/source/blender/modifiers/intern/MOD_ocean.c index af5b537ca52..702e557ccb1 100644 --- a/source/blender/modifiers/intern/MOD_ocean.c +++ b/source/blender/modifiers/intern/MOD_ocean.c @@ -46,6 +46,8 @@ #include "BKE_modifier.h" #include "BKE_ocean.h" +#include "DEG_depsgraph_query.h" + #include "MOD_modifiertypes.h" #ifdef WITH_OCEANSIM @@ -406,7 +408,7 @@ static DerivedMesh *generate_ocean_geometry(OceanModifierData *omd) } static DerivedMesh *doOcean( - ModifierData *md, Object *ob, + ModifierData *md, Scene *scene, Object *ob, DerivedMesh *derivedData, int UNUSED(useRenderParams)) { @@ -450,7 +452,7 @@ static DerivedMesh *doOcean( if (!omd->oceancache) { init_cache_data(ob, omd); } - BKE_ocean_simulate_cache(omd->oceancache, md->scene->r.cfra); + BKE_ocean_simulate_cache(omd->oceancache, scene->r.cfra); } else { simulate_ocean_modifier(omd); @@ -464,7 +466,7 @@ static DerivedMesh *doOcean( dm = CDDM_copy(derivedData); } - cfra = md->scene->r.cfra; + cfra = scene->r.cfra; CLAMP(cfra, omd->bakestart, omd->bakeend); cfra -= omd->bakestart; /* shift to 0 based */ @@ -547,12 +549,11 @@ static DerivedMesh *doOcean( } #else /* WITH_OCEANSIM */ static DerivedMesh *doOcean( - ModifierData *md, Object *UNUSED(ob), + ModifierData *UNUSED(md), Scene *UNUSED(scene), Object *UNUSED(ob), DerivedMesh *derivedData, int UNUSED(useRenderParams)) { /* unused */ - (void)md; return derivedData; } #endif /* WITH_OCEANSIM */ @@ -562,8 +563,10 @@ static DerivedMesh *applyModifier( DerivedMesh *derivedData) { DerivedMesh *result; + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); + - result = doOcean(md, ctx->object, derivedData, 0); + result = doOcean(md, scene, ctx->object, derivedData, 0); if (result != derivedData) result->dirty |= DM_DIRTY_NORMALS; diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c index 0aafcf33202..bb6ed8e8344 100644 --- a/source/blender/modifiers/intern/MOD_particleinstance.c +++ b/source/blender/modifiers/intern/MOD_particleinstance.c @@ -54,6 +54,7 @@ #include "BKE_pointcache.h" #include "DEG_depsgraph_build.h" +#include "DEG_depsgraph_query.h" static void initData(ModifierData *md) { @@ -87,7 +88,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) } -static bool isDisabled(ModifierData *md, int useRenderParams) +static bool isDisabled(const struct Scene *scene, ModifierData *md, int useRenderParams) { ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData *)md; ParticleSystem *psys; @@ -112,7 +113,7 @@ static bool isDisabled(ModifierData *md, int useRenderParams) if (useRenderParams) required_mode = eModifierMode_Render; else required_mode = eModifierMode_Realtime; - if (!modifier_isEnabled(md->scene, ob_md, required_mode)) + if (!modifier_isEnabled(scene, ob_md, required_mode)) return true; break; @@ -202,6 +203,7 @@ static Mesh *applyModifier( { Mesh *result; ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData *) md; + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); ParticleSimulationData sim; ParticleSystem *psys = NULL; ParticleData *pa = NULL; @@ -247,7 +249,7 @@ static Mesh *applyModifier( return mesh; sim.depsgraph = ctx->depsgraph; - sim.scene = md->scene; + sim.scene = scene; sim.ob = pimd->ob; sim.psys = psys; sim.psmd = psys_get_modifier(pimd->ob, psys); diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c index cbdeeebaa04..1821a0fced0 100644 --- a/source/blender/modifiers/intern/MOD_particlesystem.c +++ b/source/blender/modifiers/intern/MOD_particlesystem.c @@ -41,15 +41,15 @@ #include "BLI_utildefines.h" -#include "BKE_cdderivedmesh.h" #include "BKE_editmesh.h" #include "BKE_mesh.h" #include "BKE_library.h" #include "BKE_modifier.h" #include "BKE_particle.h" -#include "MOD_util.h" +#include "DEG_depsgraph_query.h" +#include "MOD_util.h" static void initData(ModifierData *md) { @@ -120,7 +120,7 @@ static void deformVerts( return; if (mesh_src == NULL) { - mesh_src = get_mesh(ctx->object, NULL, NULL, vertexCos, false, true); + mesh_src = MOD_get_mesh_eval(ctx->object, NULL, NULL, vertexCos, false, true); if (mesh_src == NULL) { return; } @@ -210,26 +210,31 @@ static void deformVerts( } if (!(ctx->object->transflag & OB_NO_PSYS_UPDATE)) { + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); psmd->flag &= ~eParticleSystemFlag_psys_updated; - particle_system_update(ctx->depsgraph, md->scene, ctx->object, psys, (ctx->flag & MOD_APPLY_RENDER) != 0); + particle_system_update(ctx->depsgraph, scene, ctx->object, psys, (ctx->flag & MOD_APPLY_RENDER) != 0); psmd->flag |= eParticleSystemFlag_psys_updated; } } -/* disabled particles in editmode for now, until support for proper derivedmesh +/* disabled particles in editmode for now, until support for proper evaluated mesh * updates is coded */ #if 0 static void deformVertsEM( - ModifierData *md, Object *ob, EditMesh *editData, - DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts) + ModifierData *md, Object *ob, BMEditMesh *editData, + Mesh *mesh, float (*vertexCos)[3], int numVerts) { - DerivedMesh *dm = derivedData; - - if (!derivedData) dm = CDDM_from_editmesh(editData, ob->data); + const bool do_temp_mesh = (mesh == NULL); + if (do_temp_mesh) { + mesh = BKE_id_new_nomain(ID_ME, ((ID *)ob->data)->name); + BM_mesh_bm_to_me(NULL, editData->bm, mesh, &((BMeshToMeshParams){0})); + } - deformVerts(md, ob, dm, vertexCos, numVerts); + deformVerts(md, ob, mesh, vertexCos, numVerts); - if (!derivedData) dm->release(dm); + if (derivedData) { + BKE_id_free(NULL, mesh); + } } #endif diff --git a/source/blender/modifiers/intern/MOD_shapekey.c b/source/blender/modifiers/intern/MOD_shapekey.c index 90c339361b7..a6c7419da49 100644 --- a/source/blender/modifiers/intern/MOD_shapekey.c +++ b/source/blender/modifiers/intern/MOD_shapekey.c @@ -34,11 +34,11 @@ #include "BLI_math.h" +#include "DNA_mesh_types.h" #include "DNA_key_types.h" #include "BLI_utildefines.h" -#include "BKE_cdderivedmesh.h" #include "BKE_key.h" #include "BKE_particle.h" @@ -46,7 +46,7 @@ static void deformVerts( ModifierData *UNUSED(md), const ModifierEvalContext *ctx, - DerivedMesh *UNUSED(derivedData), + Mesh *UNUSED(mesh), float (*vertexCos)[3], int numVerts) { @@ -62,7 +62,7 @@ static void deformVerts( } static void deformMatrices( - ModifierData *md, const ModifierEvalContext *ctx, DerivedMesh *derivedData, + ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, float (*vertexCos)[3], float (*defMats)[3][3], int numVerts) { Key *key = BKE_key_from_object(ctx->object); @@ -81,26 +81,26 @@ static void deformMatrices( copy_m3_m3(defMats[a], scale); } - deformVerts(md, ctx, derivedData, vertexCos, numVerts); + deformVerts(md, ctx, mesh, vertexCos, numVerts); } static void deformVertsEM( ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *UNUSED(editData), - DerivedMesh *derivedData, + Mesh *mesh, float (*vertexCos)[3], int numVerts) { Key *key = BKE_key_from_object(ctx->object); if (key && key->type == KEY_RELATIVE) - deformVerts(md, ctx, derivedData, vertexCos, numVerts); + deformVerts(md, ctx, mesh, vertexCos, numVerts); } static void deformMatricesEM( ModifierData *UNUSED(md), const ModifierEvalContext *ctx, struct BMEditMesh *UNUSED(editData), - DerivedMesh *UNUSED(derivedData), + Mesh *UNUSED(mesh), float (*vertexCos)[3], float (*defMats)[3][3], int numVerts) @@ -132,17 +132,17 @@ ModifierTypeInfo modifierType_ShapeKey = { /* copyData */ NULL, - /* deformVerts_DM */ deformVerts, - /* deformMatrices_DM */ deformMatrices, - /* deformVertsEM_DM */ deformVertsEM, - /* deformMatricesEM_DM*/deformMatricesEM, + /* deformVerts_DM */ NULL, + /* deformMatrices_DM */ NULL, + /* deformVertsEM_DM */ NULL, + /* deformMatricesEM_DM*/NULL, /* applyModifier_DM */ NULL, /* applyModifierEM_DM */NULL, - /* deformVerts */ NULL, - /* deformMatrices */ NULL, - /* deformVertsEM */ NULL, - /* deformMatricesEM */ NULL, + /* deformVerts */ deformVerts, + /* deformMatrices */ deformMatrices, + /* deformVertsEM */ deformVertsEM, + /* deformMatricesEM */ deformMatricesEM, /* applyModifier */ NULL, /* applyModifierEM */ NULL, diff --git a/source/blender/modifiers/intern/MOD_shrinkwrap.c b/source/blender/modifiers/intern/MOD_shrinkwrap.c index da31de911e4..72c1c1552c7 100644 --- a/source/blender/modifiers/intern/MOD_shrinkwrap.c +++ b/source/blender/modifiers/intern/MOD_shrinkwrap.c @@ -48,6 +48,8 @@ #include "BKE_modifier.h" #include "BKE_shrinkwrap.h" +#include "DEG_depsgraph_query.h" + #include "MOD_util.h" static bool dependsOnNormals(ModifierData *md); @@ -82,7 +84,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) return dataMask; } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *) md; return !smd->target; @@ -103,6 +105,7 @@ static void deformVerts( float (*vertexCos)[3], int numVerts) { + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); Mesh *mesh_src = mesh; if (mesh_src == NULL) { @@ -111,7 +114,7 @@ static void deformVerts( BLI_assert(mesh_src->totvert == numVerts); - shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts); + shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, scene, ctx->object, mesh_src, vertexCos, numVerts); } static void deformVertsEM( @@ -119,6 +122,7 @@ static void deformVertsEM( struct BMEditMesh *editData, Mesh *mesh, float (*vertexCos)[3], int numVerts) { + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); Mesh *mesh_src = mesh; if (mesh_src == NULL) { @@ -127,7 +131,7 @@ static void deformVertsEM( BLI_assert(mesh_src->totvert == numVerts); - shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts); + shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, scene, ctx->object, mesh_src, vertexCos, numVerts); if (!mesh) { BKE_id_free(NULL, mesh_src); diff --git a/source/blender/modifiers/intern/MOD_simpledeform.c b/source/blender/modifiers/intern/MOD_simpledeform.c index 3f62351bceb..756ce3c83a9 100644 --- a/source/blender/modifiers/intern/MOD_simpledeform.c +++ b/source/blender/modifiers/intern/MOD_simpledeform.c @@ -39,7 +39,6 @@ #include "BLI_math.h" #include "BLI_utildefines.h" -#include "BKE_cdderivedmesh.h" #include "BKE_editmesh.h" #include "BKE_mesh.h" #include "BKE_library.h" @@ -287,7 +286,7 @@ static void SimpleDeformModifier_do( } } - modifier_get_vgroup_mesh(ob, mesh, smd->vgroup_name, &dvert, &vgroup); + MOD_get_vgroup(ob, mesh, smd->vgroup_name, &dvert, &vgroup); const bool invert_vgroup = (smd->flag & MOD_SIMPLEDEFORM_FLAG_INVERT_VGROUP) != 0; const uint *axis_map = axis_map_table[(smd->mode != MOD_SIMPLEDEFORM_MODE_BEND) ? deform_axis : 2]; @@ -386,7 +385,7 @@ static void deformVerts( float (*vertexCos)[3], int numVerts) { - Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); SimpleDeformModifier_do((SimpleDeformModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts); @@ -402,7 +401,7 @@ static void deformVertsEM( float (*vertexCos)[3], int numVerts) { - Mesh *mesh_src = get_mesh(ctx->object, editData, mesh, NULL, false, false); + Mesh *mesh_src = MOD_get_mesh_eval(ctx->object, editData, mesh, NULL, false, false); SimpleDeformModifier_do((SimpleDeformModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts); diff --git a/source/blender/modifiers/intern/MOD_skin.c b/source/blender/modifiers/intern/MOD_skin.c index 323994e6738..31d556292f8 100644 --- a/source/blender/modifiers/intern/MOD_skin.c +++ b/source/blender/modifiers/intern/MOD_skin.c @@ -864,7 +864,7 @@ static Mesh *subdivide_base(Mesh *orig) MEM_freeN(degree); - /* Allocate output derivedmesh */ + /* Allocate output mesh */ result = BKE_mesh_new_nomain_from_template( orig, totorigvert + totsubd, diff --git a/source/blender/modifiers/intern/MOD_smoke.c b/source/blender/modifiers/intern/MOD_smoke.c index 4c10df71f92..e81c760ed67 100644 --- a/source/blender/modifiers/intern/MOD_smoke.c +++ b/source/blender/modifiers/intern/MOD_smoke.c @@ -55,6 +55,8 @@ #include "DEG_depsgraph.h" #include "DEG_depsgraph_build.h" +#include "DEG_depsgraph_physics.h" +#include "DEG_depsgraph_query.h" #include "MOD_modifiertypes.h" @@ -108,10 +110,12 @@ static DerivedMesh *applyModifier( { SmokeModifierData *smd = (SmokeModifierData *) md; - if (ctx->flag & MOD_APPLY_ORCO) + if (ctx->flag & MOD_APPLY_ORCO) { return dm; + } - return smokeModifier_do(smd, ctx->depsgraph, md->scene, ctx->object, dm); + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); + return smokeModifier_do(smd, ctx->depsgraph, scene, ctx->object, dm); } static bool dependsOnTime(ModifierData *UNUSED(md)) @@ -136,11 +140,9 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte SmokeModifierData *smd = (SmokeModifierData *)md; if (smd && (smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) { - /* Actual code uses get_collisionobjects */ - DEG_add_collision_relations(ctx->node, ctx->scene, ctx->object, smd->domain->fluid_group, eModifierType_Smoke, is_flow_cb, true, "Smoke Flow"); - DEG_add_collision_relations(ctx->node, ctx->scene, ctx->object, smd->domain->coll_group, eModifierType_Smoke, is_coll_cb, true, "Smoke Coll"); - - DEG_add_forcefield_relations(ctx->node, ctx->scene, ctx->object, smd->domain->effector_weights, true, PFIELD_SMOKEFLOW, "Smoke Force Field"); + DEG_add_collision_relations(ctx->node, ctx->object, smd->domain->fluid_group, eModifierType_Smoke, is_flow_cb, "Smoke Flow"); + DEG_add_collision_relations(ctx->node, ctx->object, smd->domain->coll_group, eModifierType_Smoke, is_coll_cb, "Smoke Coll"); + DEG_add_forcefield_relations(ctx->node, ctx->object, smd->domain->effector_weights, true, PFIELD_SMOKEFLOW, "Smoke Force Field"); } } diff --git a/source/blender/modifiers/intern/MOD_smooth.c b/source/blender/modifiers/intern/MOD_smooth.c index e44ead73ced..280a795fae8 100644 --- a/source/blender/modifiers/intern/MOD_smooth.c +++ b/source/blender/modifiers/intern/MOD_smooth.c @@ -61,7 +61,7 @@ static void initData(ModifierData *md) smd->defgrp_name[0] = '\0'; } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { SmoothModifierData *smd = (SmoothModifierData *) md; short flag; @@ -118,7 +118,7 @@ static void smoothModifier_do( numDMEdges = 0; } - modifier_get_vgroup_mesh(ob, mesh, smd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, smd->defgrp_name, &dvert, &defgrp_index); /* NOTICE: this can be optimized a little bit by moving the * if (dvert) out of the loop, if needed */ diff --git a/source/blender/modifiers/intern/MOD_softbody.c b/source/blender/modifiers/intern/MOD_softbody.c index 30f9829ae20..55df32b0e18 100644 --- a/source/blender/modifiers/intern/MOD_softbody.c +++ b/source/blender/modifiers/intern/MOD_softbody.c @@ -46,17 +46,19 @@ #include "DEG_depsgraph.h" #include "DEG_depsgraph_build.h" +#include "DEG_depsgraph_physics.h" #include "DEG_depsgraph_query.h" #include "MOD_modifiertypes.h" static void deformVerts( - ModifierData *md, const ModifierEvalContext *ctx, + ModifierData *UNUSED(md), const ModifierEvalContext *ctx, Mesh *UNUSED(derivedData), float (*vertexCos)[3], int numVerts) { - sbObjectStep(ctx->depsgraph, md->scene, ctx->object, DEG_get_ctime(ctx->depsgraph), vertexCos, numVerts); + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); + sbObjectStep(ctx->depsgraph, scene, ctx->object, DEG_get_ctime(ctx->depsgraph), vertexCos, numVerts); } static bool dependsOnTime(ModifierData *UNUSED(md)) @@ -68,9 +70,8 @@ static void updateDepsgraph(ModifierData *UNUSED(md), const ModifierUpdateDepsgr { if (ctx->object->soft) { /* Actual code uses ccd_build_deflector_hash */ - DEG_add_collision_relations(ctx->node, ctx->scene, ctx->object, ctx->object->soft->collision_group, eModifierType_Collision, NULL, false, "Softbody Collision"); - - DEG_add_forcefield_relations(ctx->node, ctx->scene, ctx->object, ctx->object->soft->effector_weights, true, 0, "Softbody Field"); + DEG_add_collision_relations(ctx->node, ctx->object, ctx->object->soft->collision_group, eModifierType_Collision, NULL, "Softbody Collision"); + DEG_add_forcefield_relations(ctx->node, ctx->object, ctx->object->soft->effector_weights, true, 0, "Softbody Field"); } } diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c index b99b35bbb8e..3a1fe1513af 100644 --- a/source/blender/modifiers/intern/MOD_solidify.c +++ b/source/blender/modifiers/intern/MOD_solidify.c @@ -40,7 +40,6 @@ #include "BLI_bitmap.h" #include "BLI_math.h" -#include "BKE_cdderivedmesh.h" #include "BKE_mesh.h" #include "BKE_particle.h" #include "BKE_deform.h" @@ -251,7 +250,7 @@ static Mesh *applyModifier( /* array size is doubled in case of using a shell */ const unsigned int stride = do_shell ? 2 : 1; - modifier_get_vgroup_mesh(ctx->object, mesh, smd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ctx->object, mesh, smd->defgrp_name, &dvert, &defgrp_index); orig_mvert = mesh->mvert; orig_medge = mesh->medge; diff --git a/source/blender/modifiers/intern/MOD_subsurf.c b/source/blender/modifiers/intern/MOD_subsurf.c index c4eb99840fb..3de04e878ac 100644 --- a/source/blender/modifiers/intern/MOD_subsurf.c +++ b/source/blender/modifiers/intern/MOD_subsurf.c @@ -91,12 +91,12 @@ static void freeData(ModifierData *md) } } -static bool isDisabled(ModifierData *md, int useRenderParams) +static bool isDisabled(const Scene *scene, ModifierData *md, int useRenderParams) { SubsurfModifierData *smd = (SubsurfModifierData *) md; int levels = (useRenderParams) ? smd->renderLevels : smd->levels; - return get_render_subsurf_level(&md->scene->r, levels, useRenderParams != 0) == 0; + return get_render_subsurf_level(&scene->r, levels, useRenderParams != 0) == 0; } static DerivedMesh *applyModifier( @@ -104,6 +104,7 @@ static DerivedMesh *applyModifier( DerivedMesh *derivedData) { SubsurfModifierData *smd = (SubsurfModifierData *) md; + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); SubsurfFlags subsurf_flags = 0; DerivedMesh *result; const bool useRenderParams = (ctx->flag & MOD_APPLY_RENDER) != 0; @@ -146,7 +147,7 @@ static DerivedMesh *applyModifier( } #endif - result = subsurf_make_derived_from_derived(derivedData, smd, NULL, subsurf_flags); + result = subsurf_make_derived_from_derived(derivedData, smd, scene, NULL, subsurf_flags); result->cd_flag = derivedData->cd_flag; { @@ -168,6 +169,7 @@ static DerivedMesh *applyModifierEM( DerivedMesh *derivedData) { SubsurfModifierData *smd = (SubsurfModifierData *) md; + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); DerivedMesh *result; /* 'orco' using editmode flags would cause cache to be used twice in editbmesh_calc_modifiers */ SubsurfFlags ss_flags = (ctx->flag & MOD_APPLY_ORCO) ? 0 : (SUBSURF_FOR_EDIT_MODE | SUBSURF_IN_EDIT_MODE); @@ -178,7 +180,7 @@ static DerivedMesh *applyModifierEM( } #endif - result = subsurf_make_derived_from_derived(derivedData, smd, NULL, ss_flags); + result = subsurf_make_derived_from_derived(derivedData, smd, scene, NULL, ss_flags); return result; } @@ -234,4 +236,3 @@ ModifierTypeInfo modifierType_Subsurf = { /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, }; - diff --git a/source/blender/modifiers/intern/MOD_surface.c b/source/blender/modifiers/intern/MOD_surface.c index d6e78c6f19b..33a6fbe6c78 100644 --- a/source/blender/modifiers/intern/MOD_surface.c +++ b/source/blender/modifiers/intern/MOD_surface.c @@ -111,7 +111,7 @@ static void deformVerts( LIB_ID_COPY_NO_PREVIEW, false); } - else surmd->mesh = get_mesh(ctx->object, NULL, NULL, NULL, false, false); + else surmd->mesh = MOD_get_mesh_eval(ctx->object, NULL, NULL, NULL, false, false); if (!ctx->object->pd) { printf("SurfaceModifier deformVerts: Should not happen!\n"); diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.c b/source/blender/modifiers/intern/MOD_surfacedeform.c index e964da0a8d1..a3ab2d74602 100644 --- a/source/blender/modifiers/intern/MOD_surfacedeform.c +++ b/source/blender/modifiers/intern/MOD_surfacedeform.c @@ -1195,7 +1195,7 @@ static void deformVertsEM( surfacedeformModifier_do(md, ctx, vertexCos, numVerts, ctx->object); } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md; diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c index c72cf41737e..721474a62f3 100644 --- a/source/blender/modifiers/intern/MOD_util.c +++ b/source/blender/modifiers/intern/MOD_util.c @@ -40,10 +40,10 @@ #include "DNA_scene_types.h" #include "BLI_utildefines.h" +#include "BLI_bitmap.h" #include "BLI_math_vector.h" #include "BLI_math_matrix.h" -#include "BKE_cdderivedmesh.h" #include "BKE_deform.h" #include "BKE_editmesh.h" #include "BKE_image.h" @@ -63,7 +63,7 @@ #include "bmesh.h" -void modifier_init_texture(const Depsgraph *depsgraph, Tex *tex) +void MOD_init_texture(const Depsgraph *depsgraph, Tex *tex) { if (!tex) return; @@ -75,7 +75,7 @@ void modifier_init_texture(const Depsgraph *depsgraph, Tex *tex) /* TODO to be renamed to get_texture_coords once we are done with moving modifiers to Mesh. */ /** \param cos may be NULL, in which case we use directly mesh vertices' coordinates. */ -void get_texture_coords_mesh( +void MOD_get_texture_coords( MappingInfoModifierData *dmd, Object *ob, Mesh *mesh, @@ -155,80 +155,7 @@ void get_texture_coords_mesh( } } -void get_texture_coords( - MappingInfoModifierData *dmd, Object *ob, - DerivedMesh *dm, - float (*co)[3], float (*texco)[3], - int numVerts) -{ - int i; - int texmapping = dmd->texmapping; - float mapob_imat[4][4]; - - if (texmapping == MOD_DISP_MAP_OBJECT) { - if (dmd->map_object) - invert_m4_m4(mapob_imat, dmd->map_object->obmat); - else /* if there is no map object, default to local */ - texmapping = MOD_DISP_MAP_LOCAL; - } - - /* UVs need special handling, since they come from faces */ - if (texmapping == MOD_DISP_MAP_UV) { - if (CustomData_has_layer(&dm->loopData, CD_MLOOPUV)) { - MPoly *mpoly = dm->getPolyArray(dm); - MPoly *mp; - MLoop *mloop = dm->getLoopArray(dm); - char *done = MEM_calloc_arrayN(numVerts, sizeof(*done), - "get_texture_coords done"); - int numPolys = dm->getNumPolys(dm); - char uvname[MAX_CUSTOMDATA_LAYER_NAME]; - MLoopUV *mloop_uv; - - CustomData_validate_layer_name(&dm->loopData, CD_MLOOPUV, dmd->uvlayer_name, uvname); - mloop_uv = CustomData_get_layer_named(&dm->loopData, CD_MLOOPUV, uvname); - - /* verts are given the UV from the first face that uses them */ - for (i = 0, mp = mpoly; i < numPolys; ++i, ++mp) { - unsigned int fidx = mp->totloop - 1; - - do { - unsigned int lidx = mp->loopstart + fidx; - unsigned int vidx = mloop[lidx].v; - - if (done[vidx] == 0) { - /* remap UVs from [0, 1] to [-1, 1] */ - texco[vidx][0] = (mloop_uv[lidx].uv[0] * 2.0f) - 1.0f; - texco[vidx][1] = (mloop_uv[lidx].uv[1] * 2.0f) - 1.0f; - done[vidx] = 1; - } - - } while (fidx--); - } - - MEM_freeN(done); - return; - } - else /* if there are no UVs, default to local */ - texmapping = MOD_DISP_MAP_LOCAL; - } - - for (i = 0; i < numVerts; ++i, ++co, ++texco) { - switch (texmapping) { - case MOD_DISP_MAP_LOCAL: - copy_v3_v3(*texco, *co); - break; - case MOD_DISP_MAP_GLOBAL: - mul_v3_m4v3(*texco, ob->obmat, *co); - break; - case MOD_DISP_MAP_OBJECT: - mul_v3_m4v3(*texco, ob->obmat, *co); - mul_m4_v3(mapob_imat, *texco); - break; - } - } -} - -void modifier_vgroup_cache(ModifierData *md, float (*vertexCos)[3]) +void MOD_previous_vcos_store(ModifierData *md, float (*vertexCos)[3]) { while ((md = md->next) && md->type == eModifierType_Armature) { ArmatureModifierData *amd = (ArmatureModifierData *) md; @@ -240,62 +167,8 @@ void modifier_vgroup_cache(ModifierData *md, float (*vertexCos)[3]) /* lattice/mesh modifier too */ } -/* returns a cdderivedmesh if dm == NULL or is another type of derivedmesh */ -DerivedMesh *get_cddm(Object *ob, struct BMEditMesh *em, DerivedMesh *dm, float (*vertexCos)[3], bool use_normals) -{ - if (dm) { - if (dm->type != DM_TYPE_CDDM) { - dm = CDDM_copy(dm); - } - CDDM_apply_vert_coords(dm, vertexCos); - - if (use_normals) { - DM_ensure_normals(dm); - } - } - else { - dm = get_dm(ob, em, dm, vertexCos, use_normals, false); - } - - return dm; -} - -/* returns a derived mesh if dm == NULL, for deforming modifiers that need it */ -DerivedMesh *get_dm( - Object *ob, struct BMEditMesh *em, DerivedMesh *dm, - float (*vertexCos)[3], bool use_normals, bool use_orco) -{ - if (dm) { - /* pass */ - } - else if (ob->type == OB_MESH) { - if (em) dm = CDDM_from_editbmesh(em, false, false); - else dm = CDDM_from_mesh((struct Mesh *)(ob->data)); - - if (vertexCos) { - CDDM_apply_vert_coords(dm, vertexCos); - dm->dirty |= DM_DIRTY_NORMALS; - } - - if (use_orco) { - DM_add_vert_layer(dm, CD_ORCO, CD_ASSIGN, BKE_mesh_orco_verts_get(ob)); - } - } - else if (ELEM(ob->type, OB_FONT, OB_CURVE, OB_SURF)) { - dm = CDDM_from_curve(ob); - } - - if (use_normals) { - if (LIKELY(dm)) { - DM_ensure_normals(dm); - } - } - - return dm; -} - /* returns a mesh if mesh == NULL, for deforming modifiers that need it */ -Mesh *get_mesh( +Mesh *MOD_get_mesh_eval( Object *ob, struct BMEditMesh *em, Mesh *mesh, float (*vertexCos)[3], bool use_normals, bool use_orco) { @@ -345,35 +218,7 @@ Mesh *get_mesh( return mesh; } -/* Get derived mesh for other object, which is used as an operand for the modifier, - * i.e. second operand for boolean modifier. - */ -DerivedMesh *get_dm_for_modifier(Object *ob, ModifierApplyFlag flag) -{ - if (flag & MOD_APPLY_RENDER) { - /* TODO(sergey): Use proper derived render in the future. */ - return ob->derivedFinal; - } - else { - return ob->derivedFinal; - } -} - -void modifier_get_vgroup(Object *ob, DerivedMesh *dm, const char *name, MDeformVert **dvert, int *defgrp_index) -{ - *defgrp_index = defgroup_name_index(ob, name); - *dvert = NULL; - - if (*defgrp_index != -1) { - if (ob->type == OB_LATTICE) - *dvert = BKE_lattice_deform_verts_get(ob); - else if (dm) - *dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT); - } -} - -/* TODO(sybren): replace the above function with this one, once we got rid of DerivedMesh for modifiers. */ -void modifier_get_vgroup_mesh(Object *ob, struct Mesh *mesh, const char *name, MDeformVert **dvert, int *defgrp_index) +void MOD_get_vgroup(Object *ob, struct Mesh *mesh, const char *name, MDeformVert **dvert, int *defgrp_index) { *defgrp_index = defgroup_name_index(ob, name); *dvert = NULL; diff --git a/source/blender/modifiers/intern/MOD_util.h b/source/blender/modifiers/intern/MOD_util.h index 0b3452b22b8..bb15fc32b6b 100644 --- a/source/blender/modifiers/intern/MOD_util.h +++ b/source/blender/modifiers/intern/MOD_util.h @@ -33,7 +33,6 @@ #include "DEG_depsgraph_build.h" -struct DerivedMesh; struct Depsgraph; struct MDeformVert; struct Mesh; @@ -42,32 +41,21 @@ struct Object; struct Scene; struct Tex; -void modifier_init_texture(const struct Depsgraph *depsgraph, struct Tex *texture); -void get_texture_coords( - struct MappingInfoModifierData *dmd, struct Object *ob, struct DerivedMesh *dm, - float (*co)[3], float (*texco)[3], int numVerts); -void get_texture_coords_mesh( +void MOD_init_texture(const struct Depsgraph *depsgraph, struct Tex *texture); +void MOD_get_texture_coords( struct MappingInfoModifierData *dmd, struct Object *ob, struct Mesh *mesh, float (*cos)[3], float (*r_texco)[3]); -void modifier_vgroup_cache(struct ModifierData *md, float (*vertexCos)[3]); -struct DerivedMesh *get_cddm( - struct Object *ob, struct BMEditMesh *em, struct DerivedMesh *dm, - float (*vertexCos)[3], bool use_normals); -struct DerivedMesh *get_dm( - struct Object *ob, struct BMEditMesh *em, struct DerivedMesh *dm, - float (*vertexCos)[3], bool use_normals, bool use_orco); -struct Mesh *get_mesh( + +void MOD_previous_vcos_store(struct ModifierData *md, float (*vertexCos)[3]); + +struct Mesh *MOD_get_mesh_eval( struct Object *ob, struct BMEditMesh *em, struct Mesh *mesh, float (*vertexCos)[3], bool use_normals, bool use_orco); -struct DerivedMesh *get_dm_for_modifier(struct Object *ob, ModifierApplyFlag flag); -void modifier_get_vgroup( - struct Object *ob, struct DerivedMesh *dm, - const char *name, struct MDeformVert **dvert, int *defgrp_index); -void modifier_get_vgroup_mesh( +void MOD_get_vgroup( struct Object *ob, struct Mesh *mesh, const char *name, struct MDeformVert **dvert, int *defgrp_index); diff --git a/source/blender/modifiers/intern/MOD_uvwarp.c b/source/blender/modifiers/intern/MOD_uvwarp.c index c650ae995db..4046e0c2142 100644 --- a/source/blender/modifiers/intern/MOD_uvwarp.c +++ b/source/blender/modifiers/intern/MOD_uvwarp.c @@ -27,6 +27,7 @@ #include <string.h> +#include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" #include "DNA_object_types.h" @@ -35,7 +36,6 @@ #include "BLI_utildefines.h" #include "BKE_action.h" /* BKE_pose_channel_find_name */ -#include "BKE_cdderivedmesh.h" #include "BKE_deform.h" #include "BKE_library_query.h" #include "BKE_modifier.h" @@ -138,9 +138,9 @@ static void uv_warp_compute( } } -static DerivedMesh *applyModifier( +static Mesh *applyModifier( ModifierData *md, const ModifierEvalContext *ctx, - DerivedMesh *dm) + Mesh *mesh) { UVWarpModifierData *umd = (UVWarpModifierData *) md; int numPolys, numLoops; @@ -158,12 +158,12 @@ static DerivedMesh *applyModifier( const int axis_v = umd->axis_v; /* make sure there are UV Maps available */ - if (!CustomData_has_layer(&dm->loopData, CD_MLOOPUV)) { - return dm; + if (!CustomData_has_layer(&mesh->ldata, CD_MLOOPUV)) { + return mesh; } else if (ELEM(NULL, umd->object_src, umd->object_dst)) { modifier_setError(md, "From/To objects must be set"); - return dm; + return mesh; } /* make sure anything moving UVs is available */ @@ -189,16 +189,16 @@ static DerivedMesh *applyModifier( } /* make sure we're using an existing layer */ - CustomData_validate_layer_name(&dm->loopData, CD_MLOOPUV, umd->uvlayer_name, uvname); + CustomData_validate_layer_name(&mesh->ldata, CD_MLOOPUV, umd->uvlayer_name, uvname); - numPolys = dm->getNumPolys(dm); - numLoops = dm->getNumLoops(dm); + numPolys = mesh->totpoly; + numLoops = mesh->totloop; - mpoly = dm->getPolyArray(dm); - mloop = dm->getLoopArray(dm); + mpoly = mesh->mpoly; + mloop = mesh->mloop; /* make sure we are not modifying the original UV map */ - mloopuv = CustomData_duplicate_referenced_layer_named(&dm->loopData, CD_MLOOPUV, uvname, numLoops); - modifier_get_vgroup(ctx->object, dm, umd->vgroup_name, &dvert, &defgrp_index); + mloopuv = CustomData_duplicate_referenced_layer_named(&mesh->ldata, CD_MLOOPUV, uvname, numLoops); + MOD_get_vgroup(ctx->object, mesh, umd->vgroup_name, &dvert, &defgrp_index); UVWarpData data = {.mpoly = mpoly, .mloop = mloop, .mloopuv = mloopuv, .dvert = dvert, .defgrp_index = defgrp_index, @@ -211,9 +211,10 @@ static DerivedMesh *applyModifier( uv_warp_compute, &settings); - dm->dirty |= DM_DIRTY_TESS_CDLAYERS; + /* XXX TODO is this still needed? */ +// me_eval->dirty |= DM_DIRTY_TESS_CDLAYERS; - return dm; + return mesh; } static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData) @@ -260,14 +261,14 @@ ModifierTypeInfo modifierType_UVWarp = { /* deformMatrices_DM */ NULL, /* deformVertsEM_DM */ NULL, /* deformMatricesEM_DM*/NULL, - /* applyModifier_DM */ applyModifier, + /* applyModifier_DM */ NULL, /* applyModifierEM_DM */NULL, /* deformVerts */ NULL, /* deformMatrices */ NULL, /* deformVertsEM */ NULL, /* deformMatricesEM */ NULL, - /* applyModifier */ NULL, + /* applyModifier */ applyModifier, /* applyModifierEM */ NULL, /* initData */ initData, diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c index 4df71d91e3e..54f8ce8c515 100644 --- a/source/blender/modifiers/intern/MOD_warp.c +++ b/source/blender/modifiers/intern/MOD_warp.c @@ -46,6 +46,7 @@ #include "BKE_colortools.h" #include "DEG_depsgraph.h" +#include "DEG_depsgraph_query.h" #include "RE_shader_ext.h" @@ -108,7 +109,7 @@ static void freeData(ModifierData *md) } -static bool isDisabled(ModifierData *md, int UNUSED(userRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(userRenderParams)) { WarpModifierData *wmd = (WarpModifierData *) md; @@ -177,7 +178,7 @@ static void warpModifier_do( if (!(wmd->object_from && wmd->object_to)) return; - modifier_get_vgroup_mesh(ob, mesh, wmd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, wmd->defgrp_name, &dvert, &defgrp_index); if (dvert == NULL) { defgrp_index = -1; } @@ -215,9 +216,9 @@ static void warpModifier_do( if (wmd->texture) { tex_co = MEM_malloc_arrayN(numVerts, sizeof(*tex_co), "warpModifier_do tex_co"); - get_texture_coords_mesh((MappingInfoModifierData *)wmd, ob, mesh, vertexCos, tex_co); + MOD_get_texture_coords((MappingInfoModifierData *)wmd, ob, mesh, vertexCos, tex_co); - modifier_init_texture(depsgraph, wmd->texture); + MOD_init_texture(depsgraph, wmd->texture); } for (i = 0; i < numVerts; i++) { @@ -271,9 +272,10 @@ static void warpModifier_do( fac *= weight; if (tex_co) { + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); TexResult texres; texres.nor = NULL; - BKE_texture_get_value(wmd->modifier.scene, wmd->texture, tex_co[i], &texres, false); + BKE_texture_get_value(scene, wmd->texture, tex_co[i], &texres, false); fac *= texres.tin; } diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c index 552746634c5..c569ef1554e 100644 --- a/source/blender/modifiers/intern/MOD_wave.c +++ b/source/blender/modifiers/intern/MOD_wave.c @@ -174,7 +174,7 @@ static void waveModifier_do( } /* get the index of the deform group */ - modifier_get_vgroup_mesh(ob, mesh, wmd->defgrp_name, &dvert, &defgrp_index); + MOD_get_vgroup(ob, mesh, wmd->defgrp_name, &dvert, &defgrp_index); if (wmd->damp == 0) wmd->damp = 10.0f; @@ -192,9 +192,9 @@ static void waveModifier_do( if (wmd->texture) { tex_co = MEM_malloc_arrayN(numVerts, sizeof(*tex_co), "waveModifier_do tex_co"); - get_texture_coords_mesh((MappingInfoModifierData *)wmd, ob, mesh, vertexCos, tex_co); + MOD_get_texture_coords((MappingInfoModifierData *)wmd, ob, mesh, vertexCos, tex_co); - modifier_init_texture(depsgraph, wmd->texture); + MOD_init_texture(depsgraph, wmd->texture); } if (lifefac != 0.0f) { @@ -265,9 +265,10 @@ static void waveModifier_do( /*apply texture*/ if (wmd->texture) { + Scene *scene = DEG_get_evaluated_scene(depsgraph); TexResult texres; texres.nor = NULL; - BKE_texture_get_value(wmd->modifier.scene, wmd->texture, tex_co[i], &texres, false); + BKE_texture_get_value(scene, wmd->texture, tex_co[i], &texres, false); amplit *= texres.tin; } @@ -307,9 +308,9 @@ static void deformVerts( WaveModifierData *wmd = (WaveModifierData *)md; if (wmd->flag & MOD_WAVE_NORM) - mesh_src = get_mesh(ctx->object, NULL, mesh, vertexCos, true, false); + mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, vertexCos, true, false); else if (wmd->texture || wmd->defgrp_name[0]) - mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false); + mesh_src = MOD_get_mesh_eval(ctx->object, NULL, mesh, NULL, false, false); waveModifier_do(wmd, ctx->depsgraph, ctx->object, mesh_src, vertexCos, numVerts); @@ -326,9 +327,9 @@ static void deformVertsEM( WaveModifierData *wmd = (WaveModifierData *)md; if (wmd->flag & MOD_WAVE_NORM) - mesh_src = get_mesh(ctx->object, editData, mesh, vertexCos, true, false); + mesh_src = MOD_get_mesh_eval(ctx->object, editData, mesh, vertexCos, true, false); else if (wmd->texture || wmd->defgrp_name[0]) - mesh_src = get_mesh(ctx->object, editData, mesh, NULL, false, false); + mesh_src = MOD_get_mesh_eval(ctx->object, editData, mesh, NULL, false, false); waveModifier_do(wmd, ctx->depsgraph, ctx->object, mesh_src, vertexCos, numVerts); diff --git a/source/blender/modifiers/intern/MOD_weightvg_util.c b/source/blender/modifiers/intern/MOD_weightvg_util.c index a18e12e06ec..eed0c41e374 100644 --- a/source/blender/modifiers/intern/MOD_weightvg_util.c +++ b/source/blender/modifiers/intern/MOD_weightvg_util.c @@ -150,9 +150,9 @@ void weightvg_do_mask( t_map.texmapping = tex_mapping; tex_co = MEM_calloc_arrayN(numVerts, sizeof(*tex_co), "WeightVG Modifier, TEX mode, tex_co"); - get_texture_coords_mesh(&t_map, ob, mesh, NULL, tex_co); + MOD_get_texture_coords(&t_map, ob, mesh, NULL, tex_co); - modifier_init_texture(depsgraph, texture); + MOD_init_texture(depsgraph, texture); /* For each weight (vertex), make the mix between org and new weights. */ for (i = 0; i < num; ++i) { diff --git a/source/blender/modifiers/intern/MOD_weightvg_util.h b/source/blender/modifiers/intern/MOD_weightvg_util.h index f69659e46a3..93594fd8b29 100644 --- a/source/blender/modifiers/intern/MOD_weightvg_util.h +++ b/source/blender/modifiers/intern/MOD_weightvg_util.h @@ -44,7 +44,7 @@ struct RNG; /* * XXX I'd like to make modified weights visible in WeightPaint mode, * but couldn't figure a way to do this... - * Maybe this will need changes in mesh_calc_modifiers (DerivedMesh.c)? + * Maybe this will need changes in mesh_calc_modifiers? * Or the WeightPaint mode code itself? */ diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.c index 00bc8a05cee..a26cb73d823 100644 --- a/source/blender/modifiers/intern/MOD_weightvgedit.c +++ b/source/blender/modifiers/intern/MOD_weightvgedit.c @@ -47,6 +47,7 @@ #include "BKE_texture.h" /* Texture masking. */ #include "DEG_depsgraph_build.h" +#include "DEG_depsgraph_query.h" #include "MEM_guardedalloc.h" @@ -147,7 +148,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { WeightVGEditModifierData *wmd = (WeightVGEditModifierData *) md; /* If no vertex group, bypass. */ @@ -247,8 +248,9 @@ static Mesh *applyModifier( } /* Do masking. */ + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); weightvg_do_mask(ctx, numVerts, NULL, org_w, new_w, ctx->object, result, wmd->mask_constant, - wmd->mask_defgrp_name, wmd->modifier.scene, wmd->mask_texture, + wmd->mask_defgrp_name, scene, wmd->mask_texture, wmd->mask_tex_use_channel, wmd->mask_tex_mapping, wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name); diff --git a/source/blender/modifiers/intern/MOD_weightvgmix.c b/source/blender/modifiers/intern/MOD_weightvgmix.c index 2b0f90008cf..90bd5acff62 100644 --- a/source/blender/modifiers/intern/MOD_weightvgmix.c +++ b/source/blender/modifiers/intern/MOD_weightvgmix.c @@ -45,13 +45,13 @@ #include "BKE_texture.h" /* Texture masking. */ #include "DEG_depsgraph_build.h" +#include "DEG_depsgraph_query.h" #include "MEM_guardedalloc.h" #include "MOD_weightvg_util.h" #include "MOD_modifiertypes.h" - /** * This mixes the old weight with the new weight factor. */ @@ -185,7 +185,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { WeightVGMixModifierData *wmd = (WeightVGMixModifierData *) md; /* If no vertex group, bypass. */ @@ -359,8 +359,9 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes } /* Do masking. */ + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); weightvg_do_mask(ctx, numIdx, indices, org_w, new_w, ctx->object, result, wmd->mask_constant, - wmd->mask_defgrp_name, wmd->modifier.scene, wmd->mask_texture, + wmd->mask_defgrp_name, scene, wmd->mask_texture, wmd->mask_tex_use_channel, wmd->mask_tex_mapping, wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name); diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.c index 1a69ae13120..88e33f28eaf 100644 --- a/source/blender/modifiers/intern/MOD_weightvgproximity.c +++ b/source/blender/modifiers/intern/MOD_weightvgproximity.c @@ -40,7 +40,7 @@ #include "DNA_modifier_types.h" #include "DNA_object_types.h" -#include "BKE_cdderivedmesh.h" +#include "BKE_bvhutils.h" #include "BKE_curve.h" #include "BKE_customdata.h" #include "BKE_deform.h" @@ -51,6 +51,7 @@ #include "BKE_texture.h" /* Texture masking. */ #include "DEG_depsgraph_build.h" +#include "DEG_depsgraph_query.h" #include "MEM_guardedalloc.h" @@ -357,7 +358,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } -static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams)) +static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, int UNUSED(useRenderParams)) { WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *) md; /* If no vertex group, bypass. */ @@ -542,8 +543,9 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes do_map(ob, new_w, numIdx, wmd->min_dist, wmd->max_dist, wmd->falloff_type); /* Do masking. */ + struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); weightvg_do_mask(ctx, numIdx, indices, org_w, new_w, ob, result, wmd->mask_constant, - wmd->mask_defgrp_name, wmd->modifier.scene, wmd->mask_texture, + wmd->mask_defgrp_name, scene, wmd->mask_texture, wmd->mask_tex_use_channel, wmd->mask_tex_mapping, wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name); diff --git a/source/blender/modifiers/intern/MOD_wireframe.c b/source/blender/modifiers/intern/MOD_wireframe.c index 9dfc23fbf5f..cc846d08040 100644 --- a/source/blender/modifiers/intern/MOD_wireframe.c +++ b/source/blender/modifiers/intern/MOD_wireframe.c @@ -28,7 +28,6 @@ #include "BLI_utildefines.h" -#include "BKE_cdderivedmesh.h" #include "BKE_deform.h" #include "BKE_mesh.h" |