Also for new 'to image window' rendering, drawing of float buffers while
authorTon Roosendaal <ton@blender.org>
Sat, 17 Jun 2006 17:07:49 +0000 (17:07 +0000)
committerTon Roosendaal <ton@blender.org>
Sat, 17 Jun 2006 17:07:49 +0000 (17:07 +0000)
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.

source/blender/include/BIF_glutil.h
source/blender/src/drawimage.c
source/blender/src/glutil.c
source/blender/src/renderwin.c

index 0edc73eee2df92d17de8f1e318bafbf8ff5d9b53..48d4d903d286ebcf7d62962dff68c9da3c7785f0 100644 (file)
@@ -139,6 +139,12 @@ void glaDrawPixelsSafe             (float x, float y, int img_w, int img_h, int row_w, int
         * modelview and projection matrices are assumed to define a 
         * 1-to-1 mapping to screen space.
         */
+
+       /* only for float rects, converts to 32 bits and draws */
+       /* uses threadsafe malloc */
+void glaDrawPixelsSafe_to32(float fx, float fy, int img_w, int img_h, int row_w, float *rectf);
+
+
 void glaDrawPixelsTex          (float x, float y, int img_w, int img_h, int format, void *rect);
 
        /* 2D Drawing Assistance */
index f927028bfe663252a089c35f2e850b10bd3112a0..2e3636685cba4121b1326f6340fe851fbdfcde90 100644 (file)
@@ -1930,7 +1930,7 @@ static void imagewindow_progress(ScrArea *sa, RenderResult *rr, volatile rcti *r
        if(rect32)
                glaDrawPixelsSafe(x1, y1, xmax, ymax, rr->rectx, GL_RGBA, GL_UNSIGNED_BYTE, rect32);
        else
-               glaDrawPixelsSafe(x1, y1, xmax, ymax, rr->rectx, GL_RGBA, GL_FLOAT, rectf);
+               glaDrawPixelsSafe_to32(x1, y1, xmax, ymax, rr->rectx, rectf);
        
        glPixelZoom(1.0, 1.0);
        
index 4cdc65f621cc6c6a7bae7896b768a098791d0547..ef6728c1a0a32f791b2db43c5c75cf6e8388dae0 100644 (file)
 
 #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);
index a9fb0f352f2bbf124842c4954fb1b80fcd975fda..25ec97f6b146fe1574858a35dedd3d6e13321259 100644 (file)
@@ -750,35 +750,6 @@ static void renderwin_clear_display_cb(RenderResult *rr)
        }
 }
 
-#define FTOCHAR(val) val<=0.0f?0: (val>=1.0f?255: (char)(255.0f*val))
-static void glaDrawPixelsSafe_to32(float fx, float fy, int img_w, int img_h, int row_w, int format, int type, 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);
-}
-
 /* XXX, this is not good, we do this without any regard to state
 * ... better is to make this an optimization of a more clear
 * implementation. the bug shows up when you do something like
@@ -862,7 +833,7 @@ static void renderwin_progress(RenderWin *rw, RenderResult *rr, volatile rcti *r
        if(rect32)
                glaDrawPixelsSafe(fullrect[0][0], fullrect[0][1], xmax, ymax, rr->rectx, GL_RGBA, GL_UNSIGNED_BYTE, rect32);
        else
-               glaDrawPixelsSafe_to32(fullrect[0][0], fullrect[0][1], xmax, ymax, rr->rectx, GL_RGBA, GL_FLOAT, rectf);
+               glaDrawPixelsSafe_to32(fullrect[0][0], fullrect[0][1], xmax, ymax, rr->rectx, rectf);
        
        glPixelZoom(1.0, 1.0);