From 0e8d313f0e92e9b2fed13f5b6a737e8aafcdc25e Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 1 Mar 2011 17:58:12 +0000 Subject: Fix #26218: texture paint - Added option "Fixed Texture" to the UI. Because of strange reason, this feature was implemented but hidden from users. Would be cool, if somebody familiar with 2d texture paiting check. - Fixed some issues in existing code of fixed texture paiting. It now handles brush radius and curve correct. - Also fixed issue with paiting with texture from node tree - it used to be painted with regular brush color instead of texture. --- source/blender/blenkernel/intern/brush.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'source/blender/blenkernel/intern/brush.c') diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index df545741e0e..f4d117d8a07 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -593,7 +593,7 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int bufsize, ImBuf dst[2]= FTOCHAR(rgba[2]); dst[3]= FTOCHAR(rgba[3]); } - else { + else if (texfall == 2) { dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]); brush_sample_tex(brush, xy, rgba, 0); @@ -601,6 +601,14 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int bufsize, ImBuf dst[1] = FTOCHAR(rgba[1]*brush->rgb[1]); dst[2] = FTOCHAR(rgba[2]*brush->rgb[2]); dst[3] = FTOCHAR(rgba[3]*alpha*brush_curve_strength_clamp(brush, dist, radius)); + } else { + dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]); + + brush_sample_tex(brush, xy, rgba, 0); + dst[0]= crgb[0]; + dst[1]= crgb[1]; + dst[2]= crgb[2]; + dst[3] = FTOCHAR(rgba[3]*alpha*brush_curve_strength_clamp(brush, dist, radius)); } } } @@ -870,11 +878,8 @@ static void brush_painter_refresh_cache(BrushPainter *painter, float *pos) flt= cache->flt; size= (cache->size)? cache->size: diameter; - if (!(mtex && mtex->tex) || (mtex->tex->type==0)) { - brush_imbuf_new(brush, flt, 0, size, &cache->ibuf); - } - else if (brush->flag & BRUSH_FIXED_TEX) { - brush_imbuf_new(brush, flt, 0, size, &cache->maskibuf); + if (brush->flag & BRUSH_FIXED_TEX) { + brush_imbuf_new(brush, flt, 3, size, &cache->maskibuf); brush_painter_fixed_tex_partial_update(painter, pos); } else -- cgit v1.2.3