Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2018-05-30 12:34:08 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2018-05-30 13:04:06 +0300
commit72f4ac99c70b02e095cc9a71d501d6b1dc85ac3e (patch)
tree940c598d4efb2246eb7b523840e2b7337a59bc1b /source/blender/modifiers/intern/MOD_surfacedeform.c
parente55c1a9b5a089f3c688a0b47cba363cb0d6f92d0 (diff)
Cleanup/fix wrong modifiers targets handling in COW context.
Modifiers stack only get COW/evaluated IDs, so no need to go auery again DEG for those. Further more, now unified handling of EditBMesh case (was done on case-by-case basis in a few modifiers, not all for some reason). We are still missing the ability to get final and cage deformed meshes when in Edit mode though, this is to be defined/implemented in depsgraph.
Diffstat (limited to 'source/blender/modifiers/intern/MOD_surfacedeform.c')
-rw-r--r--source/blender/modifiers/intern/MOD_surfacedeform.c35
1 files changed, 5 insertions, 30 deletions
diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.c b/source/blender/modifiers/intern/MOD_surfacedeform.c
index f03ae73e2bb..c75f317e3bc 100644
--- a/source/blender/modifiers/intern/MOD_surfacedeform.c
+++ b/source/blender/modifiers/intern/MOD_surfacedeform.c
@@ -1041,33 +1041,6 @@ static bool surfacedeformBind(
return data.success == 1;
}
-static Mesh *surfacedeform_get_mesh(Depsgraph *depsgraph, SurfaceDeformModifierData *smd, bool *r_needsfree)
-{
- Mesh *mesh;
-
- /* Handle target mesh both in and out of edit mode */
- if (smd->target->mode & OB_MODE_EDIT) {
- BMEditMesh *em = BKE_editmesh_from_object(smd->target);
- mesh = BKE_bmesh_to_mesh_nomain(em->bm, &(struct BMeshToMeshParams){0});
- *r_needsfree = true;
- }
- else {
- ModifierEvalContext ctx = {
- .depsgraph = depsgraph,
- .flag = smd->modifier.mode & eModifierMode_Render ? MOD_APPLY_RENDER : 0,
- };
- mesh = BKE_modifier_get_evaluated_mesh_from_object(&ctx, smd->target);
- *r_needsfree = false;
- }
-
- if (!mesh) {
- mesh = get_mesh(smd->target, NULL, NULL, NULL, false, false);
- *r_needsfree = true;
- }
-
- return mesh;
-}
-
static void deformVert(
void *__restrict userdata,
const int index,
@@ -1127,7 +1100,7 @@ static void deformVert(
static void surfacedeformModifier_do(
ModifierData *md,
- const ModifierEvalContext *ctx,
+ const ModifierEvalContext *UNUSED(ctx),
float (*vertexCos)[3], unsigned int numverts, Object *ob)
{
SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
@@ -1141,7 +1114,7 @@ static void surfacedeformModifier_do(
return;
}
- target = surfacedeform_get_mesh(ctx->depsgraph, smd, &free_target);
+ target = BKE_modifier_get_evaluated_mesh_from_evaluated_object(smd->target, &free_target);
if (!target) {
modifier_setError(md, "No valid target mesh");
return;
@@ -1200,7 +1173,9 @@ static void surfacedeformModifier_do(
MEM_freeN(data.targetCos);
}
- if (free_target) BKE_id_free(NULL, target);
+ if (target != NULL && free_target) {
+ BKE_id_free(NULL, target);
+ }
}
static void deformVerts(