[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