diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-06-09 19:20:29 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-06-09 19:20:29 +0400 |
commit | f122a74b1e778bc902fa57f0689ac89c1dacbcef (patch) | |
tree | 7138ce2ab1fba31d94fc393534ce3bcc9aefc389 /source/blender/gpu | |
parent | 522f9111a56268f2155c93d562abad86c1883332 (diff) | |
parent | d4ae38cc6c4ec8e3d13f26d12f85bca561f64f0f (diff) |
svn merge -r37078:37335 https://svn.blender.org/svnroot/bf-blender/trunk/blender
Diffstat (limited to 'source/blender/gpu')
-rw-r--r-- | source/blender/gpu/intern/gpu_draw.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index 0e7df43bd34..7dfbc52819e 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -687,9 +687,25 @@ void GPU_paint_update_image(Image *ima, int x, int y, int w, int h, int mipmap) glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skip_pixels); glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skip_rows); - if ((ibuf->rect==NULL) && ibuf->rect_float) - IMB_rect_from_float(ibuf); - + if (ibuf->rect_float){ + /*This case needs a whole new buffer*/ + if(ibuf->rect==NULL) { + IMB_rect_from_float(ibuf); + } + else { + /* Do partial drawing. 'buffer' holds only the changed part. Needed for color corrected result */ + float *buffer = (float *)MEM_mallocN(w*h*sizeof(float)*4, "temp_texpaint_float_buf"); + IMB_partial_rect_from_float(ibuf, buffer, x, y, w, h); + glBindTexture(GL_TEXTURE_2D, ima->bindcode); + glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_RGBA, + GL_FLOAT, buffer); + MEM_freeN(buffer); + if(ima->tpageflag & IMA_MIPMAP_COMPLETE) + ima->tpageflag &= ~IMA_MIPMAP_COMPLETE; + return; + } + } + glBindTexture(GL_TEXTURE_2D, ima->bindcode); glPixelStorei(GL_UNPACK_ROW_LENGTH, ibuf->x); |