diff options
Diffstat (limited to 'source/blender/editors/sculpt_paint/sculpt_paint_color.c')
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt_paint_color.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_color.c b/source/blender/editors/sculpt_paint/sculpt_paint_color.c index e717c15d6dc..7946affdec5 100644 --- a/source/blender/editors/sculpt_paint/sculpt_paint_color.c +++ b/source/blender/editors/sculpt_paint/sculpt_paint_color.c @@ -70,10 +70,17 @@ static void do_color_smooth_task_cb_exec(void *__restrict userdata, ss, &test, data->brush->falloff_shape); const int thread_id = BLI_task_parallel_thread_id(tls); + AutomaskingNodeData automask_data; + SCULPT_automasking_node_begin( + data->ob, ss, ss->cache->automasking, &automask_data, data->nodes[n]); + BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { if (!sculpt_brush_test_sq_fn(&test, vd.co)) { continue; } + + SCULPT_automasking_node_update(ss, &automask_data, &vd); + const float fade = bstrength * SCULPT_brush_strength_factor(ss, brush, vd.co, @@ -82,7 +89,8 @@ static void do_color_smooth_task_cb_exec(void *__restrict userdata, vd.fno, vd.mask ? *vd.mask : 0.0f, vd.vertex, - thread_id); + thread_id, + &automask_data); float smooth_color[4]; SCULPT_neighbor_color_average(ss, smooth_color, vd.vertex); @@ -125,6 +133,10 @@ static void do_paint_brush_task_cb_ex(void *__restrict userdata, IMB_colormanagement_srgb_to_scene_linear_v3(brush_color, brush_color); + AutomaskingNodeData automask_data; + SCULPT_automasking_node_begin( + data->ob, ss, ss->cache->automasking, &automask_data, data->nodes[n]); + if (brush->flag & BRUSH_USE_GRADIENT) { switch (brush->gradient_stroke_mode) { case BRUSH_GRADIENT_PRESSURE: @@ -161,6 +173,8 @@ static void do_paint_brush_task_cb_ex(void *__restrict userdata, continue; } + SCULPT_automasking_node_update(ss, &automask_data, &vd); + float fade = bstrength * SCULPT_brush_strength_factor(ss, brush, vd.co, @@ -169,7 +183,8 @@ static void do_paint_brush_task_cb_ex(void *__restrict userdata, vd.fno, vd.mask ? *vd.mask : 0.0f, vd.vertex, - thread_id); + thread_id, + &automask_data); /* Density. */ float noise = 1.0f; @@ -197,7 +212,8 @@ static void do_paint_brush_task_cb_ex(void *__restrict userdata, /* Final mix over the original color using brush alpha. We apply auto-making again * at this point to avoid washing out non-binary masking modes like cavity masking. */ - float automasking = SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.vertex); + float automasking = SCULPT_automasking_factor_get( + ss->cache->automasking, ss, vd.vertex, &automask_data); mul_v4_v4fl(buffer_color, color_buffer->color[vd.i], brush->alpha * automasking); float col[4]; @@ -404,10 +420,17 @@ static void do_smear_brush_task_cb_exec(void *__restrict userdata, sub_v3_v3v3(brush_delta, ss->cache->location, ss->cache->last_location); } + AutomaskingNodeData automask_data; + SCULPT_automasking_node_begin( + data->ob, ss, ss->cache->automasking, &automask_data, data->nodes[n]); + BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { if (!sculpt_brush_test_sq_fn(&test, vd.co)) { continue; } + + SCULPT_automasking_node_update(ss, &automask_data, &vd); + const float fade = bstrength * SCULPT_brush_strength_factor(ss, brush, vd.co, @@ -416,7 +439,8 @@ static void do_smear_brush_task_cb_exec(void *__restrict userdata, vd.fno, vd.mask ? *vd.mask : 0.0f, vd.vertex, - thread_id); + thread_id, + &automask_data); float current_disp[3]; float current_disp_norm[3]; |