Disable multithreaded weight paint when mirroring is enabled.

Mirroring writes to the mirror vertex within the direct vertex
draw function, which violates assumptions required for processing
vertices in parallel.
This commit is contained in:
Alexander Gavrilov 2017-10-02 17:33:51 +03:00
parent 64afba0244
commit 88dd45e1e1
1 changed files with 7 additions and 4 deletions

View File

@ -1841,27 +1841,30 @@ static void wpaint_paint_leaves(
.sd = sd, .ob = ob, .brush = brush, .nodes = nodes, .vp = vp, .wpd = wpd, .wpi = wpi, .me = me, .C = C,
};
/* current mirroring code cannot be run in parallel */
bool use_threading = !(me->editflag & ME_EDIT_MIRROR_X);
switch (brush->vertexpaint_tool) {
case PAINT_BLEND_AVERAGE:
calculate_average_weight(&data, nodes, totnode);
BLI_task_parallel_range_ex(
0, totnode, &data, NULL, 0,
do_wpaint_brush_draw_task_cb_ex, true, false);
do_wpaint_brush_draw_task_cb_ex, use_threading, false);
break;
case PAINT_BLEND_SMEAR:
BLI_task_parallel_range_ex(
0, totnode, &data, NULL, 0,
do_wpaint_brush_smear_task_cb_ex, true, false);
do_wpaint_brush_smear_task_cb_ex, use_threading, false);
break;
case PAINT_BLEND_BLUR:
BLI_task_parallel_range_ex(
0, totnode, &data, NULL, 0,
do_wpaint_brush_blur_task_cb_ex, true, false);
do_wpaint_brush_blur_task_cb_ex, use_threading, false);
break;
default:
BLI_task_parallel_range_ex(
0, totnode, &data, NULL, 0,
do_wpaint_brush_draw_task_cb_ex, true, false);
do_wpaint_brush_draw_task_cb_ex, use_threading, false);
break;
}
}