Revision: 15711
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15711
Author:   joeedh
Date:     2008-07-23 13:50:51 +0200 (Wed, 23 Jul 2008)

Log Message:
-----------
update, ui fixes, speedup in dsm lookup

Modified Paths:
--------------
    branches/soc-2007-joeedh/source/blender/blenkernel/BKE_blender.h
    branches/soc-2007-joeedh/source/blender/render/intern/include/qmc.h
    branches/soc-2007-joeedh/source/blender/render/intern/include/shadbuf.h
    branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/rendercore.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/shadbuf.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/shadeoutput.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf.c
    branches/soc-2007-joeedh/source/blender/src/buttons_shading.c
    branches/soc-2007-joeedh/source/blender/src/usiblender.c

Modified: branches/soc-2007-joeedh/source/blender/blenkernel/BKE_blender.h
===================================================================
--- branches/soc-2007-joeedh/source/blender/blenkernel/BKE_blender.h    
2008-07-23 10:19:08 UTC (rev 15710)
+++ branches/soc-2007-joeedh/source/blender/blenkernel/BKE_blender.h    
2008-07-23 11:50:51 UTC (rev 15711)
@@ -41,7 +41,7 @@
 struct MemFile;
 
 #define BLENDER_VERSION                        246
-#define BLENDER_SUBVERSION             0
+#define BLENDER_SUBVERSION             20
 
 #define BLENDER_MINVERSION             245
 #define BLENDER_MINSUBVERSION  15

Modified: branches/soc-2007-joeedh/source/blender/render/intern/include/qmc.h
===================================================================
--- branches/soc-2007-joeedh/source/blender/render/intern/include/qmc.h 
2008-07-23 10:19:08 UTC (rev 15710)
+++ branches/soc-2007-joeedh/source/blender/render/intern/include/qmc.h 
2008-07-23 11:50:51 UTC (rev 15711)
@@ -72,5 +72,6 @@
 QMCINLINE int adaptive_sample_contrast_val(int samples, float prev, float val, 
float thresh);
 QMCINLINE float get_avg_speed(struct ShadeInput *shi);
 QMCINLINE int adaptive_sample_variance(int samples, float *col, float *colsq, 
float thresh);
+QMCSampler *get_thread_qmcsampler(Render *re, int thread, int type, int tot);
 
 #endif /* QMC_H */

Modified: 
branches/soc-2007-joeedh/source/blender/render/intern/include/shadbuf.h
===================================================================
--- branches/soc-2007-joeedh/source/blender/render/intern/include/shadbuf.h     
2008-07-23 10:19:08 UTC (rev 15710)
+++ branches/soc-2007-joeedh/source/blender/render/intern/include/shadbuf.h     
2008-07-23 11:50:51 UTC (rev 15711)
@@ -33,7 +33,6 @@
 #define SHADBUF_EXT_H
 
 #include "render_types.h"
-#include "BKE_dsm.h"
 
 struct ObjectRen;
 
@@ -67,16 +66,7 @@
 struct MemArena;
 struct APixstr;
 
-/**
- * Deep Shadow Buffer
- */
 
-void DSM_getSoftShadow(ShadBuf *shb, struct ShadeInput *shi, LampRen *lar, 
float *rco, float *dxco, float *dyco, float inp, float *shadowclr);
-float DSM_getShadow(ShadBuf *buf, float *rco, float *dxco, float *dyco, float 
inp, int component);
-float DSM_getBilinearShadow(ShadBuf *shb, float *rco, float *dxco, float 
*dyco, float inp, int component);
-float DSM_sampleMap(ShadBuf *shb, int xs, int ys, int zs, int bias, float inp, 
int component);
-
-
 /**
  * Irregular shadowbuffer
  */

Modified: branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c
===================================================================
--- branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c  
2008-07-23 10:19:08 UTC (rev 15710)
+++ branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c  
2008-07-23 11:50:51 UTC (rev 15711)
@@ -65,6 +65,7 @@
 #include "sss.h"
 #include "zbuf.h"
 #include "qmc.h"
+#include "dsm.h"
 
 #include "MEM_guardedalloc.h"
 
@@ -79,46 +80,6 @@
 extern Render R;
 static TCS_TilePool *deepbuffer_pool = NULL;
 
-/* prototypes */
-struct _ClrEntry;
-void DSM_DoTile(Render *re, float projmat[4][4], ShadBuf *shb, DSMTile *tile, 
-                               DSMBuffer *dbuf, RE_BucketTile *btile, int 
threadnr, float viewinv[4][4]);
-
-int zbuffer_dsm(Render *re, RenderPart *pa, float winmat[4][4], APixstr 
**lastbuf, 
-                               APixstr **lastbufstrand, APixstr *APixbuf, 
APixstr *APixbufstrand, 
-                               ListBase *apsmbase, unsigned int lay, ShadBuf 
*shb, 
-                               RE_BucketTile *buckettile);
-
-static APixstr *addpsmainA(ListBase *lb);
-static void freepsA(ListBase *lb);
-static APixstr *addpsA(ZSpan *zspan);
-
-/* Modified zbufclipwire from zbuf.c
-  v1 and v2 are in homogenous coordinates.  returns true if 
-  drawing should happen.  v1 and v2 are modified (clipped).*/
-int DSM_zbufclipwire(float clipsta, float clipend, int rectx, int recty, float 
*v1, float *v2);
-
-#define DSM_NONE                       0
-#define DSM_FACE                       1
-#define DSM_FACE_STEP          2
-#define DSM_STRAND                     3
-#define DSM_STRAND_STEP                4
-#define DSM_VOLUME_SAMPLE      5
-
-/*internal structures*/
-typedef struct _ClrEntry {
-       struct _ClrEntry *next, *prev;
-       ListBase *srclist;
-       int depth;
-       int p;
-       int mask;
-       int obi;
-       int type;
-       int samplenr;
-       float value;
-       int index; /* color component index */
-} _ClrEntry;
-
 void DSM_MakeTilePool(int maxbytes)
 {
        deepbuffer_pool = TCS_MakePool(maxbytes, "dsm");
@@ -216,6 +177,7 @@
        return g_break;
 }
 
+/*used after retransforming the renderscene*/
 void DSM_set_imats(Render *re)
 {
        Base *base;
@@ -229,8 +191,15 @@
        }
 }
 
-/*this function not based off the envmap equavilent env_rotate_scene, 
-  which turned out not to work at all for the purpose, for some reason*/
+/*like envmap, dsm performs material evaluation.  since the render data
+  is pre-rotated into camera space, it must be unrotated and rerotated
+  to lamp space in order for dsm to render correctly.  after the dsm
+  map has finished rendering, the scene is rerotated back into camera
+  space (note this happens for every dsm map in the scene individually).
+
+  this function is not based off the envmap equavilent env_rotate_scene, 
+  which turned out not to work at all, though I can't figure out why
+  it works for envmap but not for dsm.*/
 static void retransform_renderscene(Render *re, float newview[4][4], float 
oldview[4][4], ShadBuf *buf, int mode)
 {
        VlakRen *vlak;
@@ -265,11 +234,10 @@
        }
 }
 
-/* copied and trimmed down from env_copy_render()*/
+/* initialize the dsm render data.
+   copied and trimmed down from env_copy_render()*/
 static Render *init_dsm_render(Render *re, Render *envre, ShadBuf *shb)
 {
-       int cuberes;
-
        /* this flag has R_ZTRA in it for example */
        envre->flag= re->flag;
        
@@ -288,14 +256,16 @@
 
        envre->clipsta= shb->clipsta;
        envre->clipend= shb->clipend;
+
+       return envre;
 }
 
 #define MAX(x, y) (x) > (y) ? (x) : (y)
 
+/*make a visualization of a dsm map for debugging purposes.*/
 static ImBuf *dsm_make_vis_imbuf(DSMBuffer *buf)
 {
        DSMTile *tile;
-       DSMFunction *func;
        ImBuf *imbuf = NULL;
        int maxsamples[3]={1, 1, 1};
        int x, y, x2, y2, sx=buf->sizex, sy=buf->sizey;
@@ -347,9 +317,11 @@
        Render *re2 = MEM_callocN(sizeof(Render), "Render");
        DeepThreadData thread_data[BLENDER_MAX_THREADS];
        float fac, shbview[4][4], review[4][4], mat[4][4];
-       int x, y, lastsizex, lastsizey, stop=0;
+       int x, y, lastsizex, lastsizey, stop=0, done=0, lastdone=0;
        int mergescratchlen, lay = (1<<20)-1;
-       
+       char rendertitle[300];
+       rendertitle[0] = 0;
+
        /*use 30,000 max elements per pixel for the 4*total_threads
          preallocated pixel arrays DSM_DoTile() allocates.  the *6
          iirc is because the visibilty function calculation
@@ -530,14 +502,24 @@
 
                while (!stop && (g_break=re->test_break())==0) {
                        stop = 1;
+                       done = 0;
                        for (threadtile=threadtiles.first; threadtile; 
threadtile=threadtile->next) {
                                /*we shouldn't need to lock this, since thread 
conflicts arnen't going
                                  to cause anything bad to happen, other then 
perhaps 1 extra loop iteration.*/
                                if (threadtile->ready==0) {
                                        stop = 0;
-                                       break;
+                               } else {
+                                       done += 1;
                                }
                        }
+                       if (done != lastdone) {
+                               printf("bleh!\n");
+                               sprintf(rendertitle, "Shadow tiles %d out of %d 
completed", done, dbuf->tilex*dbuf->tiley);
+                               re->i.infostr= rendertitle;
+                               re->stats_draw(&re->i);
+                               re->i.infostr= NULL;
+                       }
+                       lastdone = done;
                        PIL_sleep_ms(300);
                }
 
@@ -586,6 +568,7 @@
        }
 }
 
+/*this is used to shade a dsm pixel sample.*/
 static void shade_dsmsample(Render *re, VlakRen *vlr, int facenr, int obi,
                                                        float *diff, float 
*screenco, ShadBuf *buf,
                                                        Material *mat, float 
viewinv[4][4], int thread)
@@ -691,468 +674,10 @@
        }
 }
 
-static void DSM_CompressFunction(MemArena *arena, DSMFunction *func, float 
error);
 
-/*The Loop of Doom.
-  One loop to merge them all, One loop to find them;
-  One loop to compress them all, and in the darkness, bind them!*/
-#define COMPSTATE_PROCESSING   0
-#define COMPSTATE_PROCESSING2  1
-#define COMPSTATE_COMPRESSING  2
-#define COMPSTATE_DONE                 3
 
-void DSM_MergeLayerListNew(DSMTile *tile, int x, int y, _ClrEntry *row, 
ListBase (*transfuncs)[3],
-                                                                  int totface, 
void *scratchmem1, void *scratchmem2, void *scratchmem3,
-                                                                  int 
scratchlen, float *weight, int samplewid, float error)
-{
-       DSMFunction *func[3];
-       DSMLayerSample *cursamp[3]={NULL, NULL, NULL}, *samp;
-       DSMLayerSample *sout[3] = {scratchmem1, scratchmem2, scratchmem3};
-       _ClrEntry *csamp, *lastcsamp[3]={NULL, NULL, NULL};
-       double slope[3]={0.0, 0.0, 0.0}, accum[3] = {1.0, 1.0, 1.0}, s1, s2;
-       double start[3], end[3], ostartpoint[3], oendpoint[3];
-       double startpoint[3] = {-1.0, -1.0, -1.0}, endpoint[3] = {-1.0, -1.0, 
-1.0}, err=error; // /2.0;
-       int i, ci, totfaces[3] = {0, 0, 0}, cursor[3]={0, 0, 0};
-       int state[3] = {COMPSTATE_PROCESSING, COMPSTATE_PROCESSING, 
COMPSTATE_PROCESSING};
-       int totface2[3] = {0, 0, 0}, count[3]={0, 0, 0};
-
-       /*first alloc, then assign, as internally the function
-         array may be reallocated to increase its size (thus invalidating
-         existing pointers).*/
-       for (i=0; i<3; i++) {
-               switch (i) {
-                       case 0:
-                               dsm_function_alloc(tile, 
&tile->r_rect[y*tile->sizex+x]);
-                               break;
-                       case 1:
-                               dsm_function_alloc(tile, 
&tile->g_rect[y*tile->sizex+x]);
-                               break;
-                       case 2:
-                               dsm_function_alloc(tile, 
&tile->b_rect[y*tile->sizex+x]);
-                               break;
-               }
-       }
-
-       for (i=0; i<3; i++) {
-               switch (i) {
-                       case 0:
-                               func[i] = 
&tile->funcarray[tile->r_rect[y*tile->sizex+x]];
-                               break;
-                       case 1:
-                               func[i] = 
&tile->funcarray[tile->g_rect[y*tile->sizex+x]];
-                               break;
-                       case 2:
-                               func[i] = 
&tile->funcarray[tile->b_rect[y*tile->sizex+x]];
-                               break;
-               }
-               memset(func[i], 0, sizeof(DSMFunction));
-
-               func[i]->samples = (DSMLayerSample*) sout[i];
-               cursamp[i] = sout[i];
-               func[i]->totsamples = 0;
-               func[i]->zmin = 0x7FFFFFFF;
-               func[i]->zmax = -0x7FFFFFFF;
-       }
-
-       /*we add 1 to totface to compensate for how compression must lag behind 
merging.*/
-       for (i=0, csamp=row; i<totface; i++, csamp++) {
-               ci = csamp->index;
-               BASSERT(ci >= 0 && ci < 3);
-               samp = func[ci]->samples + totfaces[ci];
-
-               /*we've hit a sample in one of the other rgb color component
-                 visibility functions, or we've hit an excluded sample, so 
continue*/
-               if (!csamp->srclist) {
-                       continue;
-               }
-
-               samp->orig_totsamples = 0;
-               samp->depth = csamp->depth;
-               if (samp->depth > func[ci]->zmax) func[ci]->zmax = csamp->depth;
-               if (samp->depth < func[ci]->zmin) func[ci]->zmin = csamp->depth;
-
-               if (lastcsamp[ci]) accum[ci] = accum[ci] + 
(double)(csamp->depth-lastcsamp[ci]->depth)*slope[ci];

@@ 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