Commit: cd62b50b6c3234b966faa65389f01a880b658835 Author: Bastien Montagne Date: Sat May 21 16:09:35 2016 +0200 Branches: compositor-2016 https://developer.blender.org/rBcd62b50b6c3234b966faa65389f01a880b658835
Dynamicpaint: fix (unreported) missing progress bar in early baking stage. Nothing was shown in UI during pre-bake step, while it can take several minutes to complete with heavy geometry. =================================================================== M source/blender/blenkernel/BKE_dynamicpaint.h M source/blender/blenkernel/intern/dynamicpaint.c M source/blender/editors/physics/dynamicpaint_ops.c =================================================================== diff --git a/source/blender/blenkernel/BKE_dynamicpaint.h b/source/blender/blenkernel/BKE_dynamicpaint.h index 0025617..5abb53d 100644 --- a/source/blender/blenkernel/BKE_dynamicpaint.h +++ b/source/blender/blenkernel/BKE_dynamicpaint.h @@ -82,7 +82,7 @@ void dynamicPaint_resetPreview(struct DynamicPaintCanvasSettings *canvas); struct DynamicPaintSurface *get_activeSurface(struct DynamicPaintCanvasSettings *canvas); /* image sequence baking */ -int dynamicPaint_createUVSurface(struct Scene *scene, struct DynamicPaintSurface *surface); +int dynamicPaint_createUVSurface(struct Scene *scene, struct DynamicPaintSurface *surface, float *progress, short *do_update); int dynamicPaint_calculateFrame(struct DynamicPaintSurface *surface, struct Scene *scene, struct Object *cObject, int frame); void dynamicPaint_outputSurfaceImage(struct DynamicPaintSurface *surface, char *filename, short output_layer); diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index 2dc0388..d593ec7 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -2496,7 +2496,7 @@ static int dynamic_paint_find_neighbour_pixel( } } -int dynamicPaint_createUVSurface(Scene *scene, DynamicPaintSurface *surface) +int dynamicPaint_createUVSurface(Scene *scene, DynamicPaintSurface *surface, float *progress, short *do_update) { /* Antialias jitter point relative coords */ const int aa_samples = (surface->flags & MOD_DPAINT_ANTIALIAS) ? 5 : 1; @@ -2517,6 +2517,9 @@ int dynamicPaint_createUVSurface(Scene *scene, DynamicPaintSurface *surface) Bounds2D *faceBB = NULL; int *final_index; + *progress = 0.0f; + *do_update = true; + if (!dm) return setError(canvas, N_("Canvas mesh not updated")); if (surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ) @@ -2575,6 +2578,9 @@ int dynamicPaint_createUVSurface(Scene *scene, DynamicPaintSurface *surface) error = true; } + *progress = 0.01f; + *do_update = true; + if (!error) { for (int i = 0; i < tottri; i++) { copy_v2_v2(faceBB[i].min, mloopuv[mlooptri[i].tri[0]].uv); @@ -2585,6 +2591,9 @@ int dynamicPaint_createUVSurface(Scene *scene, DynamicPaintSurface *surface) } } + *progress = 0.02f; + *do_update = true; + /* Loop through every pixel and check if pixel is uv-mapped on a canvas face. */ DynamicPaintCreateUVSurfaceData data = { .surface = surface, .tempPoints = tempPoints, .tempWeights = tempWeights, @@ -2593,6 +2602,9 @@ int dynamicPaint_createUVSurface(Scene *scene, DynamicPaintSurface *surface) }; BLI_task_parallel_range(0, h, &data, dynamic_paint_create_uv_surface_direct_cb, h > 64 || tottri > 1000); + *progress = 0.04f; + *do_update = true; + /* * Now loop through every pixel that was left without index * and find if they have neighboring pixels that have an index. @@ -2602,6 +2614,9 @@ int dynamicPaint_createUVSurface(Scene *scene, DynamicPaintSurface *surface) data.active_points = &active_points; BLI_task_parallel_range(0, h, &data, dynamic_paint_create_uv_surface_neighbor_cb, h > 64); + *progress = 0.06f; + *do_update = true; + /* Generate surface adjacency data. */ { int cursor = 0; @@ -2660,6 +2675,9 @@ int dynamicPaint_createUVSurface(Scene *scene, DynamicPaintSurface *surface) } } + *progress = 0.08f; + *do_update = true; + /* Create final surface data without inactive points */ ImgSeqFormatData *f_data = MEM_callocN(sizeof(*f_data), "ImgSeqFormatData"); if (f_data) { @@ -2740,6 +2758,9 @@ int dynamicPaint_createUVSurface(Scene *scene, DynamicPaintSurface *surface) dynamicPaint_setInitialColor(scene, surface); } + *progress = 0.09f; + *do_update = true; + return (error == 0); } diff --git a/source/blender/editors/physics/dynamicpaint_ops.c b/source/blender/editors/physics/dynamicpaint_ops.c index a5d2d2c..3d7a458 100644 --- a/source/blender/editors/physics/dynamicpaint_ops.c +++ b/source/blender/editors/physics/dynamicpaint_ops.c @@ -350,6 +350,9 @@ static void dynamicPaint_bakeImageSequence(DynamicPaintBakeJob *job) return; } + /* Show progress bar. */ + *(job->do_update) = true; + /* Set frame to start point (also inits modifier data) */ frame = surface->start_frame; orig_frame = scene->r.cfra; @@ -357,14 +360,15 @@ static void dynamicPaint_bakeImageSequence(DynamicPaintBakeJob *job) ED_update_for_newframe(job->bmain, scene, 1); /* Init surface */ - if (!dynamicPaint_createUVSurface(scene, surface)) { + if (!dynamicPaint_createUVSurface(scene, surface, job->progress, job->do_update)) { job->success = 0; return; } /* Loop through selected frames */ for (frame = surface->start_frame; frame <= surface->end_frame; frame++) { - float progress = (frame - surface->start_frame) / (float)frames; + /* The first 10% are for createUVSurface... */ + const float progress = 0.1f + 0.9f * (frame - surface->start_frame) / (float)frames; surface->current_frame = frame; /* If user requested stop, quit baking */ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs