diff options
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d_toolbar.py | 8 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_image_proj.c | 57 |
2 files changed, 32 insertions, 33 deletions
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py index 6be5c0e6e04..2042dc148de 100644 --- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -687,8 +687,10 @@ class VIEW3D_PT_tools_brush(Panel, View3DPaintPanel): elif context.image_paint_object and brush: col = layout.column() - col.template_color_picker(brush, "color", value_slider=True) - col.prop(brush, "color", text="") + + if brush.image_tool == 'DRAW' and brush.blend not in ('ERASE_ALPHA', 'ADD_ALPHA'): + col.template_color_picker(brush, "color", value_slider=True) + col.prop(brush, "color", text="") row = col.row(align=True) self.prop_unified_size(row, context, brush, "size", slider=True, text="Radius") @@ -825,7 +827,7 @@ class VIEW3D_PT_tools_mask_texture(View3DPanel, Panel): @classmethod def poll(cls, context): brush = context.tool_settings.image_paint.brush - return (context.image_paint_object and brush and brush.image_tool != 'SOFTEN') + return (context.image_paint_object and brush) def draw(self, context): layout = self.layout diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.c b/source/blender/editors/sculpt_paint/paint_image_proj.c index fdb97a3fa0e..d2badbaa156 100644 --- a/source/blender/editors/sculpt_paint/paint_image_proj.c +++ b/source/blender/editors/sculpt_paint/paint_image_proj.c @@ -3833,34 +3833,6 @@ static void *do_projectpaint_thread(void *ph_v) if (falloff > 0.0f) { float texrgb[3]; float mask = falloff; - float mixalpha = 1.0; - - if (ps->is_texbrush) { - MTex *mtex = &brush->mtex; - float samplecos[3]; - float texrgba[4]; - - /* taking 3d copy to account for 3D mapping too. It gets concatenated during sampling */ - if (mtex->brush_map_mode == MTEX_MAP_MODE_3D) { - copy_v3_v3(samplecos, projPixel->worldCoSS); - } - else { - copy_v2_v2(samplecos, projPixel->projCoSS); - samplecos[2] = 0.0f; - } - - /* note, for clone and smear, we only use the alpha, could be a special function */ - BKE_brush_sample_tex_3D(ps->scene, brush, samplecos, texrgba, thread_index, pool); - - copy_v3_v3(texrgb, texrgba); - mixalpha *= texrgba[3]; - } - - if (ps->is_maskbrush) { - mixalpha *= BKE_brush_sample_masktex(ps->scene, ps->brush, projPixel->projCoSS, thread_index, pool); - } - - CLAMP(mask, 0.0f, 1.0f); if (ps->do_masking) { /* masking to keep brush contribution to a pixel limited. note we do not do @@ -3886,6 +3858,31 @@ static void *do_projectpaint_thread(void *ph_v) else mask *= brush_alpha; + if (ps->is_texbrush) { + MTex *mtex = &brush->mtex; + float samplecos[3]; + float texrgba[4]; + + /* taking 3d copy to account for 3D mapping too. It gets concatenated during sampling */ + if (mtex->brush_map_mode == MTEX_MAP_MODE_3D) { + copy_v3_v3(samplecos, projPixel->worldCoSS); + } + else { + copy_v2_v2(samplecos, projPixel->projCoSS); + samplecos[2] = 0.0f; + } + + /* note, for clone and smear, we only use the alpha, could be a special function */ + BKE_brush_sample_tex_3D(ps->scene, brush, samplecos, texrgba, thread_index, pool); + + copy_v3_v3(texrgb, texrgba); + mask *= texrgba[3]; + } + + if (ps->is_maskbrush) { + mask *= BKE_brush_sample_masktex(ps->scene, ps->brush, projPixel->projCoSS, thread_index, pool); + } + /* extra mask for normal, layer stencil, .. */ mask *= ((float)projPixel->mask) * (1.0f / 65535.0f); @@ -3925,8 +3922,8 @@ static void *do_projectpaint_thread(void *ph_v) else do_projectpaint_soften(ps, projPixel, mask, softenArena, &softenPixels); break; default: - if (is_floatbuf) do_projectpaint_draw_f(ps, projPixel, texrgb, mask * mixalpha); - else do_projectpaint_draw(ps, projPixel, texrgb, mask * mixalpha); + if (is_floatbuf) do_projectpaint_draw_f(ps, projPixel, texrgb, mask); + else do_projectpaint_draw(ps, projPixel, texrgb, mask); break; } } |