And a first threading fix; mist render still used a R global for storage.
authorTon Roosendaal <ton@blender.org>
Mon, 27 Dec 2004 22:57:19 +0000 (22:57 +0000)
committerTon Roosendaal <ton@blender.org>
Mon, 27 Dec 2004 22:57:19 +0000 (22:57 +0000)
caused very bad stripes in render.

source/blender/render/extern/include/render_types.h
source/blender/render/intern/include/rendercore.h
source/blender/render/intern/source/pixelshading.c
source/blender/render/intern/source/rendercore.c

index e454b911aaf198ae2049c9cae909443c315dae27..e7b495ee566ebef992e0cf5163f08213c7d8fa45 100644 (file)
@@ -123,7 +123,7 @@ typedef struct RE_Render
         * near and far, but VC in cpp mode chokes on it :( */
        float near;    /* near clip distance */
        float far;     /* far clip distance */
-       float ycor, zcor, pixsize, viewfac;
+       float ycor, pixsize, viewfac;
 
 
        /* These three need to be 'handlerized'. Not an easy task... */
index e66e405d3830ac99cc0254baf7717505f7de7b7f..44aedf5392a6b00c98b9e9e080b7c248ee799ed8 100644 (file)
@@ -72,7 +72,7 @@ typedef struct PixStrMain
 } PixStrMain;
 
 
-float   mistfactor(float *co); /* dist and height, return alpha */
+float   mistfactor(float zcor, float *co);     /* dist and height, return alpha */
 
 void   add_halo_flare(void);
 
index 84416601986f5f3a2d08c7d936968fced084df32..193a6033470e83ae2555884ed3d627da8685f0b3 100644 (file)
@@ -338,9 +338,8 @@ void shadeHaloFloat(HaloRen *har,  float *col, unsigned int zz,
            alpha= har->alfa;
        }
        else {
-           /* a but patchy... */
-           R.zcor= -har->co[2];
-           alpha= mistfactor(har->co)*har->alfa;
+           /* a bit patchy... */
+           alpha= mistfactor(-har->co[2], har->co)*har->alfa;
        }
        }
        else alpha= har->alfa;
index a561e39fb6fe41b32e27e05ca121b761d5d0185a..c4594231111cb5ccc79e94b2ffa479d139a7b3ad 100644 (file)
 /* global for this file. struct render will be more dynamic later, to allow multiple renderers */
 RE_Render R;
 
-float mistfactor(float *co)    /* dist en height, return alpha */
+float mistfactor(float zcor, float *co)        /* dist en height, return alpha */
 {
        float fac, hi;
        
-       fac= R.zcor - R.wrld.miststa;   /* R.zcor is calculated per pixel */
+       fac= zcor - R.wrld.miststa;     /* zcor is calculated per pixel */
 
        /* fac= -co[2]-R.wrld.miststa; */
 
@@ -168,8 +168,7 @@ static void spothalo(struct LampRen *lar, ShadeInput *shi, float *intens)
        
        if(R.wrld.mode & WO_MIST) {
                /* patchy... */
-               R.zcor= -lar->co[2];
-               haint *= mistfactor(lar->co);
+               haint *= mistfactor(-lar->co[2], lar->co);
                if(haint==0.0) {
                        return;
                }
@@ -1948,7 +1947,7 @@ void *shadepixel(float x, float y, int vlaknr, int mask, float *col)
        }
        else if( (vlaknr & 0x7FFFFF) <= R.totvlak) {
                VertRen *v1, *v2, *v3;
-               float alpha, fac, dvlak, deler;
+               float alpha, fac, dvlak, deler, zcor;
                
                vlr= RE_findOrAddVlak( (vlaknr-1) & 0x7FFFFF);
                
@@ -1987,8 +1986,8 @@ void *shadepixel(float x, float y, int vlaknr, int mask, float *col)
                }
 
                deler= vlr->n[0]*shi.view[0] + vlr->n[1]*shi.view[1] + vlr->n[2]*shi.view[2];
-               if (deler!=0.0) fac= R.zcor= dvlak/deler;
-               else fac= R.zcor= 0.0;
+               if (deler!=0.0) fac= zcor= dvlak/deler;
+               else fac= zcor= 0.0;
                
                shi.co[0]= fac*shi.view[0];
                shi.co[1]= fac*shi.view[1];
@@ -2010,7 +2009,7 @@ void *shadepixel(float x, float y, int vlaknr, int mask, float *col)
                }
 
                fac= Normalise(shi.view);
-               R.zcor*= fac;   /* for mist */
+               zcor*= fac;     /* for mist */
                
                if(shi.osatex) {
                        if( (shi.mat->texco & TEXCO_REFL) ) {
@@ -2129,7 +2128,7 @@ void *shadepixel(float x, float y, int vlaknr, int mask, float *col)
                
                /* MIST */
                if( (R.wrld.mode & WO_MIST) && (shi.mat->mode & MA_NOMIST)==0 ){
-                       alpha= mistfactor(shi.co);
+                       alpha= mistfactor(zcor, shi.co);
                }
                else alpha= 1.0;