[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15870] branches/soc-2007-joeedh/source/ blender/render/intern: split zbuf.c into 8 files, since it was over 5000 lines long.

Joseph Eagar joeedh at gmail.com
Tue Jul 29 20:31:37 CEST 2008


Revision: 15870
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15870
Author:   joeedh
Date:     2008-07-29 20:31:34 +0200 (Tue, 29 Jul 2008)

Log Message:
-----------
split zbuf.c into 8 files, since it was over 5000 lines long.

Modified Paths:
--------------
    branches/soc-2007-joeedh/source/blender/render/intern/include/zbuf.h
    branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf.c

Added Paths:
-----------
    branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf_abuf.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf_dsm.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf_shade.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf_shadow.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf_solid.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf_sss.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf_strand.c

Modified: branches/soc-2007-joeedh/source/blender/render/intern/include/zbuf.h
===================================================================
--- branches/soc-2007-joeedh/source/blender/render/intern/include/zbuf.h	2008-07-29 18:07:06 UTC (rev 15869)
+++ branches/soc-2007-joeedh/source/blender/render/intern/include/zbuf.h	2008-07-29 18:31:34 UTC (rev 15870)
@@ -39,6 +39,7 @@
 struct ZSpan;
 struct APixstrand;
 struct StrandShadeCache;
+struct ShadeResult;
 
 void fillrect(int *rect, int x, int y, int val);
 
@@ -134,6 +135,13 @@
 	int used; /*number of pointers currently in use*/
 } VlakBucket;
 
+typedef struct ZbufProjectCache {
+	int index, clip;
+	float ho[4];
+} ZbufProjectCache;
+
+#define ZBUF_PROJECT_CACHE_SIZE 256
+
 /* exported to shadbuf.c */
 void zbufclip4(struct Render *re, struct ZSpan *zspan, int obi, int zvlnr, float *f1, float *f2, float *f3, float *f4, int c1, int c2, int c3, int c4);
 void zbuf_free_span(struct ZSpan *zspan);
@@ -154,12 +162,30 @@
 
 struct ShadeSample;
 
-int addtosamp_shr(Render *re, ShadeResult *samp_shr, struct ShadeSample *ssamp, int addpassflag);
-void add_transp_speed(RenderLayer *rl, int offset, float *speed, float alpha, long *rdrect);
+int addtosamp_shr(struct Render *re, struct ShadeResult *samp_shr, struct ShadeSample *ssamp, int addpassflag);
+void add_transp_speed(struct RenderLayer *rl, int offset, float *speed, float alpha, long *rdrect);
 void zbufsinglewire(ZSpan *zspan, int obi, int zvlnr, float *ho1, float *ho2);
-void add_transp_passes(RenderLayer *rl, int offset, ShadeResult *shr, float alpha);
-void merge_transp_passes(RenderLayer *rl, ShadeResult *shr);
-void zspan_scanconvert_strand(Render *re, ZSpan *zspan, void *handle, float *v1, float *v2, float *v3, void (*func)(Render *, void *, int, int, float, float, float) );
+void add_transp_passes(struct RenderLayer *rl, int offset, struct ShadeResult *shr, float alpha);
+void merge_transp_passes(struct RenderLayer *rl, struct ShadeResult *shr);
+void zspan_scanconvert_strand(struct Render *re, ZSpan *zspan, void *handle, float *v1, float *v2, float *v3, void (*func)(Render *, void *, int, int, float, float, float) );
+int clipline(float *v1, float *v2);	/* return 0: do not draw */
+short cliptestf(float p, float q, float *u1, float *u2);
+void zbuffillGL4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v2, float *v3, float *v4);
+void zbuf_init_span(ZSpan *zspan);
+void zbuf_add_to_span(ZSpan *zspan, float *v1, float *v2);
 
+void zbuf_project_cache_clear(ZbufProjectCache *cache, int size);
+int zbuf_shadow_project(ZbufProjectCache *cache, int index, float winmat[][4], float *co, float *ho);
+void zbuffer_part_bounds(struct Render *re, struct RenderPart *pa, float *bounds, float border);
+int zbuf_part_project(ZbufProjectCache *cache, int index, float winmat[][4], float *bounds, float *co, float *ho);
+int zbuf_bucketpart_project(int index, float winmat[][4], float *bounds, float *co, float *ho);
+void zmask_rect(int *rectz, int *rectp, int xs, int ys, int neg);
+APixstr *addpsmainA(struct ListBase *lb);
+void freepsA(struct ListBase *lb);
+APixstr *addpsA(ZSpan *zspan);
+
+int zbuffer_abuf(struct Render *re, struct RenderPart *pa, APixstr *APixbuf, struct ListBase *apsmbase, struct RenderLayer *rl, unsigned int lay);
+void copyto_abufz(Render *re, RenderPart *pa, int *arectz, int *rectmask, int sample);
+
 #endif
 

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-29 18:07:06 UTC (rev 15869)
+++ branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c	2008-07-29 18:31:34 UTC (rev 15870)
@@ -201,7 +201,9 @@
 
   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.*/
+  it works for envmap but not for dsm.
+  
+  note: this is more of a brute-forth method then env_rotate_scene uses.*/
 static void retransform_renderscene(Render *re, float newview[4][4], float oldview[4][4], ShadBuf *buf, int mode)
 {
 	VlakRen *vlak;
@@ -214,7 +216,7 @@
 	int i, j, a;
 	
 	if (mode == 0) {
-		Mat4SwapMat4((float*)newview, (float*)oldview);
+		MTC_Mat4SwapMat4((float*)newview, (float*)oldview);
 	}
 
 	MTC_Mat4Invert(viewinv, oldview);
@@ -222,13 +224,12 @@
 	Mat3CpyMat4(mat, newview);
 	
 	for (obi=re->instancetable.first; obi; obi=obi->next) {
-		if(obi->flag & R_DUPLI_TRANSFORMED || obi->flag & R_TRANSFORMED) {
-			Mat4CpyMat4(mat4, obi->mat);
+		if(obi->flag & R_TRANSFORMED) {
 			MTC_Mat4MulMat4(mat4, obi->mat, viewinv);
 			MTC_Mat4MulMat4(obi->mat, mat4, newview);
 
-			Mat3CpyMat4(mat3, obi->mat);
-			Mat3Inv(obi->nmat, mat3);
+			MTC_Mat3CpyMat4(mat3, obi->mat);
+			MTC_Mat3Inv(obi->nmat, mat3);
 			Mat3Transp(obi->nmat);
 		}
 	}
@@ -266,28 +267,28 @@
 
 /* initialize the dsm render data.
    copied and trimmed down from env_copy_render()*/
-static Render *init_dsm_render(Render *re, Render *envre, ShadBuf *shb)
+static Render *init_dsm_render(Render *re, Render *dsmre, ShadBuf *shb)
 {
 	/* this flag has R_ZTRA in it for example */
-	envre->flag= re->flag;
+	dsmre->flag= re->flag;
 	
 	/* set up renderdata */
-	envre->r= re->r;
-	envre->r.mode &= ~(R_BORDER | R_PANORAMA | R_ORTHO | R_MBLUR);
-	envre->r.layers.first= envre->r.layers.last= NULL;
-	envre->r.filtertype= 0;
-	envre->r.xparts= envre->r.yparts= 2;
-	envre->r.bufflag= 0;
-	envre->r.size= shb->size;
-	envre->r.yasp= envre->r.xasp= 1;
+	dsmre->r= re->r;
+	dsmre->r.mode &= ~(R_BORDER | R_PANORAMA | R_ORTHO | R_MBLUR);
+	dsmre->r.layers.first= dsmre->r.layers.last= NULL;
+	dsmre->r.filtertype= 0;
+	dsmre->r.xparts= dsmre->r.yparts= 2;
+	dsmre->r.bufflag= 0;
+	dsmre->r.size= shb->size;
+	dsmre->r.yasp= dsmre->r.xasp= 1;
 	
-	RE_InitState(envre, NULL, &envre->r, shb->size, shb->size, NULL);
-	envre->scene= re->scene;	/* unsure about this... */
+	RE_InitState(dsmre, NULL, &dsmre->r, shb->size, shb->size, NULL);
+	dsmre->scene= re->scene;	/* unsure about this... */
 
-	envre->clipsta= shb->clipsta;
-	envre->clipend= shb->clipend;
+	dsmre->clipsta= shb->clipsta;
+	dsmre->clipend= shb->clipend;
 
-	return envre;
+	return dsmre;
 }
 
 #define MAX(x, y) (x) > (y) ? (x) : (y)
@@ -317,8 +318,6 @@
 		}
 	}
 
-	//printf("maxsamples: %d %d %d\n", maxsamples[0], maxsamples[1], maxsamples[2]);
-
 	for (x=0; x<buf->sizex; x++) {
 		for (y=0; y<buf->sizey; y++) {
 			tile = TCS_GetAndLockTile(buf, x/buf->tsizex, y/buf->tsizey, 0);
@@ -398,9 +397,6 @@
 		dbuf->tiley += 1;
 	}
 
-	bucketbuf = RE_BucketData(re, projmat, shb->size, shb->size, 
-		                      tilesize, tilesize, shb->soft+25, shb->soft+25, lay);
-
 	dbuf->vfunc_rect = MEM_mapallocN(sizeof(DSMTile)*dbuf->tilex*dbuf->tiley, "dsm tiles");
 
 	shb->dsmbuffer = dbuf;
@@ -479,9 +475,13 @@
 	/*transform scene from camera viewspace to lamp
 	  viewspace, this is necassary for texture evaluation.*/
 	retransform_renderscene(re2, shbview, review, shb, 1);	
-	project_renderdata(re2, projectverto, 0, 0, 1);	
 	DSM_set_imats(re2);
 
+	bucketbuf = RE_BucketData(re2, projmat, shb->size, shb->size, 
+					tilesize, tilesize, shb->soft+25, shb->soft+25, lay);
+
+	project_renderdata(re2, projectverto, 0, 0, 1);	
+
 	/*needed here because shadeinput stuff uses R*/
 	R = *re2;
 

Modified: branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf.c
===================================================================
--- branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf.c	2008-07-29 18:07:06 UTC (rev 15869)
+++ branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf.c	2008-07-29 18:31:34 UTC (rev 15870)
@@ -112,14 +112,14 @@
 }
 
 /* reset range for clipping */
-static void zbuf_init_span(ZSpan *zspan)
+void zbuf_init_span(ZSpan *zspan)
 {
 	zspan->miny1= zspan->miny2= zspan->recty+1;
 	zspan->maxy1= zspan->maxy2= -1;
 	zspan->minp1= zspan->maxp1= zspan->minp2= zspan->maxp2= NULL;
 }
 
-static void zbuf_add_to_span(ZSpan *zspan, float *v1, float *v2)
+void zbuf_add_to_span(ZSpan *zspan, float *v1, float *v2)
 {
 	float *minv, *maxv, *span;
 	float xx1, dx0, xs0;
@@ -215,7 +215,7 @@
 }
 
 /* based on Liang&Barsky, for clipping of pyramidical volume */
-static short cliptestf(float p, float q, float *u1, float *u2)
+short cliptestf(float p, float q, float *u1, float *u2)
 {
 	float r;
 
@@ -262,607 +262,8 @@
 	return c;
 }
 
-
-
-/* *************  ACCUMULATION ZBUF ************ */
-
-
-static APixstr *addpsmainA(ListBase *lb)
+int clipline(float *v1, float *v2)	/* return 0: do not draw */
 {
-	APixstrMain *psm;
-
-	psm= MEM_mallocN(sizeof(APixstrMain), "addpsmainA");
-	BLI_addtail(lb, psm);
-	psm->ps= MEM_callocN(4096*sizeof(APixstr),"pixstr");
-
-	return psm->ps;
-}
-
-static void freepsA(ListBase *lb)
-{
-	APixstrMain *psm, *psmnext;
-
-	for(psm= lb->first; psm; psm= psmnext) {
-		psmnext= psm->next;
-		if(psm->ps)
-			MEM_freeN(psm->ps);
-		MEM_freeN(psm);
-	}
-}
-
-static APixstr *addpsA(ZSpan *zspan)
-{
-	/* make new PS */
-	if(zspan->apsmcounter==0) {
-		zspan->curpstr= addpsmainA(zspan->apsmbase);
-		zspan->apsmcounter= 4095;
-	}
-	else {
-		zspan->curpstr++;
-		zspan->apsmcounter--;
-	}
-	return zspan->curpstr;
-}
-
-static void zbuffillAc4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v2, float *v3, float *v4)
-{
-	APixstr *ap, *apofs, *apn;
-	double zxd, zyd, zy0, zverg;
-	float x0,y0,z0;
-	float x1,y1,z1,x2,y2,z2,xx1;
-	//float vd1[3], vd2[3], vd3[3], cent[3], dfac;
-	float *span1, *span2;
-	int *rz, *rm, x, y;
-	int sn1, sn2, rectx, *rectzofs, *rectmaskofs, my0, my2, mask;
-
-	/* init */
-	zbuf_init_span(zspan);
-
-	/* set spans */
-	zbuf_add_to_span(zspan, v1, v2);
-	zbuf_add_to_span(zspan, v2, v3);
-	if(v4) {
-		zbuf_add_to_span(zspan, v3, v4);
-		zbuf_add_to_span(zspan, v4, v1);
-	}
-	else
-		zbuf_add_to_span(zspan, v3, v1);
-
-	/* clipped */
-	if(zspan->minp2==NULL || zspan->maxp2==NULL) return;
-
-	if(zspan->miny1 < zspan->miny2) my0= zspan->miny2; else my0= zspan->miny1;
-	if(zspan->maxy1 > zspan->maxy2) my2= zspan->maxy2; else my2= zspan->maxy1;
-
-	if(my2<my0) return;
-
-	 /*  //experimental face margining code
-	cent[0] = (v1[0] + v2[0] + v3[0]) / 3.0f;
-	cent[1] = (v1[1] + v2[1] + v3[1]) / 3.0f;
-	cent[2] = (v1[2] + v2[2] + v3[2]) / 3.0f;
-
-	VecSubf(vd1, v1, cent);
-	VecSubf(vd2, v2, cent);
-	VecSubf(vd3, v3, cent);
-
-	dfac = 10.0f; //(float)G.rt / 50.0f;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list