diff options
author | Ton Roosendaal <ton@blender.org> | 2006-06-17 21:07:49 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2006-06-17 21:07:49 +0400 |
commit | 7784ea53bf3865c0cf6725611034da771b4535bf (patch) | |
tree | 4462e4e9d2b318e5ab8bbfcd255b2d1b7d7311b2 /source/blender/src/glutil.c | |
parent | e7af9c48398ad0f03994ccedddbc372263c8e011 (diff) |
Also for new 'to image window' rendering, drawing of float buffers while
rendering now is full 32 bits. This gives drawing issues in some cards,
like ATIs.
Copied the function used for renderwindow to glutil.c, and used now in the
image window.
Diffstat (limited to 'source/blender/src/glutil.c')
-rw-r--r-- | source/blender/src/glutil.c | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/source/blender/src/glutil.c b/source/blender/src/glutil.c index 4cdc65f621c..ef6728c1a0a 100644 --- a/source/blender/src/glutil.c +++ b/source/blender/src/glutil.c @@ -34,17 +34,16 @@ #include <math.h> -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - #include "MEM_guardedalloc.h" #include "DNA_vec_types.h" +#include "DNA_listBase.h" #include "BKE_utildefines.h" #include "BLI_arithb.h" +#include "BLI_threads.h" + #include "BIF_gl.h" #include "BIF_glutil.h" @@ -286,6 +285,35 @@ void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, void * glPixelStorei(GL_UNPACK_ROW_LENGTH, lrowlength); } +#define FTOCHAR(val) val<=0.0f?0: (val>=1.0f?255: (char)(255.0f*val)) +void glaDrawPixelsSafe_to32(float fx, float fy, int img_w, int img_h, int row_w, float *rectf) +{ + float *rf; + int x, y; + char *rect32, *rc; + + /* copy imgw-imgh to a temporal 32 bits rect */ + if(img_w<1 || img_h<1) return; + + /* happens during threaded render... */ + rc= rect32= MEM_mallocT(img_w*img_h*sizeof(int), "temp 32 bits"); + + for(y=0; y<img_h; y++) { + rf= rectf; + for(x=0; x<img_w; x++, rf+=4, rc+=4) { + rc[0]= FTOCHAR(rf[0]); + rc[1]= FTOCHAR(rf[1]); + rc[2]= FTOCHAR(rf[2]); + rc[3]= FTOCHAR(rf[3]); + } + rectf+= 4*row_w; + } + + glaDrawPixelsSafe(fx, fy, img_w, img_h, img_w, GL_RGBA, GL_UNSIGNED_BYTE, rect32); + + MEM_freeT(rect32); +} + void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, int row_w, int format, int type, void *rect) { float xzoom= glaGetOneFloat(GL_ZOOM_X); |