[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40867] branches/soc-2011-onion-uv-tools/ source/blender/gpu/intern/gpu_draw.c: Optimize away the conversion and copy of float images in texture paint if the buffer is already in color corrected space and using high resolution images .
Antony Riakiotakis
kalast at gmail.com
Sun Oct 9 03:12:09 CEST 2011
Revision: 40867
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40867
Author: psy-fi
Date: 2011-10-09 01:12:08 +0000 (Sun, 09 Oct 2011)
Log Message:
-----------
Optimize away the conversion and copy of float images in texture paint if the buffer is already in color corrected space and using high resolution images.
Modified Paths:
--------------
branches/soc-2011-onion-uv-tools/source/blender/gpu/intern/gpu_draw.c
Modified: branches/soc-2011-onion-uv-tools/source/blender/gpu/intern/gpu_draw.c
===================================================================
--- branches/soc-2011-onion-uv-tools/source/blender/gpu/intern/gpu_draw.c 2011-10-09 01:11:07 UTC (rev 40866)
+++ branches/soc-2011-onion-uv-tools/source/blender/gpu/intern/gpu_draw.c 2011-10-09 01:12:08 UTC (rev 40867)
@@ -779,23 +779,18 @@
glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skip_pixels);
glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skip_rows);
- 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,
+ /* if color correction is needed, we must update the part that needs updating.
+ * If using high bit depth textures, no dithering is needed, same as on initialization */
+ if (ibuf->rect_float && (!U.high_bit_depth_tex || (ibuf->profile == IB_PROFILE_LINEAR_RGB))){
+ 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;
- }
+ MEM_freeN(buffer);
+ if(ima->tpageflag & IMA_MIPMAP_COMPLETE)
+ ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
+ return;
}
glBindTexture(GL_TEXTURE_2D, ima->bindcode);
@@ -804,8 +799,13 @@
glPixelStorei(GL_UNPACK_SKIP_PIXELS, x);
glPixelStorei(GL_UNPACK_SKIP_ROWS, y);
- glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_RGBA,
- GL_UNSIGNED_BYTE, ibuf->rect);
+ if (ibuf->rect_float){
+ glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_RGBA,
+ GL_FLOAT, ibuf->rect_float);
+ }else{
+ glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_RGBA,
+ GL_UNSIGNED_BYTE, ibuf->rect);
+ }
glPixelStorei(GL_UNPACK_ROW_LENGTH, row_length);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, skip_pixels);
More information about the Bf-blender-cvs
mailing list