Revision: 17367
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17367
Author:   joeedh
Date:     2008-11-08 15:25:08 +0100 (Sat, 08 Nov 2008)

Log Message:
-----------
commit of working copy (mostly code cleanup changes I think).
I think I'm going to try a merge with trunk *scary music*

Modified Paths:
--------------
    branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h
    branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_bucketbuffer.c
    branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h
    
branches/soc-2007-joeedh/source/blender/render/intern/source/convertblender.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/dsm_soft.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/pipeline.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/rayshade.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/shadeoutput.c
    branches/soc-2007-joeedh/source/blender/src/drawview.c

Modified: branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h
===================================================================
--- branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h        
2008-11-08 13:39:37 UTC (rev 17366)
+++ branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h        
2008-11-08 14:25:08 UTC (rev 17367)
@@ -74,6 +74,7 @@
        DSMTile *vfunc_rect; /*visibility functions*/
        int sizex, sizey;
        int tilex, tiley; /*total number of tiles in x and y dimensions.*/
+       int minz, maxz;
 
        /*tile dimensions, isn't necassarily true for 100% of the tiles.
         this is because the image might not be divisible into equally sized 
tiles of
@@ -108,7 +109,7 @@
 
 #define DSM_LINEAR     1
 #define DSM_SOFT       0
-#define DSM_VIS                1
+#define DSM_VIS                0
 //#define DOQMCDEBUG
 
 /*little bit smaller memarena buffer size for the final diced

Modified: 
branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_bucketbuffer.c
===================================================================
--- 
branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_bucketbuffer.c    
    2008-11-08 13:39:37 UTC (rev 17366)
+++ 
branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_bucketbuffer.c    
    2008-11-08 14:25:08 UTC (rev 17367)
@@ -267,10 +267,14 @@
                        /*right and top border tiles arn't always the same size 
as the others*/
                        if (x == tilex-1) tile->sizex = sizex - tsizex*x;
                        else tile->sizex = tsizex;
+                       
+                       if (tile->sizex < 0) tile->sizex *= -1;
 
                        if (y == tiley-1) tile->sizey = sizey - tsizey*y;
                        else tile->sizey = tsizey;
                        
+                       if (tile->sizey < 0) tile->sizey *= -1;
+
                        TCS_AddToPool(pool, tile);
                }
                TCS_RunCacher(pool);

Modified: 
branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h
===================================================================
--- 
branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h    
    2008-11-08 13:39:37 UTC (rev 17366)
+++ 
branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h    
    2008-11-08 14:25:08 UTC (rev 17367)
@@ -541,12 +541,12 @@
 /* objectinstance->flag */
 #define R_DUPLI_TRANSFORMED    1
 #define R_ENV_TRANSFORMED      2
-#define R_TRANSFORMED          (1|2)
+#define R_TRANSFORMED          (R_DUPLI_TRANSFORMED|R_ENV_TRANSFORMED)
 #define R_NEED_VECTORS         4
 
 //set this to 1 to use the main thread
 //if threads == 1, for e.g. profiling purposes.
-#define RE_USE_MAIN_THREAD 0
+#define RE_USE_MAIN_THREAD 1
 
 #endif /* RENDER_TYPES_H */
 

Modified: 
branches/soc-2007-joeedh/source/blender/render/intern/source/convertblender.c
===================================================================
--- 
branches/soc-2007-joeedh/source/blender/render/intern/source/convertblender.c   
    2008-11-08 13:39:37 UTC (rev 17366)
+++ 
branches/soc-2007-joeedh/source/blender/render/intern/source/convertblender.c   
    2008-11-08 14:25:08 UTC (rev 17367)
@@ -3532,6 +3532,9 @@
        lar= (LampRen *)MEM_callocN(sizeof(LampRen),"lampren");
        BLI_addtail(&re->lampren, lar);
        go->lampren= lar;
+       
+       MTC_Mat4CpyMat4(lar->fullmat, ob->obmat);
+       MTC_Mat4Ortho(lar->fullmat);
 
        MTC_Mat4MulMat4(mat, ob->obmat, re->viewmat);
        MTC_Mat4Invert(ob->imat, mat);

Modified: branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c
===================================================================
--- branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c  
2008-11-08 13:39:37 UTC (rev 17366)
+++ branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c  
2008-11-08 14:25:08 UTC (rev 17367)
@@ -350,6 +350,9 @@
        int mergescratchlen, lay = (1<<20)-1;
        char rendertitle[300];
        rendertitle[0] = 0;
+       
+       dbuf->minz = 0x7FFFFFFF;
+       dbuf->maxz = -0x80000000;
 
        /*use 30,000 max elements per pixel for the 4*total_threads
          preallocated pixel arrays DSM_DoTile() allocates.  the *6
@@ -492,9 +495,13 @@
                        /*right and top border tiles arn't always the same size 
as the others*/
                        if (x == dbuf->tilex-1) tile->sizex = dbuf->sizex - 
dbuf->tsizex*x; //dbuf->sizex - dbuf->tsizex*(x-1); //tilesize - (tilesize*x - 
dbuf->sizex);
                        else tile->sizex = dbuf->tsizex;
+                       
+                       if (tile->sizex < 0) tile->sizex *= -1;
 
                        if (y == dbuf->tiley-1) tile->sizey = dbuf->sizey - 
dbuf->tsizey*y;//tilesize - (tilesize*y - dbuf->sizey);
                        else tile->sizey = dbuf->tsizey;
+                       
+                       if (tile->sizey < 0) tile->sizey *= -1;
 
                        tile->x = x;
                        tile->y = y;
@@ -734,7 +741,7 @@
                                        printf("bleh p: %d %d %d %d\n", 
apn->p[0], apn->p[1], apn->p[2], apn->p[3]);
                                        printf("bleh obi: %d %d %d %d\n", 
apn->obi[0], apn->obi[1], apn->obi[2], apn->obi[3]);
                                }
-
+                               
                                if (apn->z[a] < 0x7FFFFFFF*-1.0f) {
                                        printf("z less then 0!: z: %d\n", 
apn->z[a]);
                                        //continue;
@@ -754,6 +761,9 @@
                                                        //if (zco < -0.001 || 
zco > 1.001) printf("linear z: %f\n", zco);
                                                } else row2[totface].depth = 
apn->z[a];
 
+                                               if (row2[totface].depth > 
dbuf->maxz) dbuf->maxz = row2[totface].depth;
+                                               if (row2[totface].depth < 
dbuf->minz) dbuf->minz = row2[totface].depth;
+
                                                row2[totface].p = apn->p[a];
                                                row2[totface].obi = apn->obi[a];
                                                row2[totface].mask = 
apn->mask[a];
@@ -826,6 +836,9 @@
                                                        //if (zco < -0.001 || 
zco > 1.001) printf("linear z: %f\n", zco);
                                                } else row2[totface].depth = 
apn->z[a];
 
+                                               if (row2[totface].depth > 
dbuf->maxz) dbuf->maxz = row2[totface].depth;
+                                               if (row2[totface].depth < 
dbuf->minz) dbuf->minz = row2[totface].depth;
+
                                                row2[totface].p = apn->p[a];
                                                row2[totface].obi = apn->obi[a];
                                                row2[totface].mask = 
apn->mask[a];

Modified: 
branches/soc-2007-joeedh/source/blender/render/intern/source/dsm_soft.c
===================================================================
--- branches/soc-2007-joeedh/source/blender/render/intern/source/dsm_soft.c     
2008-11-08 13:39:37 UTC (rev 17366)
+++ branches/soc-2007-joeedh/source/blender/render/intern/source/dsm_soft.c     
2008-11-08 14:25:08 UTC (rev 17367)
@@ -79,6 +79,31 @@
 extern Render R;
 static TCS_TilePool *deepbuffer_pool = NULL;
 
+static float dsm_linearz_to_homo(int z, float clipsta, float clipend, float 
winmat[][4])
+{
+       float fac;
+       //recalculate homogenous z from linear
+
+       fac = (float)z / (float)0x7FFFFFFF;
+       
+       fac     = fac * (clipend - clipsta) + clipsta;
+       fac = (fac * winmat[2][2] - winmat[3][2]) / (fac * winmat[2][3]);
+
+       return fac;
+}
+
+static float dsm_linearz_to_dist(int z, float clipsta, float clipend, float 
winmat[][4])
+{
+       float fac;
+       //recalculate homogenous z from linear
+
+       fac = (float)z / (float)0x7FFFFFFF;
+       
+       fac     = fac * (clipend - clipsta) + clipsta;
+
+       return fac;
+}
+
 #if 0
 /*backprojection based method*/
 float DSM_getBPSoftShadow(Render *re, ShadBuf *shb, ShadeInput *shi, LampRen 
*lar,
@@ -188,12 +213,9 @@
                return 1.0f;
        }
 
-       //compute the world-space depth
-       startz = (float) startsamp->depth / 2147483647.0f;
-       startz = startz*(shb->clipend - shb->clipsta) + shb->clipsta;
-       
+       //compute the light-space depth
+       startz = dsm_linearz_to_dist(startsamp->depth, shb->clipsta, 
shb->clipend, shb->winmat);
 
-
        TCS_UnlockTile(tile);
 }
 #endif
@@ -203,8 +225,8 @@
 static void DSM_ProcessPixel(DSMFunction *func, int index, int zenter, int 
zexit, float *shadclr, int bias, int zthresh)
 {
        DSMLayerSample *samp;
-       int zadd;
-       int i, j, z;
+       int zsub;
+       int i, j, z, maxj;
        
        if (!func) return;
        
@@ -213,52 +235,88 @@
        
        samp = func->samples;
        for (i=0; i<func->totsamples; i++, samp++) {
+               maxj = zsub==0 ? 1 : samp->orig_totsamples+1;
+
                if (i == 0) {
-                       zadd = 0;
+                       zsub = 0;
                        z = samp->depth;
                } else {
-                       zadd = (samp->depth - (samp-1)->depth) / 
(samp->orig_totsamples+1);
+                       zsub = (samp->depth - (samp-1)->depth) / maxj;
                        z = samp->depth;
-               }
 
-               for (j=0; j<samp->orig_totsamples+1; j++) {
+                       //BASSERT(zsub >= 0);
+               }
+               
+               for (j=0; j<maxj; j++) {
                        int min=z-zthresh, max=z+zthresh;
-                       min += bias;
-                       max += bias;
+                       min += bias + zthresh;
+                       max += bias + zthresh;
 
                        //check if layer-zthresh to layer+zthresh overlaps 
zenter, zexit
                        if ((max >= zenter && max <= zexit) || (min >= zenter 
&& min <= zexit)
-                                || (min <= zenter && max >= zexit) || (min < 
zenter && max > zexit)) {
-                               if (i != 0) shadclr[index] *= 1.0 - 
((samp-1)->value - (samp)->value);
+                                || (min <= zenter && max >= zexit)) {
+                               
+                               if (i != 0) shadclr[index] *= 1.0 - 
((samp-1)->value - (samp)->value)/maxj;
                                else shadclr[index] *= samp->value;
 
                                BASSERT(i==0 || ((samp-1)->value - 
(samp)->value) >= 0);
                                if (i != 0 && ((samp-1)->value - (samp)->value) 
< 0) {
-                                       printf("less then zero: samp: %f, 
samp-1: %f\n", samp->value, (samp-1)->value);
+                                       printf("less then zero! samp: %f, 
samp-1: %f\n", samp->value, (samp-1)->value);
                                }
-
                        }
-                       z -= zadd;
+                       z -= zsub;
                }
                if (shadclr[index] < 0.001) break;
        }
 }
 
-static DSMTile *DSM_WalkRayPath(DSMBuffer *dbuf, int bias, int zthresh, float 
*shadclr, float *vec1, 
-                                                       float *vec2, int x, int 
y, int z, int dz, DSMTile *tile)
+#define USE_BSE (G.rt == 52)
+static LampRen *current_vis_lar = NULL;
+
+static void DSM_WalkRayPath(DSMBuffer *dbuf, ShadBuf *shb, int bias, int 
zthresh, float *shadclr, float *vec1, 
+                                                       float *vec2, int x, int 
y, int z, int dz)
 {
-       int zenter = z, zexit = z;
+       DSMTile *tile;
+       int zenter = z, zexit;
+       float fac;
+       float invwinmat[4][4];
+       float coord[4];
 
-  /*this optimization doesn't take into account that the tile might be cached
-    by another thread, since TCS_UnlockTile is called at the end of this 
function.
-    the idea was to cache the current tile.*/
+       tile = TCS_GetAndLockTile(dbuf, x/dbuf->tsizex, y/dbuf->tsizey, 0);
+       
+       if (USE_BSE) {
+               //recalculate homogenous z for backprojection
 
-//     if (!tile || (tile->x != x/dbuf->tsizex || tile->y != y/dbuf->tsizey)) {
-               tile = TCS_GetAndLockTile(dbuf, x/dbuf->tsizex, y/dbuf->tsizey, 
0);
-//     }
+               fac = (float) (z + dz - bias) / (float)0x7FFFFFFF;
+               
+               //fac = (fac - shb->clipsta) / (shb->clipend - shb->clipsta);
+               fac     = fac * (shb->clipend - shb->clipsta) + shb->clipsta;
 
+               //fac = (shb->winmat[3][2])/(shb->winmat[2][2] - 
shb->winmat[2][3]*fac);
+               //nf = a / (b - c*f)
+               //nf*(b - c*f) = a
+               //nf*b - nf*c*f = a
+               //nf*b - a = nf*c*f
+               //(nf*b - a) / nf*c = f
+               fac = (fac * shb->winmat[2][2] - shb->winmat[3][2]) / (fac * 
shb->winmat[2][3]);
+
+               coord[0] = ((float)x / (float)dbuf->sizex)*2.0 - 1.0;
+               coord[1] = ((float)y / (float)dbuf->sizey)*2.0 - 1.0;
+               coord[2] = fac;
+               coord[3] = 1.0;
+
+               MTC_Mat4Invert(invwinmat, shb->winmat);

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to