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:
-rw-r--r--source/blender/blenkernel/intern/dynamicpaint.c36
-rw-r--r--source/blender/modifiers/intern/MOD_dynamicpaint.c7
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) {