[Bf-blender-cvs] [cdf68af12e6] master: Fix T64072: DynamicPaint: Bake failed: Canvas mesh not updated
Sergey Sharybin
noreply at git.blender.org
Thu May 2 17:48:12 CEST 2019
Commit: cdf68af12e6348782918c968eb0741d9cd135a6d
Author: Sergey Sharybin
Date: Thu May 2 17:46:08 2019 +0200
Branches: master
https://developer.blender.org/rBcdf68af12e6348782918c968eb0741d9cd135a6d
Fix T64072: DynamicPaint: Bake failed: Canvas mesh not updated
Baking is to happen form within an evaluated scene.
===================================================================
M source/blender/editors/physics/dynamicpaint_ops.c
===================================================================
diff --git a/source/blender/editors/physics/dynamicpaint_ops.c b/source/blender/editors/physics/dynamicpaint_ops.c
index cb8fe262730..40b7a245f69 100644
--- a/source/blender/editors/physics/dynamicpaint_ops.c
+++ b/source/blender/editors/physics/dynamicpaint_ops.c
@@ -47,6 +47,7 @@
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_query.h"
#include "ED_mesh.h"
#include "ED_screen.h"
@@ -360,6 +361,7 @@ static void dynamicPaint_bakeImageSequence(DynamicPaintBakeJob *job)
DynamicPaintSurface *surface = job->surface;
Object *cObject = job->ob;
DynamicPaintCanvasSettings *canvas = surface->canvas;
+ Scene *input_scene = DEG_get_input_scene(job->depsgraph);
Scene *scene = job->scene;
int frame = 1, orig_frame;
int frames;
@@ -375,8 +377,8 @@ static void dynamicPaint_bakeImageSequence(DynamicPaintBakeJob *job)
/* Set frame to start point (also inits modifier data) */
frame = surface->start_frame;
- orig_frame = scene->r.cfra;
- scene->r.cfra = (int)frame;
+ orig_frame = input_scene->r.cfra;
+ input_scene->r.cfra = (int)frame;
ED_update_for_newframe(job->bmain, job->depsgraph);
/* Init surface */
@@ -402,7 +404,7 @@ static void dynamicPaint_bakeImageSequence(DynamicPaintBakeJob *job)
*(job->progress) = progress;
/* calculate a frame */
- scene->r.cfra = (int)frame;
+ input_scene->r.cfra = (int)frame;
ED_update_for_newframe(job->bmain, job->depsgraph);
if (!dynamicPaint_calculateFrame(surface, job->depsgraph, scene, cObject, frame)) {
job->success = 0;
@@ -438,7 +440,8 @@ static void dynamicPaint_bakeImageSequence(DynamicPaintBakeJob *job)
}
}
- scene->r.cfra = orig_frame;
+ input_scene->r.cfra = orig_frame;
+ ED_update_for_newframe(job->bmain, job->depsgraph);
}
static void dpaint_bake_startjob(void *customdata, short *stop, short *do_update, float *progress)
@@ -470,25 +473,26 @@ static void dpaint_bake_startjob(void *customdata, short *stop, short *do_update
*/
static int dynamicpaint_bake_exec(struct bContext *C, struct wmOperator *op)
{
- DynamicPaintModifierData *pmd = NULL;
- DynamicPaintCanvasSettings *canvas;
- Object *ob = ED_object_context(C);
- Scene *scene = CTX_data_scene(C);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ Object *ob_ = ED_object_context(C);
+ Object *object_eval = DEG_get_evaluated_object(depsgraph, ob_);
+ Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
DynamicPaintSurface *surface;
/*
* Get modifier data
*/
- pmd = (DynamicPaintModifierData *)modifiers_findByType(ob, eModifierType_DynamicPaint);
- if (!pmd) {
+ DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)modifiers_findByType(
+ object_eval, eModifierType_DynamicPaint);
+ if (pmd == NULL) {
BKE_report(op->reports, RPT_ERROR, "Bake failed: no Dynamic Paint modifier found");
return OPERATOR_CANCELLED;
}
/* Make sure we're dealing with a canvas */
- canvas = pmd->canvas;
- if (!canvas) {
+ DynamicPaintCanvasSettings *canvas = pmd->canvas;
+ if (canvas == NULL) {
BKE_report(op->reports, RPT_ERROR, "Bake failed: invalid canvas");
return OPERATOR_CANCELLED;
}
@@ -500,15 +504,15 @@ static int dynamicpaint_bake_exec(struct bContext *C, struct wmOperator *op)
DynamicPaintBakeJob *job = MEM_mallocN(sizeof(DynamicPaintBakeJob), "DynamicPaintBakeJob");
job->bmain = CTX_data_main(C);
- job->scene = scene;
+ job->scene = scene_eval;
job->depsgraph = CTX_data_depsgraph(C);
- job->ob = ob;
+ job->ob = object_eval;
job->canvas = canvas;
job->surface = surface;
wmJob *wm_job = WM_jobs_get(CTX_wm_manager(C),
CTX_wm_window(C),
- scene,
+ CTX_data_scene(C),
"Dynamic Paint Bake",
WM_JOB_PROGRESS,
WM_JOB_TYPE_DPAINT_BAKE);
More information about the Bf-blender-cvs
mailing list