Extract common modifier parameters into ModifierEvalContext struct
The contents of the ModifierEvalContext struct are constant while iterating over the modifier stack. The struct thus should be only created once, outside any loop over the modifiers.
This commit is contained in:
parent
6b9f1ffe6e
commit
334b55fd2e
Notes:
blender-bot
2023-02-14 05:56:02 +01:00
Referenced by issue #54883, Crash when opening file left in sculpt mode
|
@ -127,13 +127,21 @@ typedef enum ModifierApplyFlag {
|
|||
*/
|
||||
} ModifierApplyFlag;
|
||||
|
||||
|
||||
typedef struct ModifierUpdateDepsgraphContext {
|
||||
struct Scene *scene;
|
||||
struct Object *object;
|
||||
struct DepsNodeHandle *node;
|
||||
} ModifierUpdateDepsgraphContext;
|
||||
|
||||
/* Contains the information for deformXXX and applyXXX functions below that
|
||||
* doesn't change between consecutive modifiers. */
|
||||
typedef struct ModifierEvalContext {
|
||||
struct Depsgraph *depsgraph;
|
||||
struct Object *object;
|
||||
ModifierApplyFlag flag;
|
||||
} ModifierEvalContext;
|
||||
|
||||
|
||||
typedef struct ModifierTypeInfo {
|
||||
/* The user visible name for this modifier */
|
||||
char name[32];
|
||||
|
@ -165,26 +173,25 @@ typedef struct ModifierTypeInfo {
|
|||
* the object it can obtain it from the derivedData argument if non-NULL,
|
||||
* and otherwise the ob argument.
|
||||
*/
|
||||
void (*deformVerts_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts,
|
||||
ModifierApplyFlag flag);
|
||||
void (*deformVerts_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts);
|
||||
|
||||
/* Like deformMatricesEM but called from object mode (for supporting modifiers in sculpt mode) */
|
||||
void (*deformMatrices_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
void (*deformMatrices_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
|
||||
/* Like deformVerts but called during editmode (for supporting modifiers)
|
||||
*/
|
||||
void (*deformVertsEM_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData,
|
||||
struct DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts);
|
||||
void (*deformVertsEM_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData,
|
||||
struct DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts);
|
||||
|
||||
/* Set deform matrix per vertex for crazyspace correction */
|
||||
void (*deformMatricesEM_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData,
|
||||
void (*deformMatricesEM_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData,
|
||||
struct DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
|
||||
|
@ -197,21 +204,11 @@ typedef struct ModifierTypeInfo {
|
|||
* should read the object data from the derived object instead of the
|
||||
* actual object data.
|
||||
*
|
||||
* The useRenderParams argument indicates if the modifier is being
|
||||
* applied in the service of the renderer which may alter quality
|
||||
* settings.
|
||||
*
|
||||
* The isFinalCalc parameter indicates if the modifier is being
|
||||
* calculated for a final result or for something temporary
|
||||
* (like orcos). This is a hack at the moment, it is meant so subsurf
|
||||
* can know if it is safe to reuse its internal cache.
|
||||
*
|
||||
* The modifier may reuse the derivedData argument (i.e. return it in
|
||||
* modified form), but must not release it.
|
||||
*/
|
||||
struct DerivedMesh *(*applyModifier_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct DerivedMesh *derivedData,
|
||||
ModifierApplyFlag flag);
|
||||
struct DerivedMesh *(*applyModifier_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *derivedData);
|
||||
|
||||
/* Like applyModifier but called during editmode (for supporting
|
||||
* modifiers).
|
||||
|
@ -220,9 +217,9 @@ typedef struct ModifierTypeInfo {
|
|||
* are expected from editmode objects. The same qualifications regarding
|
||||
* derivedData apply as for applyModifier.
|
||||
*/
|
||||
struct DerivedMesh *(*applyModifierEM_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData,
|
||||
struct DerivedMesh *derivedData, ModifierApplyFlag flag);
|
||||
struct DerivedMesh *(*applyModifierEM_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData,
|
||||
struct DerivedMesh *derivedData);
|
||||
|
||||
|
||||
/********************* Deform modifier functions *********************/
|
||||
|
@ -232,28 +229,23 @@ typedef struct ModifierTypeInfo {
|
|||
* the object it can obtain it from the mesh argument if non-NULL,
|
||||
* and otherwise the ob argument.
|
||||
*/
|
||||
void (*deformVerts)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct Mesh *mesh,
|
||||
float (*vertexCos)[3], int numVerts,
|
||||
ModifierApplyFlag flag);
|
||||
void (*deformVerts)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct Mesh *mesh, float (*vertexCos)[3], int numVerts);
|
||||
|
||||
/* Like deformMatricesEM but called from object mode (for supporting modifiers in sculpt mode) */
|
||||
void (*deformMatrices)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct Mesh *mesh,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
void (*deformMatrices)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct Mesh *mesh, float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
|
||||
/* Like deformVerts but called during editmode (for supporting modifiers)
|
||||
*/
|
||||
void (*deformVertsEM)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData,
|
||||
struct Mesh *mesh,
|
||||
float (*vertexCos)[3], int numVerts);
|
||||
void (*deformVertsEM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData,
|
||||
struct Mesh *mesh, float (*vertexCos)[3], int numVerts);
|
||||
|
||||
/* Set deform matrix per vertex for crazyspace correction */
|
||||
void (*deformMatricesEM)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData,
|
||||
struct Mesh *mesh,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
void (*deformMatricesEM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData,
|
||||
struct Mesh *mesh, float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
|
||||
/********************* Non-deform modifier functions *********************/
|
||||
|
||||
|
@ -263,21 +255,11 @@ typedef struct ModifierTypeInfo {
|
|||
* should read the object data from the mesh object instead of the
|
||||
* actual object data.
|
||||
*
|
||||
* The useRenderParams argument indicates if the modifier is being
|
||||
* applied in the service of the renderer which may alter quality
|
||||
* settings.
|
||||
*
|
||||
* The isFinalCalc parameter indicates if the modifier is being
|
||||
* calculated for a final result or for something temporary
|
||||
* (like orcos). This is a hack at the moment, it is meant so subsurf
|
||||
* can know if it is safe to reuse its internal cache.
|
||||
*
|
||||
* The modifier may reuse the mesh argument (i.e. return it in
|
||||
* modified form), but must not release it.
|
||||
*/
|
||||
struct Mesh *(*applyModifier)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct Mesh *mesh,
|
||||
ModifierApplyFlag flag);
|
||||
struct Mesh *(*applyModifier)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct Mesh *mesh);
|
||||
|
||||
/* Like applyModifier but called during editmode (for supporting
|
||||
* modifiers).
|
||||
|
@ -286,9 +268,9 @@ typedef struct ModifierTypeInfo {
|
|||
* are expected from editmode objects. The same qualifications regarding
|
||||
* mesh apply as for applyModifier.
|
||||
*/
|
||||
struct Mesh *(*applyModifierEM)(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData,
|
||||
struct Mesh *mesh, ModifierApplyFlag flag);
|
||||
struct Mesh *(*applyModifierEM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData,
|
||||
struct Mesh *mesh);
|
||||
|
||||
|
||||
/********************* Optional functions *********************/
|
||||
|
@ -490,24 +472,20 @@ const char *modifier_path_relbase(struct Object *ob);
|
|||
/* wrappers for modifier callbacks that ensure valid normals */
|
||||
|
||||
struct DerivedMesh *modwrap_applyModifier(
|
||||
ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct DerivedMesh *dm,
|
||||
ModifierApplyFlag flag);
|
||||
ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *dm);
|
||||
|
||||
struct DerivedMesh *modwrap_applyModifierEM(
|
||||
ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *em,
|
||||
struct DerivedMesh *dm,
|
||||
ModifierApplyFlag flag);
|
||||
ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *em, struct DerivedMesh *dm);
|
||||
|
||||
void modwrap_deformVerts(
|
||||
ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], int numVerts,
|
||||
ModifierApplyFlag flag);
|
||||
ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], int numVerts);
|
||||
|
||||
void modwrap_deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *depsgraph, struct Object *ob,
|
||||
ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *em, struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], int numVerts);
|
||||
|
||||
|
@ -516,64 +494,59 @@ void modwrap_deformVertsEM(
|
|||
*/
|
||||
|
||||
void modifier_deformVerts(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct Mesh *mesh,
|
||||
float (*vertexCos)[3], int numVerts, ModifierApplyFlag flag);
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct Mesh *mesh, float (*vertexCos)[3], int numVerts);
|
||||
|
||||
void modifier_deformMatrices(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct Mesh *mesh,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct Mesh *mesh, float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
|
||||
void modifier_deformVertsEM(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData, struct Mesh *mesh,
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData, struct Mesh *mesh,
|
||||
float (*vertexCos)[3], int numVerts);
|
||||
|
||||
void modifier_deformMatricesEM(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData, struct Mesh *mesh,
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData, struct Mesh *mesh,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
|
||||
struct Mesh *modifier_applyModifier(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct Mesh *mesh, ModifierApplyFlag flag);
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct Mesh *mesh);
|
||||
|
||||
struct Mesh *modifier_applyModifierEM(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData,
|
||||
struct Mesh *mesh, ModifierApplyFlag flag);
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData, struct Mesh *mesh);
|
||||
|
||||
/* depricated variants of above that accept DerivedMesh */
|
||||
|
||||
void modifier_deformVerts_DM_deprecated(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], int numVerts, ModifierApplyFlag flag);
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *dm, float (*vertexCos)[3], int numVerts);
|
||||
|
||||
void modifier_deformMatrices_DM_deprecated(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct DerivedMesh *dm,
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
|
||||
void modifier_deformVertsEM_DM_deprecated(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData, struct DerivedMesh *dm,
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData, struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], int numVerts);
|
||||
|
||||
void modifier_deformMatricesEM_DM_deprecated(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData, struct DerivedMesh *dm,
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData, struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
|
||||
|
||||
struct DerivedMesh *modifier_applyModifier_DM_deprecated(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct DerivedMesh *dm, ModifierApplyFlag flag);
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *dm);
|
||||
|
||||
struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(
|
||||
struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData,
|
||||
struct DerivedMesh *dm, ModifierApplyFlag flag);
|
||||
struct ModifierData *md, const struct ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData, struct DerivedMesh *dm);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1145,6 +1145,7 @@ DerivedMesh *mesh_create_derived_for_modifier(
|
|||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
DerivedMesh *dm;
|
||||
KeyBlock *kb;
|
||||
ModifierEvalContext mectx = {depsgraph, ob, 0};
|
||||
|
||||
md->scene = scene;
|
||||
|
||||
|
@ -1167,7 +1168,7 @@ DerivedMesh *mesh_create_derived_for_modifier(
|
|||
Mesh *mesh_orig_id = (Mesh *)DEG_get_original_id(&me->id);
|
||||
float (*deformedVerts)[3] = BKE_mesh_vertexCos_get(mesh_orig_id, &numVerts);
|
||||
|
||||
modwrap_deformVerts(md, depsgraph, ob, NULL, deformedVerts, numVerts, 0);
|
||||
modwrap_deformVerts(md, &mectx, NULL, deformedVerts, numVerts);
|
||||
dm = mesh_create_derived(me, deformedVerts);
|
||||
|
||||
if (build_shapekey_layers)
|
||||
|
@ -1181,7 +1182,7 @@ DerivedMesh *mesh_create_derived_for_modifier(
|
|||
if (build_shapekey_layers)
|
||||
add_shapekey_layers(tdm, me, ob);
|
||||
|
||||
dm = modwrap_applyModifier(md, depsgraph, ob, tdm, 0);
|
||||
dm = modwrap_applyModifier(md, &mectx, tdm);
|
||||
ASSERT_IS_VALID_DM(dm);
|
||||
|
||||
if (tdm != dm) tdm->release(tdm);
|
||||
|
@ -1796,6 +1797,12 @@ static void mesh_calc_modifiers(
|
|||
if (useDeform)
|
||||
deform_app_flags |= MOD_APPLY_USECACHE;
|
||||
|
||||
/* TODO(sybren): do we really need three context objects? Or do we modify
|
||||
* them on the fly to change the flags where needed? */
|
||||
const ModifierEvalContext mectx_deform = {depsgraph, ob, deform_app_flags};
|
||||
const ModifierEvalContext mectx_apply = {depsgraph, ob, app_flags};
|
||||
const ModifierEvalContext mectx_orco = {depsgraph, ob, (app_flags & ~MOD_APPLY_USECACHE) | MOD_APPLY_ORCO};
|
||||
|
||||
md = firstmd = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||
|
||||
modifiers_clearErrors(ob);
|
||||
|
@ -1845,7 +1852,7 @@ static void mesh_calc_modifiers(
|
|||
if (!deformedVerts)
|
||||
deformedVerts = BKE_mesh_vertexCos_get(mesh_orig_id, &numVerts);
|
||||
|
||||
modwrap_deformVerts(md, depsgraph, ob, NULL, deformedVerts, numVerts, deform_app_flags);
|
||||
modwrap_deformVerts(md, &mectx_deform, NULL, deformedVerts, numVerts);
|
||||
}
|
||||
else {
|
||||
break;
|
||||
|
@ -1986,7 +1993,7 @@ static void mesh_calc_modifiers(
|
|||
}
|
||||
}
|
||||
|
||||
modwrap_deformVerts(md, depsgraph, ob, dm, deformedVerts, numVerts, deform_app_flags);
|
||||
modwrap_deformVerts(md, &mectx_deform, dm, deformedVerts, numVerts);
|
||||
}
|
||||
else {
|
||||
DerivedMesh *ndm;
|
||||
|
@ -2061,7 +2068,7 @@ static void mesh_calc_modifiers(
|
|||
}
|
||||
}
|
||||
|
||||
ndm = modwrap_applyModifier(md, depsgraph, ob, dm, app_flags);
|
||||
ndm = modwrap_applyModifier(md, &mectx_apply, dm);
|
||||
ASSERT_IS_VALID_DM(ndm);
|
||||
|
||||
if (ndm) {
|
||||
|
@ -2088,7 +2095,7 @@ static void mesh_calc_modifiers(
|
|||
(mti->requiredDataMask ?
|
||||
mti->requiredDataMask(ob, md) : 0));
|
||||
|
||||
ndm = modwrap_applyModifier(md, depsgraph, ob, orcodm, (app_flags & ~MOD_APPLY_USECACHE) | MOD_APPLY_ORCO);
|
||||
ndm = modwrap_applyModifier(md, &mectx_orco, orcodm);
|
||||
ASSERT_IS_VALID_DM(ndm);
|
||||
|
||||
if (ndm) {
|
||||
|
@ -2106,7 +2113,7 @@ static void mesh_calc_modifiers(
|
|||
nextmask &= ~CD_MASK_CLOTH_ORCO;
|
||||
DM_set_only_copy(clothorcodm, nextmask | CD_MASK_ORIGINDEX);
|
||||
|
||||
ndm = modwrap_applyModifier(md, depsgraph, ob, clothorcodm, (app_flags & ~MOD_APPLY_USECACHE) | MOD_APPLY_ORCO);
|
||||
ndm = modwrap_applyModifier(md, &mectx_orco, clothorcodm);
|
||||
ASSERT_IS_VALID_DM(ndm);
|
||||
|
||||
if (ndm) {
|
||||
|
@ -2300,6 +2307,11 @@ static void editbmesh_calc_modifiers(
|
|||
const bool do_mod_wmcol = do_init_wmcol;
|
||||
VirtualModifierData virtualModifierData;
|
||||
|
||||
/* TODO(sybren): do we really need multiple objects, or shall we change the flags where needed? */
|
||||
const ModifierEvalContext mectx = {depsgraph, ob, 0};
|
||||
const ModifierEvalContext mectx_orco = {depsgraph, ob, MOD_APPLY_ORCO};
|
||||
const ModifierEvalContext mectx_cache_gpu = {depsgraph, ob, MOD_APPLY_USECACHE | MOD_APPLY_ALLOW_GPU};
|
||||
|
||||
const bool do_loop_normals = (((Mesh *)(ob->data))->flag & ME_AUTOSMOOTH) != 0;
|
||||
const float loop_normals_split_angle = ((Mesh *)(ob->data))->smoothresh;
|
||||
|
||||
|
@ -2363,9 +2375,9 @@ static void editbmesh_calc_modifiers(
|
|||
}
|
||||
|
||||
if (mti->deformVertsEM || mti->deformVertsEM_DM)
|
||||
modwrap_deformVertsEM(md, depsgraph, ob, em, dm, deformedVerts, numVerts);
|
||||
modwrap_deformVertsEM(md, &mectx, em, dm, deformedVerts, numVerts);
|
||||
else
|
||||
modwrap_deformVerts(md, depsgraph, ob, dm, deformedVerts, numVerts, 0);
|
||||
modwrap_deformVerts(md, &mectx, dm, deformedVerts, numVerts);
|
||||
}
|
||||
else {
|
||||
DerivedMesh *ndm;
|
||||
|
@ -2410,10 +2422,10 @@ static void editbmesh_calc_modifiers(
|
|||
DM_set_only_copy(orcodm, mask | CD_MASK_ORIGINDEX);
|
||||
|
||||
if (mti->applyModifierEM || mti->applyModifierEM_DM) {
|
||||
ndm = modwrap_applyModifierEM(md, depsgraph, ob, em, orcodm, MOD_APPLY_ORCO);
|
||||
ndm = modwrap_applyModifierEM(md, &mectx_orco, em, orcodm);
|
||||
}
|
||||
else {
|
||||
ndm = modwrap_applyModifier(md, depsgraph, ob, orcodm, MOD_APPLY_ORCO);
|
||||
ndm = modwrap_applyModifier(md, &mectx_orco, orcodm);
|
||||
}
|
||||
ASSERT_IS_VALID_DM(ndm);
|
||||
|
||||
|
@ -2438,9 +2450,9 @@ static void editbmesh_calc_modifiers(
|
|||
}
|
||||
|
||||
if (mti->applyModifierEM || mti->applyModifierEM_DM)
|
||||
ndm = modwrap_applyModifierEM(md, depsgraph, ob, em, dm, MOD_APPLY_USECACHE | MOD_APPLY_ALLOW_GPU);
|
||||
ndm = modwrap_applyModifierEM(md, &mectx_cache_gpu, em, dm);
|
||||
else
|
||||
ndm = modwrap_applyModifier(md, depsgraph, ob, dm, MOD_APPLY_USECACHE | MOD_APPLY_ALLOW_GPU);
|
||||
ndm = modwrap_applyModifier(md, &mectx_cache_gpu, dm);
|
||||
ASSERT_IS_VALID_DM(ndm);
|
||||
|
||||
if (ndm) {
|
||||
|
|
|
@ -261,6 +261,7 @@ int BKE_crazyspace_get_first_deform_matrices_editbmesh(
|
|||
int cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1);
|
||||
float (*defmats)[3][3] = NULL, (*deformedVerts)[3] = NULL;
|
||||
VirtualModifierData virtualModifierData;
|
||||
ModifierEvalContext mectx = {depsgraph, ob, 0};
|
||||
|
||||
modifiers_clearErrors(ob);
|
||||
|
||||
|
@ -292,7 +293,7 @@ int BKE_crazyspace_get_first_deform_matrices_editbmesh(
|
|||
unit_m3(defmats[a]);
|
||||
}
|
||||
|
||||
modifier_deformMatricesEM_DM_deprecated(md, depsgraph, ob, em, dm, deformedVerts, defmats, numVerts);
|
||||
modifier_deformMatricesEM_DM_deprecated(md, &mectx, em, dm, deformedVerts, defmats, numVerts);
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
@ -323,6 +324,7 @@ int BKE_sculpt_get_first_deform_matrices(
|
|||
const bool has_multires = mmd != NULL && mmd->sculptlvl > 0;
|
||||
int numleft = 0;
|
||||
VirtualModifierData virtualModifierData;
|
||||
ModifierEvalContext mectx = {depsgraph, ob, 0};
|
||||
|
||||
if (has_multires) {
|
||||
*deformmats = NULL;
|
||||
|
@ -350,7 +352,7 @@ int BKE_sculpt_get_first_deform_matrices(
|
|||
}
|
||||
|
||||
if (mti->deformMatrices || mti->deformMatrices_DM) {
|
||||
modifier_deformMatrices_DM_deprecated(md, depsgraph, ob, dm, deformedVerts, defmats, numVerts);
|
||||
modifier_deformMatrices_DM_deprecated(md, &mectx, dm, deformedVerts, defmats, numVerts);
|
||||
}
|
||||
else break;
|
||||
}
|
||||
|
@ -388,6 +390,7 @@ void BKE_crazyspace_build_sculpt(struct Depsgraph *depsgraph, Scene *scene, Obje
|
|||
int i, deformed = 0;
|
||||
VirtualModifierData virtualModifierData;
|
||||
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||
ModifierEvalContext mectx = {depsgraph, ob, 0};
|
||||
Mesh *me = (Mesh *)ob->data;
|
||||
|
||||
for (; md; md = md->next) {
|
||||
|
@ -401,7 +404,7 @@ void BKE_crazyspace_build_sculpt(struct Depsgraph *depsgraph, Scene *scene, Obje
|
|||
if ((mti->deformMatrices || mti->deformMatrices_DM) && !deformed)
|
||||
continue;
|
||||
|
||||
modifier_deformVerts_DM_deprecated(md, depsgraph, ob, NULL, deformedVerts, me->totvert, 0);
|
||||
modifier_deformVerts_DM_deprecated(md, &mectx, NULL, deformedVerts, me->totvert);
|
||||
deformed = 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -827,6 +827,8 @@ static void curve_calc_modifiers_pre(
|
|||
else
|
||||
required_mode = eModifierMode_Realtime;
|
||||
|
||||
const ModifierEvalContext mectx = {depsgraph, ob, app_flag};
|
||||
|
||||
pretessellatePoint = curve_get_tessellate_point(scene, ob, use_render_resolution, editmode);
|
||||
|
||||
if (editmode)
|
||||
|
@ -860,7 +862,7 @@ static void curve_calc_modifiers_pre(
|
|||
deformedVerts = BKE_curve_nurbs_vertexCos_get(nurb, &numVerts);
|
||||
}
|
||||
|
||||
modifier_deformVerts_DM_deprecated(md, depsgraph, ob, NULL, deformedVerts, numVerts, app_flag);
|
||||
modifier_deformVerts_DM_deprecated(md, &mectx, NULL, deformedVerts, numVerts);
|
||||
|
||||
if (md == pretessellatePoint)
|
||||
break;
|
||||
|
@ -935,6 +937,11 @@ static void curve_calc_modifiers_post(
|
|||
else
|
||||
required_mode = eModifierMode_Realtime;
|
||||
|
||||
const ModifierEvalContext mectx_deform = {depsgraph, ob,
|
||||
editmode ? app_flag | MOD_APPLY_USECACHE : app_flag};
|
||||
const ModifierEvalContext mectx_apply = {depsgraph, ob,
|
||||
useCache ? app_flag | MOD_APPLY_USECACHE : app_flag};
|
||||
|
||||
pretessellatePoint = curve_get_tessellate_point(scene, ob, use_render_resolution, editmode);
|
||||
|
||||
if (editmode)
|
||||
|
@ -950,8 +957,6 @@ static void curve_calc_modifiers_post(
|
|||
|
||||
for (; md; md = md->next) {
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
ModifierApplyFlag appf = app_flag;
|
||||
|
||||
md->scene = scene;
|
||||
|
||||
if (!modifier_isEnabled(scene, md, required_mode))
|
||||
|
@ -960,8 +965,6 @@ static void curve_calc_modifiers_post(
|
|||
if (mti->type == eModifierTypeType_OnlyDeform ||
|
||||
(mti->type == eModifierTypeType_DeformOrConstruct && !dm))
|
||||
{
|
||||
if (editmode)
|
||||
appf |= MOD_APPLY_USECACHE;
|
||||
if (dm) {
|
||||
if (!vertCos) {
|
||||
totvert = dm->getNumVerts(dm);
|
||||
|
@ -969,14 +972,14 @@ static void curve_calc_modifiers_post(
|
|||
dm->getVertCos(dm, vertCos);
|
||||
}
|
||||
|
||||
modifier_deformVerts_DM_deprecated(md, depsgraph, ob, dm, vertCos, totvert, appf);
|
||||
modifier_deformVerts_DM_deprecated(md, &mectx_deform, dm, vertCos, totvert);
|
||||
}
|
||||
else {
|
||||
if (!vertCos) {
|
||||
vertCos = displist_get_allverts(dispbase, &totvert);
|
||||
}
|
||||
|
||||
modifier_deformVerts_DM_deprecated(md, depsgraph, ob, NULL, vertCos, totvert, appf);
|
||||
modifier_deformVerts_DM_deprecated(md, &mectx_deform, NULL, vertCos, totvert);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -1015,10 +1018,7 @@ static void curve_calc_modifiers_post(
|
|||
vertCos = NULL;
|
||||
}
|
||||
|
||||
if (useCache)
|
||||
appf |= MOD_APPLY_USECACHE;
|
||||
|
||||
ndm = modwrap_applyModifier(md, depsgraph, ob, dm, appf);
|
||||
ndm = modwrap_applyModifier(md, &mectx_apply, dm);
|
||||
|
||||
if (ndm) {
|
||||
/* Modifier returned a new derived mesh */
|
||||
|
@ -1162,6 +1162,8 @@ static void curve_calc_orcodm(
|
|||
else
|
||||
required_mode = eModifierMode_Realtime;
|
||||
|
||||
const ModifierEvalContext mectx = {depsgraph, ob, app_flag};
|
||||
|
||||
pretessellatePoint = curve_get_tessellate_point(scene, ob, use_render_resolution, editmode);
|
||||
|
||||
if (editmode)
|
||||
|
@ -1190,7 +1192,7 @@ static void curve_calc_orcodm(
|
|||
if (mti->type != eModifierTypeType_Constructive)
|
||||
continue;
|
||||
|
||||
ndm = modwrap_applyModifier(md, depsgraph, ob, orcodm, app_flag);
|
||||
ndm = modwrap_applyModifier(md, &mectx, orcodm);
|
||||
|
||||
if (ndm) {
|
||||
/* if the modifier returned a new dm, release the old one */
|
||||
|
|
|
@ -1033,6 +1033,7 @@ void BKE_lattice_modifiers_calc(struct Depsgraph *depsgraph, Scene *scene, Objec
|
|||
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||
float (*vertexCos)[3] = NULL;
|
||||
int numVerts, editmode = (lt->editlatt != NULL);
|
||||
const ModifierEvalContext mectx = {depsgraph, ob, 0};
|
||||
|
||||
if (ob->curve_cache) {
|
||||
BKE_displist_free(&ob->curve_cache->disp);
|
||||
|
@ -1053,7 +1054,7 @@ void BKE_lattice_modifiers_calc(struct Depsgraph *depsgraph, Scene *scene, Objec
|
|||
if (mti->type != eModifierTypeType_OnlyDeform) continue;
|
||||
|
||||
if (!vertexCos) vertexCos = BKE_lattice_vertexcos_get(ob, &numVerts);
|
||||
modifier_deformVerts_DM_deprecated(md, depsgraph, ob, NULL, vertexCos, numVerts, 0);
|
||||
modifier_deformVerts_DM_deprecated(md, &mectx, NULL, vertexCos, numVerts);
|
||||
}
|
||||
|
||||
/* always displist to make this work like derivedmesh */
|
||||
|
|
|
@ -789,9 +789,8 @@ void modifier_path_init(char *path, int path_maxlen, const char *name)
|
|||
/* wrapper around ModifierTypeInfo.applyModifier that ensures valid normals */
|
||||
|
||||
struct DerivedMesh *modwrap_applyModifier(
|
||||
ModifierData *md, struct Depsgraph *depsgraph,
|
||||
Object *ob, struct DerivedMesh *dm,
|
||||
ModifierApplyFlag flag)
|
||||
ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *dm)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
BLI_assert(CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
|
||||
|
@ -799,14 +798,12 @@ struct DerivedMesh *modwrap_applyModifier(
|
|||
if (mti->dependsOnNormals && mti->dependsOnNormals(md)) {
|
||||
DM_ensure_normals(dm);
|
||||
}
|
||||
return modifier_applyModifier_DM_deprecated(md, depsgraph, ob, dm, flag);
|
||||
return modifier_applyModifier_DM_deprecated(md, ctx, dm);
|
||||
}
|
||||
|
||||
struct DerivedMesh *modwrap_applyModifierEM(
|
||||
ModifierData *md, struct Depsgraph *depsgraph,
|
||||
Object *ob, struct BMEditMesh *em,
|
||||
DerivedMesh *dm,
|
||||
ModifierApplyFlag flag)
|
||||
ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *em, DerivedMesh *dm)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
BLI_assert(CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
|
||||
|
@ -814,14 +811,12 @@ struct DerivedMesh *modwrap_applyModifierEM(
|
|||
if (mti->dependsOnNormals && mti->dependsOnNormals(md)) {
|
||||
DM_ensure_normals(dm);
|
||||
}
|
||||
return modifier_applyModifierEM_DM_deprecated(md, depsgraph, ob, em, dm, flag);
|
||||
return modifier_applyModifierEM_DM_deprecated(md, ctx, em, dm);
|
||||
}
|
||||
|
||||
void modwrap_deformVerts(
|
||||
ModifierData *md, struct Depsgraph *depsgraph,
|
||||
Object *ob, DerivedMesh *dm,
|
||||
float (*vertexCos)[3], int numVerts,
|
||||
ModifierApplyFlag flag)
|
||||
ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
BLI_assert(!dm || CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
|
||||
|
@ -829,11 +824,11 @@ void modwrap_deformVerts(
|
|||
if (dm && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
|
||||
DM_ensure_normals(dm);
|
||||
}
|
||||
modifier_deformVerts_DM_deprecated(md, depsgraph, ob, dm, vertexCos, numVerts, flag);
|
||||
modifier_deformVerts_DM_deprecated(md, ctx, dm, vertexCos, numVerts);
|
||||
}
|
||||
|
||||
void modwrap_deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *depsgraph, Object *ob,
|
||||
ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *em, DerivedMesh *dm,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
|
@ -843,7 +838,7 @@ void modwrap_deformVertsEM(
|
|||
if (dm && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
|
||||
DM_ensure_normals(dm);
|
||||
}
|
||||
modifier_deformVertsEM_DM_deprecated(md, depsgraph, ob, em, dm, vertexCos, numVerts);
|
||||
modifier_deformVertsEM_DM_deprecated(md, ctx, em, dm, vertexCos, numVerts);
|
||||
}
|
||||
/* end modifier callback wrappers */
|
||||
|
||||
|
@ -852,15 +847,14 @@ void modwrap_deformVertsEM(
|
|||
* depending on if the modifier has been ported to Mesh or is still using DerivedMesh
|
||||
*/
|
||||
|
||||
void modifier_deformVerts(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct Mesh *mesh,
|
||||
float (*vertexCos)[3], int numVerts,
|
||||
ModifierApplyFlag flag)
|
||||
void modifier_deformVerts(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct Mesh *mesh,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->deformVerts) {
|
||||
mti->deformVerts(md, depsgraph, ob, mesh, vertexCos, numVerts, flag);
|
||||
mti->deformVerts(md, ctx, mesh, vertexCos, numVerts);
|
||||
}
|
||||
else {
|
||||
DerivedMesh *dm = NULL;
|
||||
|
@ -868,7 +862,7 @@ void modifier_deformVerts(struct ModifierData *md, struct Depsgraph *depsgraph,
|
|||
dm = CDDM_from_mesh(mesh);
|
||||
}
|
||||
|
||||
mti->deformVerts_DM(md, depsgraph, ob, dm, vertexCos, numVerts, flag);
|
||||
mti->deformVerts_DM(md, ctx, dm, vertexCos, numVerts);
|
||||
|
||||
if (dm) {
|
||||
dm->release(dm);
|
||||
|
@ -876,14 +870,14 @@ void modifier_deformVerts(struct ModifierData *md, struct Depsgraph *depsgraph,
|
|||
}
|
||||
}
|
||||
|
||||
void modifier_deformMatrices(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct Mesh *mesh,
|
||||
void modifier_deformMatrices(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct Mesh *mesh,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->deformMatrices) {
|
||||
mti->deformMatrices(md, depsgraph, ob, mesh, vertexCos, defMats, numVerts);
|
||||
mti->deformMatrices(md, ctx, mesh, vertexCos, defMats, numVerts);
|
||||
}
|
||||
else {
|
||||
DerivedMesh *dm = NULL;
|
||||
|
@ -891,7 +885,7 @@ void modifier_deformMatrices(struct ModifierData *md, struct Depsgraph *depsgrap
|
|||
dm = CDDM_from_mesh(mesh);
|
||||
}
|
||||
|
||||
mti->deformMatrices_DM(md, depsgraph, ob, dm, vertexCos, defMats, numVerts);
|
||||
mti->deformMatrices_DM(md, ctx, dm, vertexCos, defMats, numVerts);
|
||||
|
||||
if (dm) {
|
||||
dm->release(dm);
|
||||
|
@ -899,14 +893,14 @@ void modifier_deformMatrices(struct ModifierData *md, struct Depsgraph *depsgrap
|
|||
}
|
||||
}
|
||||
|
||||
void modifier_deformVertsEM(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData, struct Mesh *mesh,
|
||||
void modifier_deformVertsEM(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData, struct Mesh *mesh,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->deformVertsEM) {
|
||||
mti->deformVertsEM(md, depsgraph, ob, editData, mesh, vertexCos, numVerts);
|
||||
mti->deformVertsEM(md, ctx, editData, mesh, vertexCos, numVerts);
|
||||
}
|
||||
else {
|
||||
DerivedMesh *dm = NULL;
|
||||
|
@ -914,7 +908,7 @@ void modifier_deformVertsEM(struct ModifierData *md, struct Depsgraph *depsgraph
|
|||
dm = CDDM_from_mesh(mesh);
|
||||
}
|
||||
|
||||
mti->deformVertsEM_DM(md, depsgraph, ob, editData, dm, vertexCos, numVerts);
|
||||
mti->deformVertsEM_DM(md, ctx, editData, dm, vertexCos, numVerts);
|
||||
|
||||
if (dm) {
|
||||
dm->release(dm);
|
||||
|
@ -922,14 +916,14 @@ void modifier_deformVertsEM(struct ModifierData *md, struct Depsgraph *depsgraph
|
|||
}
|
||||
}
|
||||
|
||||
void modifier_deformMatricesEM(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData, struct Mesh *mesh,
|
||||
void modifier_deformMatricesEM(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData, struct Mesh *mesh,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->deformMatricesEM) {
|
||||
mti->deformMatricesEM(md, depsgraph, ob, editData, mesh, vertexCos, defMats, numVerts);
|
||||
mti->deformMatricesEM(md, ctx, editData, mesh, vertexCos, defMats, numVerts);
|
||||
}
|
||||
else {
|
||||
DerivedMesh *dm = NULL;
|
||||
|
@ -937,7 +931,7 @@ void modifier_deformMatricesEM(struct ModifierData *md, struct Depsgraph *depsgr
|
|||
dm = CDDM_from_mesh(mesh);
|
||||
}
|
||||
|
||||
mti->deformMatricesEM_DM(md, depsgraph, ob, editData, dm, vertexCos, defMats, numVerts);
|
||||
mti->deformMatricesEM_DM(md, ctx, editData, dm, vertexCos, defMats, numVerts);
|
||||
|
||||
if (dm) {
|
||||
dm->release(dm);
|
||||
|
@ -945,48 +939,48 @@ void modifier_deformMatricesEM(struct ModifierData *md, struct Depsgraph *depsgr
|
|||
}
|
||||
}
|
||||
|
||||
struct Mesh *modifier_applyModifier(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct Mesh *mesh, ModifierApplyFlag flag)
|
||||
struct Mesh *modifier_applyModifier(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct Mesh *mesh)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->applyModifier) {
|
||||
return mti->applyModifier(md, depsgraph, ob, mesh, flag);
|
||||
return mti->applyModifier(md, ctx, mesh);
|
||||
}
|
||||
else {
|
||||
DerivedMesh *dm = CDDM_from_mesh(mesh);
|
||||
|
||||
DerivedMesh *ndm = mti->applyModifier_DM(md, depsgraph, ob, dm, flag);
|
||||
DerivedMesh *ndm = mti->applyModifier_DM(md, ctx, dm);
|
||||
|
||||
if(ndm != dm) {
|
||||
dm->release(dm);
|
||||
}
|
||||
|
||||
DM_to_mesh(ndm, mesh, ob, CD_MASK_EVERYTHING, true);
|
||||
DM_to_mesh(ndm, mesh, ctx->object, CD_MASK_EVERYTHING, true);
|
||||
|
||||
return mesh;
|
||||
}
|
||||
}
|
||||
|
||||
struct Mesh *modifier_applyModifierEM(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData,
|
||||
struct Mesh *mesh, ModifierApplyFlag flag)
|
||||
struct Mesh *modifier_applyModifierEM(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData,
|
||||
struct Mesh *mesh)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->applyModifierEM) {
|
||||
return mti->applyModifierEM(md, depsgraph, ob, editData, mesh, flag);
|
||||
return mti->applyModifierEM(md, ctx, editData, mesh);
|
||||
}
|
||||
else {
|
||||
DerivedMesh *dm = CDDM_from_mesh(mesh);
|
||||
|
||||
DerivedMesh *ndm = mti->applyModifierEM_DM(md, depsgraph, ob, editData, dm, flag);
|
||||
DerivedMesh *ndm = mti->applyModifierEM_DM(md, ctx, editData, dm);
|
||||
|
||||
if(ndm != dm) {
|
||||
dm->release(dm);
|
||||
}
|
||||
|
||||
DM_to_mesh(ndm, mesh, ob, CD_MASK_EVERYTHING, true);
|
||||
DM_to_mesh(ndm, mesh, ctx->object, CD_MASK_EVERYTHING, true);
|
||||
|
||||
return mesh;
|
||||
}
|
||||
|
@ -994,15 +988,14 @@ struct Mesh *modifier_applyModifierEM(struct ModifierData *md, struct Depsgraph
|
|||
|
||||
/* depricated variants of above that accept DerivedMesh */
|
||||
|
||||
void modifier_deformVerts_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], int numVerts,
|
||||
ModifierApplyFlag flag)
|
||||
void modifier_deformVerts_DM_deprecated(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->deformVerts_DM) {
|
||||
mti->deformVerts_DM(md, depsgraph, ob, dm, vertexCos, numVerts, flag);
|
||||
mti->deformVerts_DM(md, ctx, dm, vertexCos, numVerts);
|
||||
}
|
||||
else {
|
||||
/* TODO(sybren): deduplicate all the copies of this code in this file. */
|
||||
|
@ -1010,10 +1003,10 @@ void modifier_deformVerts_DM_deprecated(struct ModifierData *md, struct Depsgrap
|
|||
if (dm != NULL) {
|
||||
mesh = BKE_libblock_alloc_notest(ID_ME);
|
||||
BKE_mesh_init(mesh);
|
||||
DM_to_mesh(dm, mesh, ob, CD_MASK_EVERYTHING, false);
|
||||
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
|
||||
}
|
||||
|
||||
mti->deformVerts(md, depsgraph, ob, mesh, vertexCos, numVerts, flag);
|
||||
mti->deformVerts(md, ctx, mesh, vertexCos, numVerts);
|
||||
|
||||
if (mesh != NULL) {
|
||||
BKE_mesh_free(mesh);
|
||||
|
@ -1022,15 +1015,15 @@ void modifier_deformVerts_DM_deprecated(struct ModifierData *md, struct Depsgrap
|
|||
}
|
||||
}
|
||||
|
||||
void modifier_deformMatrices_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct DerivedMesh *dm,
|
||||
void modifier_deformMatrices_DM_deprecated(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts)
|
||||
{
|
||||
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->deformMatrices_DM) {
|
||||
mti->deformMatrices_DM(md, depsgraph, ob, dm, vertexCos, defMats, numVerts);
|
||||
mti->deformMatrices_DM(md, ctx, dm, vertexCos, defMats, numVerts);
|
||||
}
|
||||
else {
|
||||
/* TODO(sybren): deduplicate all the copies of this code in this file. */
|
||||
|
@ -1038,10 +1031,10 @@ void modifier_deformMatrices_DM_deprecated(struct ModifierData *md, struct Depsg
|
|||
if (dm != NULL) {
|
||||
mesh = BKE_libblock_alloc_notest(ID_ME);
|
||||
BKE_mesh_init(mesh);
|
||||
DM_to_mesh(dm, mesh, ob, CD_MASK_EVERYTHING, false);
|
||||
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
|
||||
}
|
||||
|
||||
mti->deformMatrices(md, depsgraph, ob, mesh, vertexCos, defMats, numVerts);
|
||||
mti->deformMatrices(md, ctx, mesh, vertexCos, defMats, numVerts);
|
||||
|
||||
if (mesh != NULL) {
|
||||
BKE_mesh_free(mesh);
|
||||
|
@ -1050,14 +1043,14 @@ void modifier_deformMatrices_DM_deprecated(struct ModifierData *md, struct Depsg
|
|||
}
|
||||
}
|
||||
|
||||
void modifier_deformVertsEM_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData, struct DerivedMesh *dm,
|
||||
void modifier_deformVertsEM_DM_deprecated(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData, struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->deformVertsEM_DM) {
|
||||
mti->deformVertsEM_DM(md, depsgraph, ob, editData, dm, vertexCos, numVerts);
|
||||
mti->deformVertsEM_DM(md, ctx, editData, dm, vertexCos, numVerts);
|
||||
}
|
||||
else {
|
||||
/* TODO(sybren): deduplicate all the copies of this code in this file. */
|
||||
|
@ -1065,10 +1058,10 @@ void modifier_deformVertsEM_DM_deprecated(struct ModifierData *md, struct Depsgr
|
|||
if (dm != NULL) {
|
||||
mesh = BKE_libblock_alloc_notest(ID_ME);
|
||||
BKE_mesh_init(mesh);
|
||||
DM_to_mesh(dm, mesh, ob, CD_MASK_EVERYTHING, false);
|
||||
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
|
||||
}
|
||||
|
||||
mti->deformVertsEM(md, depsgraph, ob, editData, mesh, vertexCos, numVerts);
|
||||
mti->deformVertsEM(md, ctx, editData, mesh, vertexCos, numVerts);
|
||||
|
||||
if (mesh != NULL) {
|
||||
BKE_mesh_free(mesh);
|
||||
|
@ -1077,14 +1070,14 @@ void modifier_deformVertsEM_DM_deprecated(struct ModifierData *md, struct Depsgr
|
|||
}
|
||||
}
|
||||
|
||||
void modifier_deformMatricesEM_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData, struct DerivedMesh *dm,
|
||||
void modifier_deformMatricesEM_DM_deprecated(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData, struct DerivedMesh *dm,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->deformMatricesEM_DM) {
|
||||
mti->deformMatricesEM_DM(md, depsgraph, ob, editData, dm, vertexCos, defMats, numVerts);
|
||||
mti->deformMatricesEM_DM(md, ctx, editData, dm, vertexCos, defMats, numVerts);
|
||||
}
|
||||
else {
|
||||
/* TODO(sybren): deduplicate all the copies of this code in this file. */
|
||||
|
@ -1092,10 +1085,10 @@ void modifier_deformMatricesEM_DM_deprecated(struct ModifierData *md, struct Dep
|
|||
if (dm != NULL) {
|
||||
mesh = BKE_libblock_alloc_notest(ID_ME);
|
||||
BKE_mesh_init(mesh);
|
||||
DM_to_mesh(dm, mesh, ob, CD_MASK_EVERYTHING, false);
|
||||
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
|
||||
}
|
||||
|
||||
mti->deformMatricesEM(md, depsgraph, ob, editData, mesh, vertexCos, defMats, numVerts);
|
||||
mti->deformMatricesEM(md, ctx, editData, mesh, vertexCos, defMats, numVerts);
|
||||
|
||||
if (mesh != NULL) {
|
||||
BKE_mesh_free(mesh);
|
||||
|
@ -1104,13 +1097,13 @@ void modifier_deformMatricesEM_DM_deprecated(struct ModifierData *md, struct Dep
|
|||
}
|
||||
}
|
||||
|
||||
struct DerivedMesh *modifier_applyModifier_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct DerivedMesh *dm, ModifierApplyFlag flag)
|
||||
struct DerivedMesh *modifier_applyModifier_DM_deprecated(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct DerivedMesh *dm)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->applyModifier_DM) {
|
||||
return mti->applyModifier_DM(md, depsgraph, ob, dm, flag);
|
||||
return mti->applyModifier_DM(md, ctx, dm);
|
||||
}
|
||||
else {
|
||||
/* TODO(sybren): deduplicate all the copies of this code in this file. */
|
||||
|
@ -1118,10 +1111,10 @@ struct DerivedMesh *modifier_applyModifier_DM_deprecated(struct ModifierData *md
|
|||
if (dm != NULL) {
|
||||
mesh = BKE_libblock_alloc_notest(ID_ME);
|
||||
BKE_mesh_init(mesh);
|
||||
DM_to_mesh(dm, mesh, ob, CD_MASK_EVERYTHING, false);
|
||||
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
|
||||
}
|
||||
|
||||
struct Mesh *new_mesh = mti->applyModifier(md, depsgraph, ob, mesh, flag);
|
||||
struct Mesh *new_mesh = mti->applyModifier(md, ctx, mesh);
|
||||
|
||||
/* Make a DM that doesn't reference new_mesh so we can free the latter. */
|
||||
DerivedMesh *ndm = CDDM_from_mesh_ex(new_mesh, CD_DUPLICATE);
|
||||
|
@ -1139,14 +1132,14 @@ struct DerivedMesh *modifier_applyModifier_DM_deprecated(struct ModifierData *md
|
|||
}
|
||||
}
|
||||
|
||||
struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
|
||||
struct Object *ob, struct BMEditMesh *editData,
|
||||
struct DerivedMesh *dm, ModifierApplyFlag flag)
|
||||
struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(struct ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData,
|
||||
struct DerivedMesh *dm)
|
||||
{
|
||||
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if (mti->applyModifierEM) {
|
||||
return mti->applyModifierEM_DM(md, depsgraph, ob, editData, dm, flag);
|
||||
return mti->applyModifierEM_DM(md, ctx, editData, dm);
|
||||
}
|
||||
else {
|
||||
/* TODO(sybren): deduplicate all the copies of this code in this file. */
|
||||
|
@ -1154,10 +1147,10 @@ struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(struct ModifierData *
|
|||
if (dm != NULL) {
|
||||
mesh = BKE_libblock_alloc_notest(ID_ME);
|
||||
BKE_mesh_init(mesh);
|
||||
DM_to_mesh(dm, mesh, ob, CD_MASK_EVERYTHING, false);
|
||||
DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
|
||||
}
|
||||
|
||||
struct Mesh *new_mesh = mti->applyModifierEM(md, depsgraph, ob, editData, mesh, flag);
|
||||
struct Mesh *new_mesh = mti->applyModifierEM(md, ctx, editData, mesh);
|
||||
|
||||
/* Make a DM that doesn't reference new_mesh so we can free the latter. */
|
||||
DerivedMesh *ndm = CDDM_from_mesh_ex(new_mesh, CD_DUPLICATE);
|
||||
|
|
|
@ -282,8 +282,9 @@ DerivedMesh *get_multires_dm(struct Depsgraph *depsgraph, Scene *scene, Multires
|
|||
ModifierData *md = (ModifierData *)mmd;
|
||||
DerivedMesh *tdm = mesh_get_derived_deform(depsgraph, scene, ob, CD_MASK_BAREMESH);
|
||||
DerivedMesh *dm;
|
||||
ModifierEvalContext mectx = {depsgraph, ob, MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY};
|
||||
|
||||
dm = modifier_applyModifier_DM_deprecated(md, depsgraph, ob, tdm, MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY);
|
||||
dm = modifier_applyModifier_DM_deprecated(md, &mectx, tdm);
|
||||
if (dm == tdm) {
|
||||
dm = CDDM_copy(tdm);
|
||||
}
|
||||
|
@ -431,6 +432,7 @@ int multiresModifier_reshapeFromDeformMod(struct Depsgraph *depsgraph, Scene *sc
|
|||
DerivedMesh *dm, *ndm;
|
||||
int numVerts, result;
|
||||
float (*deformedVerts)[3];
|
||||
const ModifierEvalContext mectx = {depsgraph, ob, 0};
|
||||
|
||||
if (multires_get_level(ob, mmd, false, true) == 0)
|
||||
return 0;
|
||||
|
@ -441,7 +443,7 @@ int multiresModifier_reshapeFromDeformMod(struct Depsgraph *depsgraph, Scene *sc
|
|||
deformedVerts = MEM_malloc_arrayN(numVerts, sizeof(float[3]), "multiresReshape_deformVerts");
|
||||
|
||||
dm->getVertCos(dm, deformedVerts);
|
||||
modifier_deformVerts_DM_deprecated(md, depsgraph, ob, dm, deformedVerts, numVerts, 0);
|
||||
modifier_deformVerts_DM_deprecated(md, &mectx, dm, deformedVerts, numVerts);
|
||||
|
||||
ndm = CDDM_copy(dm);
|
||||
CDDM_apply_vert_coords(ndm, deformedVerts);
|
||||
|
|
|
@ -631,6 +631,7 @@ static int modifier_apply_obdata(ReportList *reports, Depsgraph *depsgraph, Scen
|
|||
Curve *cu;
|
||||
int numVerts;
|
||||
float (*vertexCos)[3];
|
||||
ModifierEvalContext mectx = {depsgraph, ob, 0};
|
||||
|
||||
if (ELEM(mti->type, eModifierTypeType_Constructive, eModifierTypeType_Nonconstructive)) {
|
||||
BKE_report(reports, RPT_ERROR, "Cannot apply constructive modifiers on curve");
|
||||
|
@ -641,7 +642,7 @@ static int modifier_apply_obdata(ReportList *reports, Depsgraph *depsgraph, Scen
|
|||
BKE_report(reports, RPT_INFO, "Applied modifier only changed CV points, not tessellated/bevel vertices");
|
||||
|
||||
vertexCos = BKE_curve_nurbs_vertexCos_get(&cu->nurb, &numVerts);
|
||||
modifier_deformVerts_DM_deprecated(md, depsgraph, ob, NULL, vertexCos, numVerts, 0);
|
||||
modifier_deformVerts_DM_deprecated(md, &mectx, NULL, vertexCos, numVerts);
|
||||
BK_curve_nurbs_vertexCos_apply(&cu->nurb, vertexCos);
|
||||
|
||||
MEM_freeN(vertexCos);
|
||||
|
|
|
@ -110,17 +110,16 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
}
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, Mesh *mesh,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
Mesh *mesh,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int numVerts)
|
||||
{
|
||||
ArmatureModifierData *amd = (ArmatureModifierData *) md;
|
||||
|
||||
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
|
||||
|
||||
armature_deform_verts(amd->object, ob, mesh, vertexCos, NULL,
|
||||
armature_deform_verts(amd->object, ctx->object, mesh, vertexCos, NULL,
|
||||
numVerts, amd->deformflag, (float(*)[3])amd->prevCos, amd->defgrp_name);
|
||||
|
||||
/* free cache */
|
||||
|
@ -131,7 +130,7 @@ static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
|||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, struct BMEditMesh *em,
|
||||
ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em,
|
||||
Mesh *mesh, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
ArmatureModifierData *amd = (ArmatureModifierData *) md;
|
||||
|
@ -147,7 +146,7 @@ static void deformVertsEM(
|
|||
|
||||
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
|
||||
|
||||
armature_deform_verts(amd->object, ob, mesh_src, vertexCos, NULL,
|
||||
armature_deform_verts(amd->object, ctx->object, mesh_src, vertexCos, NULL,
|
||||
numVerts, amd->deformflag, (float(*)[3])amd->prevCos, amd->defgrp_name);
|
||||
|
||||
/* free cache */
|
||||
|
@ -163,7 +162,7 @@ static void deformVertsEM(
|
|||
}
|
||||
|
||||
static void deformMatricesEM(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, struct BMEditMesh *em,
|
||||
ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em,
|
||||
Mesh *mesh, float (*vertexCos)[3],
|
||||
float (*defMats)[3][3], int numVerts)
|
||||
{
|
||||
|
@ -178,7 +177,7 @@ static void deformMatricesEM(
|
|||
BM_mesh_bm_to_me(em->bm, mesh_src, ¶ms);
|
||||
}
|
||||
|
||||
armature_deform_verts(amd->object, ob, mesh_src, vertexCos, defMats, numVerts,
|
||||
armature_deform_verts(amd->object, ctx->object, mesh_src, vertexCos, defMats, numVerts,
|
||||
amd->deformflag, NULL, amd->defgrp_name);
|
||||
|
||||
if (!mesh) {
|
||||
|
@ -187,13 +186,13 @@ static void deformMatricesEM(
|
|||
}
|
||||
}
|
||||
|
||||
static void deformMatrices(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, Mesh *mesh,
|
||||
static void deformMatrices(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts)
|
||||
{
|
||||
ArmatureModifierData *amd = (ArmatureModifierData *) md;
|
||||
Mesh *mesh_src = mesh ? mesh : ob->data;
|
||||
Mesh *mesh_src = mesh ? mesh : ctx->object->data;
|
||||
|
||||
armature_deform_verts(amd->object, ob, mesh_src, vertexCos, defMats, numVerts,
|
||||
armature_deform_verts(amd->object, ctx->object, mesh_src, vertexCos, defMats, numVerts,
|
||||
amd->deformflag, NULL, amd->defgrp_name);
|
||||
}
|
||||
|
||||
|
|
|
@ -351,8 +351,7 @@ static void mesh_merge_transform(
|
|||
}
|
||||
|
||||
static Mesh *arrayModifier_doArray(
|
||||
ArrayModifierData *amd, Object *ob, Mesh *mesh,
|
||||
ModifierApplyFlag flag)
|
||||
ArrayModifierData *amd, const ModifierEvalContext *ctx, Mesh *mesh)
|
||||
{
|
||||
const float eps = 1e-6f;
|
||||
const MVert *src_mvert;
|
||||
|
@ -396,10 +395,11 @@ static Mesh *arrayModifier_doArray(
|
|||
|
||||
count = amd->count;
|
||||
|
||||
if (amd->start_cap && amd->start_cap != ob && amd->start_cap->type == OB_MESH) {
|
||||
vgroup_start_cap_remap = BKE_object_defgroup_index_map_create(amd->start_cap, ob, &vgroup_start_cap_remap_len);
|
||||
if (amd->start_cap && amd->start_cap != ctx->object && amd->start_cap->type == OB_MESH) {
|
||||
vgroup_start_cap_remap = BKE_object_defgroup_index_map_create(
|
||||
amd->start_cap, ctx->object, &vgroup_start_cap_remap_len);
|
||||
|
||||
start_cap_mesh = get_mesh_eval_for_modifier(amd->start_cap, flag);
|
||||
start_cap_mesh = get_mesh_eval_for_modifier(amd->start_cap, ctx->flag);
|
||||
if (start_cap_mesh) {
|
||||
start_cap_nverts = start_cap_mesh->totvert;
|
||||
start_cap_nedges = start_cap_mesh->totedge;
|
||||
|
@ -407,10 +407,11 @@ static Mesh *arrayModifier_doArray(
|
|||
start_cap_npolys = start_cap_mesh->totpoly;
|
||||
}
|
||||
}
|
||||
if (amd->end_cap && amd->end_cap != ob && amd->end_cap->type == OB_MESH) {
|
||||
vgroup_end_cap_remap = BKE_object_defgroup_index_map_create(amd->end_cap, ob, &vgroup_end_cap_remap_len);
|
||||
if (amd->end_cap && amd->end_cap != ctx->object && amd->end_cap->type == OB_MESH) {
|
||||
vgroup_end_cap_remap = BKE_object_defgroup_index_map_create(
|
||||
amd->end_cap, ctx->object, &vgroup_end_cap_remap_len);
|
||||
|
||||
end_cap_mesh = get_mesh_eval_for_modifier(amd->end_cap, flag);
|
||||
end_cap_mesh = get_mesh_eval_for_modifier(amd->end_cap, ctx->flag);
|
||||
if (end_cap_mesh) {
|
||||
end_cap_nverts = end_cap_mesh->totvert;
|
||||
end_cap_nedges = end_cap_mesh->totedge;
|
||||
|
@ -446,8 +447,8 @@ static Mesh *arrayModifier_doArray(
|
|||
float obinv[4][4];
|
||||
float result_mat[4][4];
|
||||
|
||||
if (ob)
|
||||
invert_m4_m4(obinv, ob->obmat);
|
||||
if (ctx->object)
|
||||
invert_m4_m4(obinv, ctx->object->obmat);
|
||||
else
|
||||
unit_m4(obinv);
|
||||
|
||||
|
@ -747,12 +748,11 @@ static Mesh *arrayModifier_doArray(
|
|||
}
|
||||
|
||||
|
||||
static Mesh *applyModifier(ModifierData *md, Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, Mesh *mesh,
|
||||
ModifierApplyFlag flag)
|
||||
static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
Mesh *mesh)
|
||||
{
|
||||
ArrayModifierData *amd = (ArrayModifierData *) md;
|
||||
return arrayModifier_doArray(amd, ob, mesh, flag);
|
||||
return arrayModifier_doArray(amd, ctx, mesh);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -86,9 +86,8 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
|||
/*
|
||||
* This calls the new bevel code (added since 2.64)
|
||||
*/
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
struct Object *ob, DerivedMesh *dm,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
DerivedMesh *result;
|
||||
BMesh *bm;
|
||||
|
@ -103,12 +102,12 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
const bool vertex_only = (bmd->flags & MOD_BEVEL_VERT) != 0;
|
||||
const bool do_clamp = !(bmd->flags & MOD_BEVEL_OVERLAP_OK);
|
||||
const int offset_type = bmd->val_flags;
|
||||
const int mat = CLAMPIS(bmd->mat, -1, ob->totcol - 1);
|
||||
const int mat = CLAMPIS(bmd->mat, -1, ctx->object->totcol - 1);
|
||||
const bool loop_slide = (bmd->flags & MOD_BEVEL_EVEN_WIDTHS) == 0;
|
||||
|
||||
bm = DM_to_bmesh(dm, true);
|
||||
if ((bmd->lim_flags & MOD_BEVEL_VGROUP) && bmd->defgrp_name[0])
|
||||
modifier_get_vgroup(ob, dm, bmd->defgrp_name, &dvert, &vgroup);
|
||||
modifier_get_vgroup(ctx->object, dm, bmd->defgrp_name, &dvert, &vgroup);
|
||||
|
||||
if (vertex_only) {
|
||||
BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
|
||||
|
|
|
@ -166,9 +166,8 @@ static int bm_face_isect_pair(BMFace *f, void *UNUSED(user_data))
|
|||
}
|
||||
|
||||
static DerivedMesh *applyModifier(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob,
|
||||
DerivedMesh *dm,
|
||||
ModifierApplyFlag flag)
|
||||
ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
BooleanModifierData *bmd = (BooleanModifierData *) md;
|
||||
DerivedMesh *dm_other;
|
||||
|
@ -176,7 +175,7 @@ static DerivedMesh *applyModifier(
|
|||
if (!bmd->object)
|
||||
return dm;
|
||||
|
||||
dm_other = get_dm_for_modifier(bmd->object, flag);
|
||||
dm_other = get_dm_for_modifier(bmd->object, ctx->flag);
|
||||
|
||||
if (dm_other) {
|
||||
DerivedMesh *result;
|
||||
|
@ -184,10 +183,10 @@ static DerivedMesh *applyModifier(
|
|||
/* when one of objects is empty (has got no faces) we could speed up
|
||||
* calculation a bit returning one of objects' derived meshes (or empty one)
|
||||
* Returning mesh is depended on modifiers operation (sergey) */
|
||||
result = get_quick_derivedMesh(ob, dm, bmd->object, dm_other, bmd->operation);
|
||||
result = get_quick_derivedMesh(ctx->object, dm, bmd->object, dm_other, bmd->operation);
|
||||
|
||||
if (result == NULL) {
|
||||
const bool is_flip = (is_negative_m4(ob->obmat) != is_negative_m4(bmd->object->obmat));
|
||||
const bool is_flip = (is_negative_m4(ctx->object->obmat) != is_negative_m4(bmd->object->obmat));
|
||||
|
||||
BMesh *bm;
|
||||
const BMAllocTemplate allocsize = BMALLOC_TEMPLATE_FROM_DM(dm, dm_other);
|
||||
|
@ -234,7 +233,7 @@ static DerivedMesh *applyModifier(
|
|||
float imat[4][4];
|
||||
float omat[4][4];
|
||||
|
||||
invert_m4_m4(imat, ob->obmat);
|
||||
invert_m4_m4(imat, ctx->object->obmat);
|
||||
mul_m4_m4m4(omat, imat, bmd->object->obmat);
|
||||
|
||||
BMVert *eve;
|
||||
|
@ -260,7 +259,7 @@ static DerivedMesh *applyModifier(
|
|||
const short ob_src_totcol = bmd->object->totcol;
|
||||
short *material_remap = BLI_array_alloca(material_remap, ob_src_totcol ? ob_src_totcol : 1);
|
||||
|
||||
BKE_material_remap_object_calc(ob, bmd->object, material_remap);
|
||||
BKE_material_remap_object_calc(ctx->object, bmd->object, material_remap);
|
||||
|
||||
BMFace *efa;
|
||||
i = 0;
|
||||
|
|
|
@ -80,9 +80,8 @@ static bool dependsOnTime(ModifierData *UNUSED(md))
|
|||
return true;
|
||||
}
|
||||
|
||||
static Mesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
||||
Object *UNUSED(ob), struct Mesh *mesh,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct Mesh *mesh)
|
||||
{
|
||||
Mesh *result;
|
||||
BuildModifierData *bmd = (BuildModifierData *) md;
|
||||
|
@ -116,7 +115,7 @@ static Mesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
|||
range_vn_i(edgeMap, numEdge_src, 0);
|
||||
range_vn_i(faceMap, numPoly_src, 0);
|
||||
|
||||
struct Scene *scene = DEG_get_input_scene(depsgraph);
|
||||
struct Scene *scene = DEG_get_input_scene(ctx->depsgraph);
|
||||
frac = (BKE_scene_frame_get(scene) - bmd->start) / bmd->length;
|
||||
CLAMP(frac, 0.0f, 1.0f);
|
||||
if (bmd->flag & MOD_BUILD_FLAG_REVERSE) {
|
||||
|
|
|
@ -429,22 +429,21 @@ static void cuboid_do(
|
|||
}
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = NULL;
|
||||
CastModifierData *cmd = (CastModifierData *)md;
|
||||
|
||||
dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
dm = get_dm(ctx->object, NULL, derivedData, NULL, false, false);
|
||||
|
||||
if (cmd->type == MOD_CAST_TYPE_CUBOID) {
|
||||
cuboid_do(cmd, ob, dm, vertexCos, numVerts);
|
||||
cuboid_do(cmd, ctx->object, dm, vertexCos, numVerts);
|
||||
}
|
||||
else { /* MOD_CAST_TYPE_SPHERE or MOD_CAST_TYPE_CYLINDER */
|
||||
sphere_do(cmd, ob, dm, vertexCos, numVerts);
|
||||
sphere_do(cmd, ctx->object, dm, vertexCos, numVerts);
|
||||
}
|
||||
|
||||
if (dm != derivedData)
|
||||
|
@ -452,18 +451,18 @@ static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
|||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, struct BMEditMesh *editData,
|
||||
ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
|
||||
DerivedMesh *dm = get_dm(ctx->object, editData, derivedData, NULL, false, false);
|
||||
CastModifierData *cmd = (CastModifierData *)md;
|
||||
|
||||
if (cmd->type == MOD_CAST_TYPE_CUBOID) {
|
||||
cuboid_do(cmd, ob, dm, vertexCos, numVerts);
|
||||
cuboid_do(cmd, ctx->object, dm, vertexCos, numVerts);
|
||||
}
|
||||
else { /* MOD_CAST_TYPE_SPHERE or MOD_CAST_TYPE_CYLINDER */
|
||||
sphere_do(cmd, ob, dm, vertexCos, numVerts);
|
||||
sphere_do(cmd, ctx->object, dm, vertexCos, numVerts);
|
||||
}
|
||||
|
||||
if (dm != derivedData)
|
||||
|
|
|
@ -69,8 +69,9 @@ static void initData(ModifierData *md)
|
|||
cloth_init(clmd);
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *depsgraph, Object *ob, DerivedMesh *derivedData, float (*vertexCos)[3],
|
||||
int numVerts, ModifierApplyFlag UNUSED(flag))
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3],
|
||||
int numVerts)
|
||||
{
|
||||
DerivedMesh *dm;
|
||||
ClothModifierData *clmd = (ClothModifierData *) md;
|
||||
|
@ -83,7 +84,7 @@ static void deformVerts(ModifierData *md, struct Depsgraph *depsgraph, Object *o
|
|||
return;
|
||||
}
|
||||
|
||||
dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
dm = get_dm(ctx->object, NULL, derivedData, NULL, false, false);
|
||||
if (dm == derivedData)
|
||||
dm = CDDM_copy(dm);
|
||||
|
||||
|
@ -94,7 +95,7 @@ static void deformVerts(ModifierData *md, struct Depsgraph *depsgraph, Object *o
|
|||
* Also hopefully new cloth system will arrive soon..
|
||||
*/
|
||||
if (derivedData == NULL && clmd->sim_parms->shapekey_rest) {
|
||||
KeyBlock *kb = BKE_keyblock_from_key(BKE_key_from_object(ob),
|
||||
KeyBlock *kb = BKE_keyblock_from_key(BKE_key_from_object(ctx->object),
|
||||
clmd->sim_parms->shapekey_rest);
|
||||
if (kb && kb->data != NULL) {
|
||||
float (*layerorco)[3];
|
||||
|
@ -109,7 +110,7 @@ static void deformVerts(ModifierData *md, struct Depsgraph *depsgraph, Object *o
|
|||
|
||||
CDDM_apply_vert_coords(dm, vertexCos);
|
||||
|
||||
clothModifier_do(clmd, depsgraph, md->scene, ob, dm, vertexCos);
|
||||
clothModifier_do(clmd, ctx->depsgraph, md->scene, ctx->object, dm, vertexCos);
|
||||
|
||||
dm->release(dm);
|
||||
}
|
||||
|
|
|
@ -98,15 +98,15 @@ static bool dependsOnTime(ModifierData *UNUSED(md))
|
|||
return true;
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int UNUSED(numVerts),
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int UNUSED(numVerts))
|
||||
{
|
||||
CollisionModifierData *collmd = (CollisionModifierData *) md;
|
||||
DerivedMesh *dm = NULL;
|
||||
MVert *tempVert = NULL;
|
||||
Object *ob = ctx->object;
|
||||
|
||||
/* if possible use/create DerivedMesh */
|
||||
if (derivedData) dm = CDDM_copy(derivedData);
|
||||
|
|
|
@ -713,12 +713,12 @@ error:
|
|||
|
||||
|
||||
static void deformVerts(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
|
||||
ModifierData *md, const ModifierEvalContext *ctx, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
DerivedMesh *dm = get_dm(ctx->object, NULL, derivedData, NULL, false, false);
|
||||
|
||||
correctivesmooth_modifier_do(md, ob, dm, vertexCos, (unsigned int)numVerts, NULL);
|
||||
correctivesmooth_modifier_do(md, ctx->object, dm, vertexCos, (unsigned int)numVerts, NULL);
|
||||
|
||||
if (dm != derivedData) {
|
||||
dm->release(dm);
|
||||
|
@ -727,12 +727,12 @@ static void deformVerts(
|
|||
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, struct BMEditMesh *editData,
|
||||
ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
|
||||
DerivedMesh *dm = get_dm(ctx->object, editData, derivedData, NULL, false, false);
|
||||
|
||||
correctivesmooth_modifier_do(md, ob, dm, vertexCos, (unsigned int)numVerts, editData);
|
||||
correctivesmooth_modifier_do(md, ctx->object, dm, vertexCos, (unsigned int)numVerts, editData);
|
||||
|
||||
if (dm != derivedData) {
|
||||
dm->release(dm);
|
||||
|
|
|
@ -111,29 +111,28 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Curve Modifier");
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int numVerts)
|
||||
{
|
||||
CurveModifierData *cmd = (CurveModifierData *) md;
|
||||
|
||||
/* silly that defaxis and curve_deform_verts are off by 1
|
||||
* but leave for now to save having to call do_versions */
|
||||
curve_deform_verts(cmd->object, ob, derivedData, vertexCos, numVerts,
|
||||
curve_deform_verts(cmd->object, ctx->object, derivedData, vertexCos, numVerts,
|
||||
cmd->name, cmd->defaxis - 1);
|
||||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *depsgraph, Object *ob, struct BMEditMesh *em,
|
||||
ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = derivedData;
|
||||
|
||||
if (!derivedData) dm = CDDM_from_editbmesh(em, false, false);
|
||||
|
||||
deformVerts(md, depsgraph, ob, dm, vertexCos, numVerts, 0);
|
||||
deformVerts(md, ctx, dm, vertexCos, numVerts);
|
||||
|
||||
if (!derivedData) dm->release(dm);
|
||||
}
|
||||
|
|
|
@ -148,15 +148,14 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
|
|||
DT_TYPE_SHARP_FACE \
|
||||
)
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph, Object *ob, DerivedMesh *derivedData,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, DerivedMesh *derivedData)
|
||||
{
|
||||
DataTransferModifierData *dtmd = (DataTransferModifierData *) md;
|
||||
DerivedMesh *dm = derivedData;
|
||||
ReportList reports;
|
||||
|
||||
/* Only used to check wehther we are operating on org data or not... */
|
||||
Mesh *me = ob->data;
|
||||
Mesh *me = ctx->object->data;
|
||||
|
||||
const bool invert_vgroup = (dtmd->flags & MOD_DATATRANSFER_INVERT_VGROUP) != 0;
|
||||
|
||||
|
@ -166,7 +165,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
|||
SpaceTransform *space_transform = (dtmd->flags & MOD_DATATRANSFER_OBSRC_TRANSFORM) ? &space_transform_data : NULL;
|
||||
|
||||
if (space_transform) {
|
||||
BLI_SPACE_TRANSFORM_SETUP(space_transform, ob, dtmd->ob_source);
|
||||
BLI_SPACE_TRANSFORM_SETUP(space_transform, ctx->object, dtmd->ob_source);
|
||||
}
|
||||
|
||||
MVert *mvert = dm->getVertArray(dm);
|
||||
|
@ -180,7 +179,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
|||
BKE_reports_init(&reports, RPT_STORE);
|
||||
|
||||
/* Note: no islands precision for now here. */
|
||||
BKE_object_data_transfer_dm(depsgraph, md->scene, dtmd->ob_source, ob, dm, dtmd->data_types, false,
|
||||
BKE_object_data_transfer_dm(ctx->depsgraph, md->scene, dtmd->ob_source, ctx->object, dm, 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,
|
||||
|
|
|
@ -86,9 +86,8 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
|||
return dataMask;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
DecimateModifierData *dmd = (DecimateModifierData *) md;
|
||||
DerivedMesh *dm = derivedData, *result = NULL;
|
||||
|
@ -136,7 +135,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
MDeformVert *dvert;
|
||||
int defgrp_index;
|
||||
|
||||
modifier_get_vgroup(ob, dm, dmd->defgrp_name, &dvert, &defgrp_index);
|
||||
modifier_get_vgroup(ctx->object, dm, dmd->defgrp_name, &dvert, &defgrp_index);
|
||||
|
||||
if (dvert) {
|
||||
const unsigned int vert_tot = dm->getNumVerts(dm);
|
||||
|
|
|
@ -368,15 +368,14 @@ static void displaceModifier_do(
|
|||
}
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_cddm(ob, NULL, derivedData, vertexCos, dependsOnNormals(md));
|
||||
DerivedMesh *dm = get_cddm(ctx->object, NULL, derivedData, vertexCos, dependsOnNormals(md));
|
||||
|
||||
displaceModifier_do((DisplaceModifierData *)md, ob, dm,
|
||||
displaceModifier_do((DisplaceModifierData *)md, ctx->object, dm,
|
||||
vertexCos, numVerts);
|
||||
|
||||
if (dm != derivedData)
|
||||
|
@ -384,12 +383,12 @@ static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
|||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, struct BMEditMesh *editData,
|
||||
ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_cddm(ob, editData, derivedData, vertexCos, dependsOnNormals(md));
|
||||
DerivedMesh *dm = get_cddm(ctx->object, editData, derivedData, vertexCos, dependsOnNormals(md));
|
||||
|
||||
displaceModifier_do((DisplaceModifierData *)md, ob, dm,
|
||||
displaceModifier_do((DisplaceModifierData *)md, ctx->object, dm,
|
||||
vertexCos, numVerts);
|
||||
|
||||
if (dm != derivedData)
|
||||
|
|
|
@ -105,15 +105,14 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
|||
return dataMask;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
||||
Object *ob, DerivedMesh *dm,
|
||||
ModifierApplyFlag flag)
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
DynamicPaintModifierData *pmd = (DynamicPaintModifierData *) md;
|
||||
|
||||
/* dont apply dynamic paint on orco dm stack */
|
||||
if (!(flag & MOD_APPLY_ORCO)) {
|
||||
return dynamicPaint_Modifier_do(pmd, depsgraph, md->scene, ob, dm);
|
||||
if (!(ctx->flag & MOD_APPLY_ORCO)) {
|
||||
return dynamicPaint_Modifier_do(pmd, ctx->depsgraph, md->scene, ctx->object, dm);
|
||||
}
|
||||
return dm;
|
||||
}
|
||||
|
|
|
@ -121,9 +121,8 @@ static void copyData(ModifierData *md, ModifierData *target)
|
|||
modifier_copyData_generic(md, target);
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *UNUSED(ob), DerivedMesh *dm,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *UNUSED(ctx),
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
DerivedMesh *result;
|
||||
EdgeSplitModifierData *emd = (EdgeSplitModifierData *) md;
|
||||
|
|
|
@ -787,8 +787,8 @@ static DerivedMesh *cutEdges(ExplodeModifierData *emd, DerivedMesh *dm)
|
|||
}
|
||||
static DerivedMesh *explodeMesh(
|
||||
ExplodeModifierData *emd,
|
||||
ParticleSystemModifierData *psmd, struct Depsgraph *depsgraph, Scene *scene,
|
||||
Object *ob, DerivedMesh *to_explode)
|
||||
ParticleSystemModifierData *psmd, const ModifierEvalContext *ctx, Scene *scene,
|
||||
DerivedMesh *to_explode)
|
||||
{
|
||||
DerivedMesh *explode, *dm = to_explode;
|
||||
MFace *mf = NULL, *mface;
|
||||
|
@ -813,9 +813,9 @@ static DerivedMesh *explodeMesh(
|
|||
mface = dm->getTessFaceArray(dm);
|
||||
totpart = psmd->psys->totpart;
|
||||
|
||||
sim.depsgraph = depsgraph;
|
||||
sim.depsgraph = ctx->depsgraph;
|
||||
sim.scene = scene;
|
||||
sim.ob = ob;
|
||||
sim.ob = ctx->object;
|
||||
sim.psys = psmd->psys;
|
||||
sim.psmd = psmd;
|
||||
|
||||
|
@ -870,7 +870,7 @@ static DerivedMesh *explodeMesh(
|
|||
/*dupvert = CDDM_get_verts(explode);*/
|
||||
|
||||
/* getting back to object space */
|
||||
invert_m4_m4(imat, ob->obmat);
|
||||
invert_m4_m4(imat, ctx->object->obmat);
|
||||
|
||||
psmd->psys->lattice_deform_data = psys_create_lattice_deform_data(&sim);
|
||||
|
||||
|
@ -901,7 +901,7 @@ static DerivedMesh *explodeMesh(
|
|||
psys_get_particle_state(&sim, ed_v2, &state, 1);
|
||||
|
||||
vertco = CDDM_get_vert(explode, v)->co;
|
||||
mul_m4_v3(ob->obmat, vertco);
|
||||
mul_m4_v3(ctx->object->obmat, vertco);
|
||||
|
||||
sub_v3_v3(vertco, birth.co);
|
||||
|
||||
|
@ -995,13 +995,12 @@ static ParticleSystemModifierData *findPrecedingParticlesystem(Object *ob, Modif
|
|||
}
|
||||
return psmd;
|
||||
}
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
DerivedMesh *dm = derivedData;
|
||||
ExplodeModifierData *emd = (ExplodeModifierData *) md;
|
||||
ParticleSystemModifierData *psmd = findPrecedingParticlesystem(ob, md);
|
||||
ParticleSystemModifierData *psmd = findPrecedingParticlesystem(ctx->object, md);
|
||||
|
||||
if (psmd) {
|
||||
ParticleSystem *psys = psmd->psys;
|
||||
|
@ -1030,7 +1029,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
|||
if (emd->flag & eExplodeFlag_EdgeCut) {
|
||||
int *facepa = emd->facepa;
|
||||
DerivedMesh *splitdm = cutEdges(emd, dm);
|
||||
DerivedMesh *explode = explodeMesh(emd, psmd, depsgraph, md->scene, ob, splitdm);
|
||||
DerivedMesh *explode = explodeMesh(emd, psmd, ctx, md->scene, splitdm);
|
||||
|
||||
MEM_freeN(emd->facepa);
|
||||
emd->facepa = facepa;
|
||||
|
@ -1038,7 +1037,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
|||
return explode;
|
||||
}
|
||||
else
|
||||
return explodeMesh(emd, psmd, depsgraph, md->scene, ob, derivedData);
|
||||
return explodeMesh(emd, psmd, ctx, md->scene, derivedData);
|
||||
}
|
||||
return derivedData;
|
||||
}
|
||||
|
|
|
@ -82,9 +82,8 @@ static void copyData(ModifierData *md, ModifierData *target)
|
|||
|
||||
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *dm,
|
||||
ModifierApplyFlag flag)
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
FluidsimModifierData *fluidmd = (FluidsimModifierData *) md;
|
||||
DerivedMesh *result = NULL;
|
||||
|
@ -98,7 +97,8 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
}
|
||||
}
|
||||
|
||||
result = fluidsimModifier_do(fluidmd, md->scene, ob, dm, flag & MOD_APPLY_RENDER, flag & MOD_APPLY_USECACHE);
|
||||
result = fluidsimModifier_do(fluidmd, md->scene, ctx->object, dm,
|
||||
ctx->flag & MOD_APPLY_RENDER, ctx->flag & MOD_APPLY_USECACHE);
|
||||
|
||||
return result ? result : dm;
|
||||
}
|
||||
|
|
|
@ -352,32 +352,31 @@ static void deformVerts_do(HookModifierData *hmd, Object *ob, DerivedMesh *dm,
|
|||
}
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
HookModifierData *hmd = (HookModifierData *) md;
|
||||
DerivedMesh *dm = derivedData;
|
||||
/* We need a valid dm for meshes when a vgroup is set... */
|
||||
if (!dm && ob->type == OB_MESH && hmd->name[0] != '\0')
|
||||
dm = get_dm(ob, NULL, dm, NULL, false, false);
|
||||
if (!dm && ctx->object->type == OB_MESH && hmd->name[0] != '\0')
|
||||
dm = get_dm(ctx->object, NULL, dm, NULL, false, false);
|
||||
|
||||
deformVerts_do(hmd, ob, dm, vertexCos, numVerts);
|
||||
deformVerts_do(hmd, ctx->object, dm, vertexCos, numVerts);
|
||||
|
||||
if (derivedData != dm)
|
||||
dm->release(dm);
|
||||
}
|
||||
|
||||
static void deformVertsEM(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, struct BMEditMesh *editData,
|
||||
static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
HookModifierData *hmd = (HookModifierData *) md;
|
||||
DerivedMesh *dm = derivedData;
|
||||
/* We need a valid dm for meshes when a vgroup is set... */
|
||||
if (!dm && ob->type == OB_MESH && hmd->name[0] != '\0')
|
||||
dm = get_dm(ob, editData, dm, NULL, false, false);
|
||||
if (!dm && ctx->object->type == OB_MESH && hmd->name[0] != '\0')
|
||||
dm = get_dm(ctx->object, editData, dm, NULL, false, false);
|
||||
|
||||
deformVerts_do(hmd, ob, dm, vertexCos, numVerts);
|
||||
deformVerts_do(hmd, ctx->object, dm, vertexCos, numVerts);
|
||||
|
||||
if (derivedData != dm)
|
||||
dm->release(dm);
|
||||
|
|
|
@ -724,23 +724,23 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
|||
return dataMask;
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
DerivedMesh *dm = get_dm(ctx->object, NULL, derivedData, NULL, false, false);
|
||||
|
||||
LaplacianDeformModifier_do((LaplacianDeformModifierData *)md, ob, dm, vertexCos, numVerts);
|
||||
LaplacianDeformModifier_do((LaplacianDeformModifierData *)md, ctx->object, dm, vertexCos, numVerts);
|
||||
if (dm != derivedData) {
|
||||
dm->release(dm);
|
||||
}
|
||||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, struct BMEditMesh *editData,
|
||||
ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
|
||||
LaplacianDeformModifier_do((LaplacianDeformModifierData *)md, ob, dm,
|
||||
DerivedMesh *dm = get_dm(ctx->object, editData, derivedData, NULL, false, false);
|
||||
LaplacianDeformModifier_do((LaplacianDeformModifierData *)md, ctx->object, dm,
|
||||
vertexCos, numVerts);
|
||||
if (dm != derivedData) {
|
||||
dm->release(dm);
|
||||
|
|
|
@ -506,17 +506,17 @@ static CustomDataMask required_data_mask(Object *UNUSED(ob), ModifierData *md)
|
|||
return dataMask;
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm;
|
||||
|
||||
if (numVerts == 0)
|
||||
return;
|
||||
|
||||
dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
dm = get_dm(ctx->object, NULL, derivedData, NULL, false, false);
|
||||
|
||||
laplaciansmoothModifier_do((LaplacianSmoothModifierData *)md, ob, dm,
|
||||
laplaciansmoothModifier_do((LaplacianSmoothModifierData *)md, ctx->object, dm,
|
||||
vertexCos, numVerts);
|
||||
|
||||
if (dm != derivedData)
|
||||
|
@ -524,7 +524,7 @@ static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), O
|
|||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, struct BMEditMesh *editData,
|
||||
ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm;
|
||||
|
@ -532,9 +532,9 @@ static void deformVertsEM(
|
|||
if (numVerts == 0)
|
||||
return;
|
||||
|
||||
dm = get_dm(ob, editData, derivedData, NULL, false, false);
|
||||
dm = get_dm(ctx->object, editData, derivedData, NULL, false, false);
|
||||
|
||||
laplaciansmoothModifier_do((LaplacianSmoothModifierData *)md, ob, dm,
|
||||
laplaciansmoothModifier_do((LaplacianSmoothModifierData *)md, ctx->object, dm,
|
||||
vertexCos, numVerts);
|
||||
|
||||
if (dm != derivedData)
|
||||
|
|
|
@ -99,30 +99,29 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Lattice Modifier");
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int numVerts)
|
||||
{
|
||||
LatticeModifierData *lmd = (LatticeModifierData *) md;
|
||||
|
||||
|
||||
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
|
||||
|
||||
lattice_deform_verts(lmd->object, ob, derivedData,
|
||||
lattice_deform_verts(lmd->object, ctx->object, derivedData,
|
||||
vertexCos, numVerts, lmd->name, lmd->strength);
|
||||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *depsgraph, Object *ob, struct BMEditMesh *em,
|
||||
ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = derivedData;
|
||||
|
||||
if (!derivedData) dm = CDDM_from_editbmesh(em, false, false);
|
||||
|
||||
deformVerts(md, depsgraph, ob, dm, vertexCos, numVerts, 0);
|
||||
deformVerts(md, ctx, dm, vertexCos, numVerts);
|
||||
|
||||
if (!derivedData) dm->release(dm);
|
||||
}
|
||||
|
|
|
@ -90,11 +90,11 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
}
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *dm,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
MaskModifierData *mmd = (MaskModifierData *)md;
|
||||
Object *ob = ctx->object;
|
||||
const bool found_test = (mmd->flag & MOD_MASK_INV) == 0;
|
||||
DerivedMesh *result = NULL;
|
||||
GHash *vertHash = NULL, *edgeHash, *polyHash;
|
||||
|
|
|
@ -272,24 +272,23 @@ static void meshcache_do(
|
|||
}
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int numVerts)
|
||||
{
|
||||
MeshCacheModifierData *mcmd = (MeshCacheModifierData *)md;
|
||||
|
||||
meshcache_do(mcmd, ob, derivedData, vertexCos, numVerts);
|
||||
meshcache_do(mcmd, ctx->object, derivedData, vertexCos, numVerts);
|
||||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, struct BMEditMesh *UNUSED(editData),
|
||||
ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
MeshCacheModifierData *mcmd = (MeshCacheModifierData *)md;
|
||||
|
||||
meshcache_do(mcmd, ob, derivedData, vertexCos, numVerts);
|
||||
meshcache_do(mcmd, ctx->object, derivedData, vertexCos, numVerts);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -409,31 +409,30 @@ static void meshdeformModifier_do(
|
|||
cagedm->release(cagedm);
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *depsgraph, Object *ob,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
DerivedMesh *dm = get_dm(ctx->object, NULL, derivedData, NULL, false, false);
|
||||
|
||||
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
|
||||
|
||||
meshdeformModifier_do(md, depsgraph, ob, dm, vertexCos, numVerts);
|
||||
meshdeformModifier_do(md, ctx->depsgraph, ctx->object, dm, vertexCos, numVerts);
|
||||
|
||||
if (dm && dm != derivedData)
|
||||
dm->release(dm);
|
||||
}
|
||||
|
||||
static void deformVertsEM(ModifierData *md, struct Depsgraph *depsgraph, Object *ob,
|
||||
static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
DerivedMesh *dm = get_dm(ctx->object, NULL, derivedData, NULL, false, false);
|
||||
|
||||
meshdeformModifier_do(md, depsgraph, ob, dm, vertexCos, numVerts);
|
||||
meshdeformModifier_do(md, ctx->depsgraph, ctx->object, dm, vertexCos, numVerts);
|
||||
|
||||
if (dm && dm != derivedData)
|
||||
dm->release(dm);
|
||||
|
|
|
@ -90,15 +90,14 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
|
|||
return (mcmd->cache_file == NULL) || (mcmd->object_path[0] == '\0');
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *dm,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
#ifdef WITH_ALEMBIC
|
||||
MeshSeqCacheModifierData *mcmd = (MeshSeqCacheModifierData *) md;
|
||||
|
||||
/* Only used to check whether we are operating on org data or not... */
|
||||
Mesh *me = (ob->type == OB_MESH) ? ob->data : NULL;
|
||||
Mesh *me = (ctx->object->type == OB_MESH) ? ctx->object->data : NULL;
|
||||
DerivedMesh *org_dm = dm;
|
||||
|
||||
Scene *scene = md->scene;
|
||||
|
@ -113,7 +112,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
if (!mcmd->reader) {
|
||||
mcmd->reader = CacheReader_open_alembic_object(cache_file->handle,
|
||||
NULL,
|
||||
ob,
|
||||
ctx->object,
|
||||
mcmd->object_path);
|
||||
if (!mcmd->reader) {
|
||||
modifier_setError(md, "Could not create Alembic reader for file %s", cache_file->filepath);
|
||||
|
@ -132,7 +131,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
}
|
||||
|
||||
DerivedMesh *result = ABC_read_mesh(mcmd->reader,
|
||||
ob,
|
||||
ctx->object,
|
||||
dm,
|
||||
time,
|
||||
&err_str,
|
||||
|
@ -150,7 +149,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
return result ? result : dm;
|
||||
#else
|
||||
return dm;
|
||||
UNUSED_VARS(md, ob);
|
||||
UNUSED_VARS(ctx, md);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -330,14 +330,13 @@ static Mesh *mirrorModifier__doMirror(MirrorModifierData *mmd,
|
|||
return result;
|
||||
}
|
||||
|
||||
static Mesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, Mesh *mesh,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
Mesh *mesh)
|
||||
{
|
||||
Mesh *result;
|
||||
MirrorModifierData *mmd = (MirrorModifierData *) md;
|
||||
|
||||
result = mirrorModifier__doMirror(mmd, ob, mesh);
|
||||
result = mirrorModifier__doMirror(mmd, ctx->object, mesh);
|
||||
BKE_mesh_calc_normals(result);
|
||||
|
||||
return result;
|
||||
|
|
|
@ -67,14 +67,14 @@ static void copyData(ModifierData *md, ModifierData *target)
|
|||
modifier_copyData_generic(md, target);
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob,
|
||||
DerivedMesh *dm, ModifierApplyFlag flag)
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
MultiresModifierData *mmd = (MultiresModifierData *)md;
|
||||
DerivedMesh *result;
|
||||
Mesh *me = (Mesh *)ob->data;
|
||||
const bool useRenderParams = (flag & MOD_APPLY_RENDER) != 0;
|
||||
const bool ignore_simplify = (flag & MOD_APPLY_IGNORE_SIMPLIFY) != 0;
|
||||
Mesh *me = (Mesh *)ctx->object->data;
|
||||
const bool useRenderParams = (ctx->flag & MOD_APPLY_RENDER) != 0;
|
||||
const bool ignore_simplify = (ctx->flag & MOD_APPLY_IGNORE_SIMPLIFY) != 0;
|
||||
MultiresFlags flags = 0;
|
||||
const bool has_mask = CustomData_has_layer(&me->ldata, CD_GRID_PAINT_MASK);
|
||||
|
||||
|
@ -94,12 +94,12 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
if (ignore_simplify)
|
||||
flags |= MULTIRES_IGNORE_SIMPLIFY;
|
||||
|
||||
result = multires_make_derived_from_derived(dm, mmd, ob, flags);
|
||||
result = multires_make_derived_from_derived(dm, mmd, ctx->object, flags);
|
||||
|
||||
if (result == dm)
|
||||
return dm;
|
||||
|
||||
if (useRenderParams || !(flag & MOD_APPLY_USECACHE)) {
|
||||
if (useRenderParams || !(ctx->flag & MOD_APPLY_USECACHE)) {
|
||||
DerivedMesh *cddm;
|
||||
|
||||
cddm = CDDM_copy(result);
|
||||
|
|
|
@ -517,10 +517,10 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
}
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob,
|
||||
DerivedMesh *dm, ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
return normalEditModifier_do((NormalEditModifierData *)md, ob, dm);
|
||||
return normalEditModifier_do((NormalEditModifierData *)md, ctx->object, dm);
|
||||
}
|
||||
|
||||
ModifierTypeInfo modifierType_NormalEdit = {
|
||||
|
|
|
@ -555,13 +555,12 @@ static DerivedMesh *doOcean(ModifierData *md, Object *UNUSED(ob),
|
|||
}
|
||||
#endif /* WITH_OCEANSIM */
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
DerivedMesh *result;
|
||||
|
||||
result = doOcean(md, ob, derivedData, 0);
|
||||
result = doOcean(md, ctx->object, derivedData, 0);
|
||||
|
||||
if (result != derivedData)
|
||||
result->dirty |= DM_DIRTY_NORMALS;
|
||||
|
|
|
@ -202,9 +202,8 @@ static void store_float_in_vcol(MLoopCol *vcol, float float_value)
|
|||
vcol->a = 1.0f;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
DerivedMesh *dm = derivedData, *result;
|
||||
ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData *) md;
|
||||
|
@ -217,7 +216,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
|||
int totvert, totpoly, totloop /* , totedge */;
|
||||
int maxvert, maxpoly, maxloop, part_end = 0, part_start;
|
||||
int k, p, p_skip;
|
||||
short track = ob->trackflag % 3, trackneg, axis = pimd->axis;
|
||||
short track = ctx->object->trackflag % 3, trackneg, axis = pimd->axis;
|
||||
float max_co = 0.0, min_co = 0.0, temp_co[3];
|
||||
float *size = NULL;
|
||||
float spacemat[4][4];
|
||||
|
@ -225,9 +224,9 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
|||
const bool use_children = pimd->flag & eParticleInstanceFlag_Children;
|
||||
bool between;
|
||||
|
||||
trackneg = ((ob->trackflag > 2) ? 1 : 0);
|
||||
trackneg = ((ctx->object->trackflag > 2) ? 1 : 0);
|
||||
|
||||
if (pimd->ob == ob) {
|
||||
if (pimd->ob == ctx->object) {
|
||||
pimd->ob = NULL;
|
||||
return derivedData;
|
||||
}
|
||||
|
@ -252,7 +251,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *depsgraph,
|
|||
if (part_end == 0)
|
||||
return derivedData;
|
||||
|
||||
sim.depsgraph = depsgraph;
|
||||
sim.depsgraph = ctx->depsgraph;
|
||||
sim.scene = md->scene;
|
||||
sim.ob = pimd->ob;
|
||||
sim.psys = psys;
|
||||
|
|
|
@ -97,11 +97,10 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
|||
}
|
||||
|
||||
/* saves the current emitter state for a particle system and calculates particles */
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *depsgraph,
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int UNUSED(numVerts),
|
||||
ModifierApplyFlag flag)
|
||||
int UNUSED(numVerts))
|
||||
{
|
||||
DerivedMesh *dm = derivedData;
|
||||
ParticleSystemModifierData *psmd = (ParticleSystemModifierData *) md;
|
||||
|
@ -109,16 +108,16 @@ static void deformVerts(ModifierData *md, struct Depsgraph *depsgraph,
|
|||
bool needsFree = false;
|
||||
/* float cfra = BKE_scene_frame_get(md->scene); */ /* UNUSED */
|
||||
|
||||
if (ob->particlesystem.first)
|
||||
if (ctx->object->particlesystem.first)
|
||||
psys = psmd->psys;
|
||||
else
|
||||
return;
|
||||
|
||||
if (!psys_check_enabled(ob, psys, (flag & MOD_APPLY_RENDER) != 0))
|
||||
if (!psys_check_enabled(ctx->object, psys, (ctx->flag & MOD_APPLY_RENDER) != 0))
|
||||
return;
|
||||
|
||||
if (dm == NULL) {
|
||||
dm = get_dm(ob, NULL, NULL, vertexCos, false, true);
|
||||
dm = get_dm(ctx->object, NULL, NULL, vertexCos, false, true);
|
||||
|
||||
if (!dm)
|
||||
return;
|
||||
|
@ -163,11 +162,11 @@ static void deformVerts(ModifierData *md, struct Depsgraph *depsgraph,
|
|||
if (!psmd->dm_final->deformedOnly) {
|
||||
/* XXX Think we can assume here that if current DM is not only-deformed, ob->deformedOnly has been set.
|
||||
* This is awfully weak though. :| */
|
||||
if (ob->derivedDeform) {
|
||||
psmd->dm_deformed = CDDM_copy(ob->derivedDeform);
|
||||
if (ctx->object->derivedDeform) {
|
||||
psmd->dm_deformed = CDDM_copy(ctx->object->derivedDeform);
|
||||
}
|
||||
else { /* Can happen in some cases, e.g. when rendering from Edit mode... */
|
||||
psmd->dm_deformed = CDDM_from_mesh((Mesh *)ob->data);
|
||||
psmd->dm_deformed = CDDM_from_mesh((Mesh *)ctx->object->data);
|
||||
}
|
||||
DM_ensure_tessface(psmd->dm_deformed);
|
||||
}
|
||||
|
@ -184,9 +183,9 @@ static void deformVerts(ModifierData *md, struct Depsgraph *depsgraph,
|
|||
psmd->totdmface = psmd->dm_final->getNumTessFaces(psmd->dm_final);
|
||||
}
|
||||
|
||||
if (!(ob->transflag & OB_NO_PSYS_UPDATE)) {
|
||||
if (!(ctx->object->transflag & OB_NO_PSYS_UPDATE)) {
|
||||
psmd->flag &= ~eParticleSystemFlag_psys_updated;
|
||||
particle_system_update(depsgraph, md->scene, ob, psys, (flag & MOD_APPLY_RENDER) != 0);
|
||||
particle_system_update(ctx->depsgraph, md->scene, ctx->object, psys, (ctx->flag & MOD_APPLY_RENDER) != 0);
|
||||
psmd->flag |= eParticleSystemFlag_psys_updated;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -143,10 +143,8 @@ static void dualcon_add_quad(void *output_v, const int vert_indices[4])
|
|||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md,
|
||||
struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *UNUSED(ob),
|
||||
DerivedMesh *dm,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
const ModifierEvalContext *UNUSED(ctx),
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
RemeshModifierData *rmd;
|
||||
DualConOutput *output;
|
||||
|
@ -205,10 +203,8 @@ static DerivedMesh *applyModifier(ModifierData *md,
|
|||
#else /* !WITH_MOD_REMESH */
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *UNUSED(md),
|
||||
struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *UNUSED(ob),
|
||||
DerivedMesh *derivedData,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
const ModifierEvalContext *UNUSED(ctx),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return derivedData;
|
||||
}
|
||||
|
|
|
@ -184,14 +184,13 @@ static void copyData(ModifierData *md, ModifierData *target)
|
|||
modifier_copyData_generic(md, target);
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
ModifierApplyFlag flag)
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
DerivedMesh *dm = derivedData;
|
||||
DerivedMesh *result;
|
||||
ScrewModifierData *ltmd = (ScrewModifierData *) md;
|
||||
const bool use_render_params = (flag & MOD_APPLY_RENDER) != 0;
|
||||
const bool use_render_params = (ctx->flag & MOD_APPLY_RENDER) != 0;
|
||||
|
||||
int *origindex;
|
||||
int mpoly_index = 0;
|
||||
|
@ -279,7 +278,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
|
||||
if (ltmd->ob_axis) {
|
||||
/* calc the matrix relative to the axis object */
|
||||
invert_m4_m4(mtx_tmp_a, ob->obmat);
|
||||
invert_m4_m4(mtx_tmp_a, ctx->object->obmat);
|
||||
copy_m4_m4(mtx_tx_inv, ltmd->ob_axis->obmat);
|
||||
mul_m4_m4m4(mtx_tx, mtx_tmp_a, mtx_tx_inv);
|
||||
|
||||
|
|
|
@ -44,28 +44,27 @@
|
|||
|
||||
#include "MOD_modifiertypes.h"
|
||||
|
||||
static void deformVerts(ModifierData *UNUSED(md), struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *UNUSED(derivedData),
|
||||
static void deformVerts(ModifierData *UNUSED(md), const ModifierEvalContext *ctx,
|
||||
DerivedMesh *UNUSED(derivedData),
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int numVerts)
|
||||
{
|
||||
Key *key = BKE_key_from_object(ob);
|
||||
Key *key = BKE_key_from_object(ctx->object);
|
||||
|
||||
if (key && key->block.first) {
|
||||
int deformedVerts_tot;
|
||||
BKE_key_evaluate_object_ex(
|
||||
ob, &deformedVerts_tot,
|
||||
ctx->object, &deformedVerts_tot,
|
||||
(float *)vertexCos, sizeof(*vertexCos) * numVerts);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static void deformMatrices(ModifierData *md, struct Depsgraph *depsgraph, Object *ob, DerivedMesh *derivedData,
|
||||
static void deformMatrices(ModifierData *md, const ModifierEvalContext *ctx, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts)
|
||||
{
|
||||
Key *key = BKE_key_from_object(ob);
|
||||
KeyBlock *kb = BKE_keyblock_from_object(ob);
|
||||
Key *key = BKE_key_from_object(ctx->object);
|
||||
KeyBlock *kb = BKE_keyblock_from_object(ctx->object);
|
||||
float scale[3][3];
|
||||
|
||||
(void)vertexCos; /* unused */
|
||||
|
@ -73,37 +72,37 @@ static void deformMatrices(ModifierData *md, struct Depsgraph *depsgraph, Object
|
|||
if (kb && kb->totelem == numVerts && kb != key->refkey) {
|
||||
int a;
|
||||
|
||||
if (ob->shapeflag & OB_SHAPE_LOCK) scale_m3_fl(scale, 1);
|
||||
if (ctx->object->shapeflag & OB_SHAPE_LOCK) scale_m3_fl(scale, 1);
|
||||
else scale_m3_fl(scale, kb->curval);
|
||||
|
||||
for (a = 0; a < numVerts; a++)
|
||||
copy_m3_m3(defMats[a], scale);
|
||||
}
|
||||
|
||||
deformVerts(md, depsgraph, ob, derivedData, vertexCos, numVerts, 0);
|
||||
deformVerts(md, ctx, derivedData, vertexCos, numVerts);
|
||||
}
|
||||
|
||||
static void deformVertsEM(ModifierData *md, struct Depsgraph *depsgraph, Object *ob,
|
||||
static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts)
|
||||
{
|
||||
Key *key = BKE_key_from_object(ob);
|
||||
Key *key = BKE_key_from_object(ctx->object);
|
||||
|
||||
if (key && key->type == KEY_RELATIVE)
|
||||
deformVerts(md, depsgraph, ob, derivedData, vertexCos, numVerts, 0);
|
||||
deformVerts(md, ctx, derivedData, vertexCos, numVerts);
|
||||
}
|
||||
|
||||
static void deformMatricesEM(ModifierData *UNUSED(md), struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, struct BMEditMesh *UNUSED(editData),
|
||||
static void deformMatricesEM(ModifierData *UNUSED(md), const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *UNUSED(derivedData),
|
||||
float (*vertexCos)[3],
|
||||
float (*defMats)[3][3],
|
||||
int numVerts)
|
||||
{
|
||||
Key *key = BKE_key_from_object(ob);
|
||||
KeyBlock *kb = BKE_keyblock_from_object(ob);
|
||||
Key *key = BKE_key_from_object(ctx->object);
|
||||
KeyBlock *kb = BKE_keyblock_from_object(ctx->object);
|
||||
float scale[3][3];
|
||||
|
||||
(void)vertexCos; /* unused */
|
||||
|
|
|
@ -103,40 +103,39 @@ static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk,
|
|||
walk(userData, ob, &smd->auxTarget, IDWALK_CB_NOP);
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag flag)
|
||||
int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = derivedData;
|
||||
CustomDataMask dataMask = requiredDataMask(ob, md);
|
||||
bool forRender = (flag & MOD_APPLY_RENDER) != 0;
|
||||
CustomDataMask dataMask = requiredDataMask(ctx->object, md);
|
||||
bool forRender = (ctx->flag & MOD_APPLY_RENDER) != 0;
|
||||
|
||||
/* ensure we get a CDDM with applied vertex coords */
|
||||
if (dataMask) {
|
||||
dm = get_cddm(ob, NULL, dm, vertexCos, dependsOnNormals(md));
|
||||
dm = get_cddm(ctx->object, NULL, dm, vertexCos, dependsOnNormals(md));
|
||||
}
|
||||
|
||||
shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts, forRender);
|
||||
shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ctx->object, dm, vertexCos, numVerts, forRender);
|
||||
|
||||
if (dm != derivedData)
|
||||
dm->release(dm);
|
||||
}
|
||||
|
||||
static void deformVertsEM(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob,
|
||||
static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = derivedData;
|
||||
CustomDataMask dataMask = requiredDataMask(ob, md);
|
||||
CustomDataMask dataMask = requiredDataMask(ctx->object, md);
|
||||
|
||||
/* ensure we get a CDDM with applied vertex coords */
|
||||
if (dataMask) {
|
||||
dm = get_cddm(ob, editData, dm, vertexCos, dependsOnNormals(md));
|
||||
dm = get_cddm(ctx->object, editData, dm, vertexCos, dependsOnNormals(md));
|
||||
}
|
||||
|
||||
shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts, false);
|
||||
shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ctx->object, dm, vertexCos, numVerts, false);
|
||||
|
||||
if (dm != derivedData)
|
||||
dm->release(dm);
|
||||
|
|
|
@ -384,22 +384,21 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
}
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, struct Mesh *mesh,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct Mesh *mesh,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int numVerts)
|
||||
{
|
||||
SimpleDeformModifier_do((SimpleDeformModifierData *)md, ob, mesh, vertexCos, numVerts);
|
||||
SimpleDeformModifier_do((SimpleDeformModifierData *)md, ctx->object, mesh, vertexCos, numVerts);
|
||||
}
|
||||
|
||||
static void deformVertsEM(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, struct BMEditMesh *UNUSED(editData),
|
||||
static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
struct Mesh *mesh,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts)
|
||||
{
|
||||
SimpleDeformModifier_do((SimpleDeformModifierData *)md, ob, mesh, vertexCos, numVerts);
|
||||
SimpleDeformModifier_do((SimpleDeformModifierData *)md, ctx->object, mesh, vertexCos, numVerts);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1917,10 +1917,8 @@ static void copyData(ModifierData *md, ModifierData *target)
|
|||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md,
|
||||
struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *UNUSED(ob),
|
||||
DerivedMesh *dm,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
const ModifierEvalContext *UNUSED(ctx),
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
DerivedMesh *result;
|
||||
|
||||
|
|
|
@ -102,16 +102,15 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
|||
return dataMask;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, Depsgraph *depsgraph,
|
||||
Object *ob, DerivedMesh *dm,
|
||||
ModifierApplyFlag flag)
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
SmokeModifierData *smd = (SmokeModifierData *) md;
|
||||
|
||||
if (flag & MOD_APPLY_ORCO)
|
||||
if (ctx->flag & MOD_APPLY_ORCO)
|
||||
return dm;
|
||||
|
||||
return smokeModifier_do(smd, depsgraph, md->scene, ob, dm);
|
||||
return smokeModifier_do(smd, ctx->depsgraph, md->scene, ctx->object, dm);
|
||||
}
|
||||
|
||||
static bool dependsOnTime(ModifierData *UNUSED(md))
|
||||
|
|
|
@ -215,12 +215,12 @@ static void smoothModifier_do(
|
|||
MEM_freeN(uctmp);
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
|
||||
DerivedMesh *dm = get_dm(ctx->object, NULL, derivedData, NULL, false, false);
|
||||
|
||||
smoothModifier_do((SmoothModifierData *)md, ob, dm,
|
||||
smoothModifier_do((SmoothModifierData *)md, ctx->object, dm,
|
||||
vertexCos, numVerts);
|
||||
|
||||
if (dm != derivedData)
|
||||
|
@ -228,12 +228,12 @@ static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), O
|
|||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, struct BMEditMesh *editData,
|
||||
ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
|
||||
DerivedMesh *dm = get_dm(ctx->object, editData, derivedData, NULL, false, false);
|
||||
|
||||
smoothModifier_do((SmoothModifierData *)md, ob, dm,
|
||||
smoothModifier_do((SmoothModifierData *)md, ctx->object, dm,
|
||||
vertexCos, numVerts);
|
||||
|
||||
if (dm != derivedData)
|
||||
|
|
|
@ -49,13 +49,12 @@
|
|||
|
||||
#include "MOD_modifiertypes.h"
|
||||
|
||||
static void deformVerts(ModifierData *md, Depsgraph *depsgraph, Object *ob,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *UNUSED(derivedData),
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int numVerts)
|
||||
{
|
||||
sbObjectStep(depsgraph, md->scene, ob, (float)md->scene->r.cfra, vertexCos, numVerts);
|
||||
sbObjectStep(ctx->depsgraph, md->scene, ctx->object, (float)md->scene->r.cfra, vertexCos, numVerts);
|
||||
}
|
||||
|
||||
static bool dependsOnTime(ModifierData *UNUSED(md))
|
||||
|
|
|
@ -205,9 +205,8 @@ BLI_INLINE void madd_v3v3short_fl(float r[3], const short a[3], const float f)
|
|||
}
|
||||
|
||||
static DerivedMesh *applyModifier(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *dm,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
DerivedMesh *result;
|
||||
const SolidifyModifierData *smd = (SolidifyModifierData *) md;
|
||||
|
@ -223,7 +222,7 @@ static DerivedMesh *applyModifier(
|
|||
unsigned int newLoops = 0, newFaces = 0, newEdges = 0, newVerts = 0, rimVerts = 0;
|
||||
|
||||
/* only use material offsets if we have 2 or more materials */
|
||||
const short mat_nr_max = ob->totcol > 1 ? ob->totcol - 1 : 0;
|
||||
const short mat_nr_max = ctx->object->totcol > 1 ? ctx->object->totcol - 1 : 0;
|
||||
const short mat_ofs = mat_nr_max ? smd->mat_ofs : 0;
|
||||
const short mat_ofs_rim = mat_nr_max ? smd->mat_ofs_rim : 0;
|
||||
|
||||
|
@ -261,7 +260,7 @@ static DerivedMesh *applyModifier(
|
|||
/* array size is doubled in case of using a shell */
|
||||
const unsigned int stride = do_shell ? 2 : 1;
|
||||
|
||||
modifier_get_vgroup(ob, dm, smd->defgrp_name, &dvert, &defgrp_index);
|
||||
modifier_get_vgroup(ctx->object, dm, smd->defgrp_name, &dvert, &defgrp_index);
|
||||
|
||||
orig_mvert = dm->getVertArray(dm);
|
||||
orig_medge = dm->getEdgeArray(dm);
|
||||
|
|
|
@ -98,18 +98,17 @@ static bool isDisabled(ModifierData *md, int useRenderParams)
|
|||
return get_render_subsurf_level(&md->scene->r, levels, useRenderParams != 0) == 0;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, Depsgraph *depsgraph,
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
ModifierApplyFlag flag)
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
SubsurfModifierData *smd = (SubsurfModifierData *) md;
|
||||
SubsurfFlags subsurf_flags = 0;
|
||||
DerivedMesh *result;
|
||||
const bool useRenderParams = (flag & MOD_APPLY_RENDER) != 0;
|
||||
const bool isFinalCalc = (flag & MOD_APPLY_USECACHE) != 0;
|
||||
const bool useRenderParams = (ctx->flag & MOD_APPLY_RENDER) != 0;
|
||||
const bool isFinalCalc = (ctx->flag & MOD_APPLY_USECACHE) != 0;
|
||||
|
||||
#ifdef WITH_OPENSUBDIV
|
||||
const bool allow_gpu = (flag & MOD_APPLY_ALLOW_GPU) != 0;
|
||||
const bool allow_gpu = (ctx->flag & MOD_APPLY_ALLOW_GPU) != 0;
|
||||
#endif
|
||||
bool do_cddm_convert = useRenderParams || !isFinalCalc;
|
||||
|
||||
|
@ -117,7 +116,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Depsgraph *depsgraph,
|
|||
subsurf_flags |= SUBSURF_USE_RENDER_PARAMS;
|
||||
if (isFinalCalc)
|
||||
subsurf_flags |= SUBSURF_IS_FINAL_CALC;
|
||||
if (ob->mode & OB_MODE_EDIT)
|
||||
if (ctx->object->mode & OB_MODE_EDIT)
|
||||
subsurf_flags |= SUBSURF_IN_EDIT_MODE;
|
||||
|
||||
#ifdef WITH_OPENSUBDIV
|
||||
|
@ -132,10 +131,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Depsgraph *depsgraph,
|
|||
if (U.opensubdiv_compute_type == USER_OPENSUBDIV_COMPUTE_NONE) {
|
||||
modifier_setError(md, "OpenSubdiv is disabled in User Preferences");
|
||||
}
|
||||
else if ((ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) != 0) {
|
||||
else if ((ctx->object->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) != 0) {
|
||||
modifier_setError(md, "OpenSubdiv is not supported in paint modes");
|
||||
}
|
||||
else if ((DEG_get_eval_flags_for_id(depsgraph, &ob->id) & DAG_EVAL_NEED_CPU) == 0) {
|
||||
else if ((DEG_get_eval_flags_for_id(ctx->depsgraph, &ctx->object->id) & DAG_EVAL_NEED_CPU) == 0) {
|
||||
subsurf_flags |= SUBSURF_USE_GPU_BACKEND;
|
||||
do_cddm_convert = false;
|
||||
}
|
||||
|
@ -156,24 +155,22 @@ static DerivedMesh *applyModifier(ModifierData *md, Depsgraph *depsgraph,
|
|||
|
||||
#ifndef WITH_OPESUBDIV
|
||||
(void) do_cddm_convert;
|
||||
UNUSED_VARS(depsgraph);
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(
|
||||
ModifierData *md, Depsgraph *UNUSED(depsgraph),
|
||||
Object *UNUSED(ob), struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData,
|
||||
ModifierApplyFlag flag)
|
||||
ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
SubsurfModifierData *smd = (SubsurfModifierData *) md;
|
||||
DerivedMesh *result;
|
||||
/* 'orco' using editmode flags would cause cache to be used twice in editbmesh_calc_modifiers */
|
||||
SubsurfFlags ss_flags = (flag & MOD_APPLY_ORCO) ? 0 : (SUBSURF_FOR_EDIT_MODE | SUBSURF_IN_EDIT_MODE);
|
||||
SubsurfFlags ss_flags = (ctx->flag & MOD_APPLY_ORCO) ? 0 : (SUBSURF_FOR_EDIT_MODE | SUBSURF_IN_EDIT_MODE);
|
||||
#ifdef WITH_OPENSUBDIV
|
||||
const bool allow_gpu = (flag & MOD_APPLY_ALLOW_GPU) != 0;
|
||||
const bool allow_gpu = (ctx->flag & MOD_APPLY_ALLOW_GPU) != 0;
|
||||
if (md->next == NULL && allow_gpu && smd->use_opensubdiv) {
|
||||
modifier_setError(md, "OpenSubdiv is not supported in edit mode");
|
||||
}
|
||||
|
|
|
@ -85,11 +85,10 @@ static bool dependsOnTime(ModifierData *UNUSED(md))
|
|||
return true;
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int UNUSED(numVerts),
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int UNUSED(numVerts))
|
||||
{
|
||||
SurfaceModifierData *surmd = (SurfaceModifierData *) md;
|
||||
|
||||
|
@ -98,9 +97,9 @@ static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
|||
|
||||
/* if possible use/create DerivedMesh */
|
||||
if (derivedData) surmd->dm = CDDM_copy(derivedData);
|
||||
else surmd->dm = get_dm(ob, NULL, NULL, NULL, false, false);
|
||||
else surmd->dm = get_dm(ctx->object, NULL, NULL, NULL, false, false);
|
||||
|
||||
if (!ob->pd) {
|
||||
if (!ctx->object->pd) {
|
||||
printf("SurfaceModifier deformVerts: Should not happen!\n");
|
||||
return;
|
||||
}
|
||||
|
@ -141,7 +140,7 @@ static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
|||
/* convert to global coordinates and calculate velocity */
|
||||
for (i = 0, x = surmd->x, v = surmd->v; i < numverts; i++, x++, v++) {
|
||||
vec = CDDM_get_vert(surmd->dm, i)->co;
|
||||
mul_m4_v3(ob->obmat, vec);
|
||||
mul_m4_v3(ctx->object->obmat, vec);
|
||||
|
||||
if (init)
|
||||
v->co[0] = v->co[1] = v->co[2] = 0.0f;
|
||||
|
|
|
@ -1181,21 +1181,20 @@ static void surfacedeformModifier_do(
|
|||
}
|
||||
|
||||
static void deformVerts(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *UNUSED(derivedData),
|
||||
float (*vertexCos)[3], int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
{
|
||||
surfacedeformModifier_do(md, vertexCos, numVerts, ob);
|
||||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, struct BMEditMesh *UNUSED(editData),
|
||||
ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *UNUSED(derivedData),
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
surfacedeformModifier_do(md, vertexCos, numVerts, ob);
|
||||
surfacedeformModifier_do(md, vertexCos, numVerts, ctx->object);
|
||||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *UNUSED(derivedData),
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
surfacedeformModifier_do(md, vertexCos, numVerts, ctx->object);
|
||||
}
|
||||
|
||||
static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
|
||||
|
|
|
@ -85,10 +85,8 @@ static void copyData(ModifierData *md, ModifierData *target)
|
|||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md,
|
||||
struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *UNUSED(ob),
|
||||
DerivedMesh *dm,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
const ModifierEvalContext *UNUSED(ctx),
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
TriangulateModifierData *tmd = (TriangulateModifierData *)md;
|
||||
DerivedMesh *result;
|
||||
|
|
|
@ -316,14 +316,13 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd,
|
|||
return dm;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
DerivedMesh *result;
|
||||
UVProjectModifierData *umd = (UVProjectModifierData *) md;
|
||||
|
||||
result = uvprojectModifier_do(umd, ob, derivedData);
|
||||
result = uvprojectModifier_do(umd, ctx->object, derivedData);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -146,9 +146,8 @@ static void uv_warp_compute(
|
|||
}
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob, DerivedMesh *dm,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
UVWarpModifierData *umd = (UVWarpModifierData *) md;
|
||||
int numPolys, numLoops;
|
||||
|
@ -206,7 +205,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
mloop = dm->getLoopArray(dm);
|
||||
/* 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(ob, dm, umd->vgroup_name, &dvert, &defgrp_index);
|
||||
modifier_get_vgroup(ctx->object, dm, umd->vgroup_name, &dvert, &defgrp_index);
|
||||
|
||||
UVWarpData data = {.mpoly = mpoly, .mloop = mloop, .mloopuv = mloopuv,
|
||||
.dvert = dvert, .defgrp_index = defgrp_index,
|
||||
|
|
|
@ -309,24 +309,24 @@ static int warp_needs_dm(WarpModifierData *wmd)
|
|||
return wmd->texture || wmd->defgrp_name[0];
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx, DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = NULL;
|
||||
int use_dm = warp_needs_dm((WarpModifierData *)md);
|
||||
|
||||
if (use_dm) {
|
||||
dm = get_cddm(ob, NULL, derivedData, vertexCos, false);
|
||||
dm = get_cddm(ctx->object, NULL, derivedData, vertexCos, false);
|
||||
}
|
||||
|
||||
warpModifier_do((WarpModifierData *)md, ob, dm, vertexCos, numVerts);
|
||||
warpModifier_do((WarpModifierData *)md, ctx->object, dm, vertexCos, numVerts);
|
||||
|
||||
if (use_dm) {
|
||||
if (dm != derivedData) dm->release(dm);
|
||||
}
|
||||
}
|
||||
|
||||
static void deformVertsEM(ModifierData *md, struct Depsgraph *depsgraph, Object *ob, struct BMEditMesh *em,
|
||||
static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = derivedData;
|
||||
|
@ -337,7 +337,7 @@ static void deformVertsEM(ModifierData *md, struct Depsgraph *depsgraph, Object
|
|||
dm = CDDM_from_editbmesh(em, false, false);
|
||||
}
|
||||
|
||||
deformVerts(md, depsgraph, ob, dm, vertexCos, numVerts, 0);
|
||||
deformVerts(md, ctx, dm, vertexCos, numVerts);
|
||||
|
||||
if (use_dm) {
|
||||
if (!derivedData) dm->release(dm);
|
||||
|
|
|
@ -302,40 +302,39 @@ static void waveModifier_do(WaveModifierData *md,
|
|||
if (wmd->texture) MEM_freeN(tex_co);
|
||||
}
|
||||
|
||||
static void deformVerts(ModifierData *md, struct Depsgraph *depsgraph,
|
||||
Object *ob, DerivedMesh *derivedData,
|
||||
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData,
|
||||
float (*vertexCos)[3],
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = derivedData;
|
||||
WaveModifierData *wmd = (WaveModifierData *)md;
|
||||
|
||||
if (wmd->flag & MOD_WAVE_NORM)
|
||||
dm = get_cddm(ob, NULL, dm, vertexCos, false);
|
||||
dm = get_cddm(ctx->object, NULL, dm, vertexCos, false);
|
||||
else if (wmd->texture || wmd->defgrp_name[0])
|
||||
dm = get_dm(ob, NULL, dm, NULL, false, false);
|
||||
dm = get_dm(ctx->object, NULL, dm, NULL, false, false);
|
||||
|
||||
waveModifier_do(wmd, depsgraph, ob, dm, vertexCos, numVerts);
|
||||
waveModifier_do(wmd, ctx->depsgraph, ctx->object, dm, vertexCos, numVerts);
|
||||
|
||||
if (dm != derivedData)
|
||||
dm->release(dm);
|
||||
}
|
||||
|
||||
static void deformVertsEM(
|
||||
ModifierData *md, struct Depsgraph *depsgraph,
|
||||
Object *ob, struct BMEditMesh *editData,
|
||||
ModifierData *md, const ModifierEvalContext *ctx,
|
||||
struct BMEditMesh *editData,
|
||||
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = derivedData;
|
||||
WaveModifierData *wmd = (WaveModifierData *)md;
|
||||
|
||||
if (wmd->flag & MOD_WAVE_NORM)
|
||||
dm = get_cddm(ob, editData, dm, vertexCos, false);
|
||||
dm = get_cddm(ctx->object, editData, dm, vertexCos, false);
|
||||
else if (wmd->texture || wmd->defgrp_name[0])
|
||||
dm = get_dm(ob, editData, dm, NULL, false, false);
|
||||
dm = get_dm(ctx->object, editData, dm, NULL, false, false);
|
||||
|
||||
waveModifier_do(wmd, depsgraph, ob, dm, vertexCos, numVerts);
|
||||
waveModifier_do(wmd, ctx->depsgraph, ctx->object, dm, vertexCos, numVerts);
|
||||
|
||||
if (dm != derivedData)
|
||||
dm->release(dm);
|
||||
|
|
|
@ -155,10 +155,8 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
|
|||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md,
|
||||
struct Depsgraph *UNUSED(depsgraph),
|
||||
Object *ob,
|
||||
DerivedMesh *derivedData,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
WeightVGEditModifierData *wmd = (WeightVGEditModifierData *) md;
|
||||
DerivedMesh *dm = derivedData;
|
||||
|
@ -183,11 +181,11 @@ static DerivedMesh *applyModifier(ModifierData *md,
|
|||
/* Check if we can just return the original mesh.
|
||||
* Must have verts and therefore verts assigned to vgroups to do anything useful!
|
||||
*/
|
||||
if ((numVerts == 0) || BLI_listbase_is_empty(&ob->defbase))
|
||||
if ((numVerts == 0) || BLI_listbase_is_empty(&ctx->object->defbase))
|
||||
return dm;
|
||||
|
||||
/* Get vgroup idx from its name. */
|
||||
defgrp_index = defgroup_name_index(ob, wmd->defgrp_name);
|
||||
defgrp_index = defgroup_name_index(ctx->object, wmd->defgrp_name);
|
||||
if (defgrp_index == -1)
|
||||
return dm;
|
||||
|
||||
|
@ -223,7 +221,7 @@ static DerivedMesh *applyModifier(ModifierData *md,
|
|||
RNG *rng = NULL;
|
||||
|
||||
if (wmd->falloff_type == MOD_WVG_MAPPING_RANDOM)
|
||||
rng = BLI_rng_new_srandom(BLI_ghashutil_strhash(ob->id.name + 2));
|
||||
rng = BLI_rng_new_srandom(BLI_ghashutil_strhash(ctx->object->id.name + 2));
|
||||
|
||||
weightvg_do_map(numVerts, new_w, wmd->falloff_type, wmd->cmap_curve, rng);
|
||||
|
||||
|
@ -232,7 +230,7 @@ static DerivedMesh *applyModifier(ModifierData *md,
|
|||
}
|
||||
|
||||
/* Do masking. */
|
||||
weightvg_do_mask(numVerts, NULL, org_w, new_w, ob, dm, wmd->mask_constant,
|
||||
weightvg_do_mask(numVerts, NULL, org_w, new_w, ctx->object, dm, wmd->mask_constant,
|
||||
wmd->mask_defgrp_name, wmd->modifier.scene, wmd->mask_texture,
|
||||
wmd->mask_tex_use_channel, wmd->mask_tex_mapping,
|
||||
wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name);
|
||||
|
|
|
@ -201,8 +201,8 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
|
|||
return (wmd->defgrp_name_a[0] == '\0');
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob,
|
||||
DerivedMesh *derivedData, ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
WeightVGMixModifierData *wmd = (WeightVGMixModifierData *) md;
|
||||
DerivedMesh *dm = derivedData;
|
||||
|
@ -226,16 +226,16 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
/* Check if we can just return the original mesh.
|
||||
* Must have verts and therefore verts assigned to vgroups to do anything useful!
|
||||
*/
|
||||
if ((numVerts == 0) || BLI_listbase_is_empty(&ob->defbase))
|
||||
if ((numVerts == 0) || BLI_listbase_is_empty(&ctx->object->defbase))
|
||||
return dm;
|
||||
|
||||
/* Get vgroup idx from its name. */
|
||||
defgrp_index = defgroup_name_index(ob, wmd->defgrp_name_a);
|
||||
defgrp_index = defgroup_name_index(ctx->object, wmd->defgrp_name_a);
|
||||
if (defgrp_index == -1)
|
||||
return dm;
|
||||
/* Get second vgroup idx from its name, if given. */
|
||||
if (wmd->defgrp_name_b[0] != (char)0) {
|
||||
defgrp_index_other = defgroup_name_index(ob, wmd->defgrp_name_b);
|
||||
defgrp_index_other = defgroup_name_index(ctx->object, wmd->defgrp_name_b);
|
||||
if (defgrp_index_other == -1)
|
||||
return dm;
|
||||
}
|
||||
|
@ -352,7 +352,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
}
|
||||
|
||||
/* Do masking. */
|
||||
weightvg_do_mask(numIdx, indices, org_w, new_w, ob, dm, wmd->mask_constant,
|
||||
weightvg_do_mask(numIdx, indices, org_w, new_w, ctx->object, dm, wmd->mask_constant,
|
||||
wmd->mask_defgrp_name, wmd->modifier.scene, wmd->mask_texture,
|
||||
wmd->mask_tex_use_channel, wmd->mask_tex_mapping,
|
||||
wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name);
|
||||
|
|
|
@ -368,8 +368,8 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
|
|||
return (wmd->proximity_ob_target == NULL);
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob,
|
||||
DerivedMesh *derivedData, ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *) md;
|
||||
DerivedMesh *dm = derivedData;
|
||||
|
@ -377,6 +377,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
MDeformWeight **dw, **tdw;
|
||||
int numVerts;
|
||||
float (*v_cos)[3] = NULL; /* The vertices coordinates. */
|
||||
Object *ob = ctx->object;
|
||||
Object *obr = NULL; /* Our target object. */
|
||||
int defgrp_index;
|
||||
float *tw = NULL;
|
||||
|
@ -400,7 +401,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(dep
|
|||
/* Check if we can just return the original mesh.
|
||||
* Must have verts and therefore verts assigned to vgroups to do anything useful!
|
||||
*/
|
||||
if ((numVerts == 0) || BLI_listbase_is_empty(&ob->defbase))
|
||||
if ((numVerts == 0) || BLI_listbase_is_empty(&ctx->object->defbase))
|
||||
return dm;
|
||||
|
||||
/* Get our target object. */
|
||||
|
|
|
@ -102,10 +102,10 @@ static DerivedMesh *WireframeModifier_do(WireframeModifierData *wmd, Object *ob,
|
|||
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, struct Depsgraph *UNUSED(depsgraph), Object *ob,
|
||||
DerivedMesh *dm, ModifierApplyFlag UNUSED(flag))
|
||||
static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
return WireframeModifier_do((WireframeModifierData *)md, ob, dm);
|
||||
return WireframeModifier_do((WireframeModifierData *)md, ctx->object, dm);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue