diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/dynamicpaint.c | 36 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_dynamicpaint.c | 7 |
2 files changed, 15 insertions, 28 deletions
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index 8c6fbe98000..ef5e5bb24a8 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -1216,11 +1216,9 @@ void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd, { /* Init modifier */ tpmd->type = pmd->type; - if (pmd->canvas) { - dynamicPaint_createType(tpmd, MOD_DYNAMICPAINT_TYPE_CANVAS, NULL); - } - if (pmd->brush) { - dynamicPaint_createType(tpmd, MOD_DYNAMICPAINT_TYPE_BRUSH, NULL); + if ((pmd->canvas && pmd->type == MOD_DYNAMICPAINT_TYPE_CANVAS) || + (pmd->brush && pmd->type == MOD_DYNAMICPAINT_TYPE_BRUSH)) { + dynamicPaint_createType(tpmd, pmd->type, NULL); } /* Copy data */ @@ -1930,7 +1928,8 @@ static Mesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, Object * { Mesh *result = BKE_mesh_copy_for_eval(mesh, false); - if (pmd->canvas && !(pmd->canvas->flags & MOD_DPAINT_BAKING)) { + if (pmd->canvas && !(pmd->canvas->flags & MOD_DPAINT_BAKING) && + pmd->type == MOD_DYNAMICPAINT_TYPE_CANVAS) { DynamicPaintSurface *surface; bool update_normals = false; @@ -2070,7 +2069,7 @@ static Mesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, Object * } } /* make a copy of mesh to use as brush data */ - if (pmd->brush) { + else if (pmd->brush && pmd->type == MOD_DYNAMICPAINT_TYPE_BRUSH) { DynamicPaintRuntime *runtime_data = dynamicPaint_Modifier_runtime_ensure(pmd); if (runtime_data->brush_mesh != NULL) { BKE_id_free(NULL, runtime_data->brush_mesh); @@ -2198,24 +2197,11 @@ Mesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Object *ob, Mesh *mesh) { - if (pmd->canvas) { - Mesh *ret; - - /* Update canvas data for a new frame */ - dynamicPaint_frameUpdate(pmd, depsgraph, scene, ob, mesh); + /* Update canvas data for a new frame */ + dynamicPaint_frameUpdate(pmd, depsgraph, scene, ob, mesh); - /* Return output mesh */ - ret = dynamicPaint_Modifier_apply(pmd, ob, mesh); - - return ret; - } - else { - /* Update canvas data for a new frame */ - dynamicPaint_frameUpdate(pmd, depsgraph, scene, ob, mesh); - - /* Return output mesh */ - return dynamicPaint_Modifier_apply(pmd, ob, mesh); - } + /* Return output mesh */ + return dynamicPaint_Modifier_apply(pmd, ob, mesh); } /* -------------------------------------------------------------------- */ @@ -6252,7 +6238,7 @@ static int dynamicPaint_doStep(Depsgraph *depsgraph, if (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render)) { DynamicPaintModifierData *pmd2 = (DynamicPaintModifierData *)md; /* make sure we're dealing with a brush */ - if (pmd2->brush) { + if (pmd2->brush && pmd2->type == MOD_DYNAMICPAINT_TYPE_BRUSH) { DynamicPaintBrushSettings *brush = pmd2->brush; /* calculate brush speed vectors if required */ diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c index ce488a224aa..26ee75140a6 100644 --- a/source/blender/modifiers/intern/MOD_dynamicpaint.c +++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c @@ -112,16 +112,17 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes return mesh; } -static bool is_brush_cb(Object *UNUSED(ob), ModifierData *pmd) +static bool is_brush_cb(Object *UNUSED(ob), ModifierData *md) { - return ((DynamicPaintModifierData *)pmd)->brush != NULL; + DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md; + return (pmd->brush != NULL && pmd->type == MOD_DYNAMICPAINT_TYPE_BRUSH); } static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx) { DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md; /* Add relation from canvases to all brush objects. */ - if (pmd->canvas != NULL) { + if (pmd->canvas != NULL && pmd->type == MOD_DYNAMICPAINT_TYPE_CANVAS) { for (DynamicPaintSurface *surface = pmd->canvas->surfaces.first; surface; surface = surface->next) { if (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) { |