diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-05-06 12:48:07 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-05-06 12:49:09 +0300 |
commit | ef0c02cb4dbd5f74fd0cb7c7ef119e4ca1936249 (patch) | |
tree | 1000d42908297b93b1f767209438bc88ef3f5f18 /source/blender/imbuf/intern/allocimbuf.c | |
parent | 204f55c189d7e7a7b7808b6730a285326e7ac38a (diff) |
Speedup of regular 2D painting
Yet another commit which makes painting aware of multi-threaded systems.
Diffstat (limited to 'source/blender/imbuf/intern/allocimbuf.c')
-rw-r--r-- | source/blender/imbuf/intern/allocimbuf.c | 81 |
1 files changed, 46 insertions, 35 deletions
diff --git a/source/blender/imbuf/intern/allocimbuf.c b/source/blender/imbuf/intern/allocimbuf.c index 988f43ff9fa..ef3743d9c8a 100644 --- a/source/blender/imbuf/intern/allocimbuf.c +++ b/source/blender/imbuf/intern/allocimbuf.c @@ -446,49 +446,60 @@ ImBuf *IMB_allocImBuf(unsigned int x, unsigned int y, uchar planes, unsigned int { ImBuf *ibuf; - ibuf = MEM_callocN(sizeof(ImBuf), "ImBuf_struct"); + ibuf = MEM_mallocN(sizeof(ImBuf), "ImBuf_struct"); if (ibuf) { - ibuf->x = x; - ibuf->y = y; - ibuf->planes = planes; - ibuf->ftype = IMB_FTYPE_PNG; - ibuf->foptions.quality = 15; /* the 15 means, set compression to low ratio but not time consuming */ - ibuf->channels = 4; /* float option, is set to other values when buffers get assigned */ - ibuf->ppm[0] = ibuf->ppm[1] = IMB_DPI_DEFAULT / 0.0254f; /* IMB_DPI_DEFAULT -> pixels-per-meter */ - - if (flags & IB_rect) { - if (imb_addrectImBuf(ibuf) == false) { - IMB_freeImBuf(ibuf); - return NULL; - } + if (!IMB_initImBuf(ibuf, x, y, planes, flags)) { + IMB_freeImBuf(ibuf); + return NULL; } - - if (flags & IB_rectfloat) { - if (imb_addrectfloatImBuf(ibuf) == false) { - IMB_freeImBuf(ibuf); - return NULL; - } + } + + return (ibuf); +} + +bool IMB_initImBuf(struct ImBuf *ibuf, + unsigned int x, unsigned int y, + unsigned char planes, unsigned int flags) +{ + memset(ibuf, 0, sizeof(ImBuf)); + + ibuf->x = x; + ibuf->y = y; + ibuf->planes = planes; + ibuf->ftype = IMB_FTYPE_PNG; + ibuf->foptions.quality = 15; /* the 15 means, set compression to low ratio but not time consuming */ + ibuf->channels = 4; /* float option, is set to other values when buffers get assigned */ + ibuf->ppm[0] = ibuf->ppm[1] = IMB_DPI_DEFAULT / 0.0254f; /* IMB_DPI_DEFAULT -> pixels-per-meter */ + + if (flags & IB_rect) { + if (imb_addrectImBuf(ibuf) == false) { + return false; } - - if (flags & IB_zbuf) { - if (addzbufImBuf(ibuf) == false) { - IMB_freeImBuf(ibuf); - return NULL; - } + } + + if (flags & IB_rectfloat) { + if (imb_addrectfloatImBuf(ibuf) == false) { + return false; } - - if (flags & IB_zbuffloat) { - if (addzbuffloatImBuf(ibuf) == false) { - IMB_freeImBuf(ibuf); - return NULL; - } + } + + if (flags & IB_zbuf) { + if (addzbufImBuf(ibuf) == false) { + return false; } + } - /* assign default spaces */ - colormanage_imbuf_set_default_spaces(ibuf); + if (flags & IB_zbuffloat) { + if (addzbuffloatImBuf(ibuf) == false) { + return false; + } } - return (ibuf); + + /* assign default spaces */ + colormanage_imbuf_set_default_spaces(ibuf); + + return true; } /* does no zbuffers? */ |