diff options
author | Antony Riakiotakis <kalast@gmail.com> | 2014-04-13 20:03:14 +0400 |
---|---|---|
committer | Antony Riakiotakis <kalast@gmail.com> | 2014-04-13 20:03:14 +0400 |
commit | 6f153046e0ffec912883ab24b9fda823e9fbeb38 (patch) | |
tree | 9a0d2705acdfe2a920eeaaeb0a0924cc9bf65e37 /source/blender/editors/sculpt_paint/paint_stroke.c | |
parent | 5d79c2662e043c35feeb4a31f3c5eb288e93c9c1 (diff) |
Reduce overhead when sampling texture images for brushes. The tests can
be cached and reused.
Diffstat (limited to 'source/blender/editors/sculpt_paint/paint_stroke.c')
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_stroke.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index a8f3a6cbc72..d3b6d8cdd1a 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -47,6 +47,7 @@ #include "BKE_paint.h" #include "BKE_brush.h" #include "BKE_colortools.h" +#include "BKE_image.h" #include "WM_api.h" #include "WM_types.h" @@ -57,6 +58,8 @@ #include "ED_screen.h" #include "ED_view3d.h" +#include "IMB_imbuf_types.h" + #include "paint_intern.h" #include <float.h> @@ -172,6 +175,18 @@ static void paint_brush_update(bContext *C, Brush *brush, PaintMode mode, copy_v2_v2(ups->tex_mouse, mouse); copy_v2_v2(ups->mask_tex_mouse, mouse); stroke->cached_size_pressure = pressure; + + /* check here if color sampling the main brush should do color conversion. This is done here + * to avoid locking up to get the image buffer during sampling */ + if (brush->mtex.tex && brush->mtex.tex->type == TEX_IMAGE && brush->mtex.tex->ima) { + ImBuf *tex_ibuf = BKE_image_pool_acquire_ibuf(brush->mtex.tex->ima, &brush->mtex.tex->iuser, NULL); + if (tex_ibuf && tex_ibuf->rect_float == NULL) { + ups->do_linear_conversion = true; + ups->colorspace = tex_ibuf->rect_colorspace; + } + BKE_image_pool_release_ibuf(brush->mtex.tex->ima, tex_ibuf, NULL); + } + stroke->brush_init = true; } |