Revision: 36926
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36926
Author: psy-fi
Date: 2011-05-26 14:30:46 +0000 (Thu, 26 May 2011)
Log Message:
-----------
a few comments plus a null check
Modified Paths:
--------------
branches/soc-2011-onion/source/blender/gpu/intern/gpu_draw.c
branches/soc-2011-onion/source/blender/imbuf/IMB_imbuf.h
branches/soc-2011-onion/source/blender/imbuf/intern/divers.c
Modified: branches/soc-2011-onion/source/blender/gpu/intern/gpu_draw.c
===================================================================
--- branches/soc-2011-onion/source/blender/gpu/intern/gpu_draw.c
2011-05-26 13:59:57 UTC (rev 36925)
+++ branches/soc-2011-onion/source/blender/gpu/intern/gpu_draw.c
2011-05-26 14:30:46 UTC (rev 36926)
@@ -706,10 +706,18 @@
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.
+ This approach is better since:
+ a)we avoid sending the whole
+ texture to the driver(bandwidth)
+ b)The driver skips some math when uploading the texture.
+
+ implementation for non-float images will follow*/
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);
Modified: branches/soc-2011-onion/source/blender/imbuf/IMB_imbuf.h
===================================================================
--- branches/soc-2011-onion/source/blender/imbuf/IMB_imbuf.h 2011-05-26
13:59:57 UTC (rev 36925)
+++ branches/soc-2011-onion/source/blender/imbuf/IMB_imbuf.h 2011-05-26
14:30:46 UTC (rev 36926)
@@ -323,7 +323,8 @@
/*create char buffer, color corrected if necessary, for ImBufs that lack one*/
void IMB_rect_from_float(struct ImBuf *ibuf);
-/*create char buffer for part of the image, color corrected if necessary, for
ImBufs that lack one*/
+/*create char buffer for part of the image, color corrected if necessary, for
ImBufs that lack one.
+Changed part will be stored in buffer. This is expected to bu used for texure
painting updates*/
void IMB_partial_rect_from_float(struct ImBuf *ibuf, float *buffer, int x, int
y, int w, int h);
void IMB_float_from_rect(struct ImBuf *ibuf);
void IMB_float_from_rect_simple(struct ImBuf *ibuf); /* no profile conversion
*/
Modified: branches/soc-2011-onion/source/blender/imbuf/intern/divers.c
===================================================================
--- branches/soc-2011-onion/source/blender/imbuf/intern/divers.c
2011-05-26 13:59:57 UTC (rev 36925)
+++ branches/soc-2011-onion/source/blender/imbuf/intern/divers.c
2011-05-26 14:30:46 UTC (rev 36926)
@@ -224,7 +224,9 @@
if called -only- from GPU_paint_update_image this test will
never fail
but leaving it here for better or worse
*/
- if(init_srcFloatPxl==NULL) return;
+ if(init_srcFloatPxl==NULL || (buffer == NULL)){
+ return;
+ }
if(init_dstBytePxl==NULL) {
imb_addrectImBuf(ibuf);
init_dstBytePxl = (unsigned char *) ibuf->rect;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs