[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13375] trunk/blender/source/blender/ render/intern:
Brecht Van Lommel
brechtvanlommel at pandora.be
Wed Jan 23 21:54:44 CET 2008
Revision: 13375
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13375
Author: blendix
Date: 2008-01-23 21:54:44 +0100 (Wed, 23 Jan 2008)
Log Message:
-----------
Bugfix to filter strands with solid correctly.
Modified Paths:
--------------
trunk/blender/source/blender/render/intern/include/rendercore.h
trunk/blender/source/blender/render/intern/include/zbuf.h
trunk/blender/source/blender/render/intern/source/rendercore.c
trunk/blender/source/blender/render/intern/source/strand.c
trunk/blender/source/blender/render/intern/source/zbuf.c
Modified: trunk/blender/source/blender/render/intern/include/rendercore.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/rendercore.h 2008-01-23 17:58:09 UTC (rev 13374)
+++ trunk/blender/source/blender/render/intern/include/rendercore.h 2008-01-23 20:54:44 UTC (rev 13375)
@@ -50,6 +50,7 @@
struct RenderPart;
struct RenderLayer;
struct ObjectRen;
+struct ListBase;
/* ------------------------------------------------------------------------- */
@@ -90,6 +91,8 @@
void zbufshade_sss_tile(struct RenderPart *pa);
+void addps(struct ListBase *lb, long *rd, int obi, int facenr, int z, unsigned short mask);
+
/* -------- ray.c ------- */
extern void freeraytree(Render *re);
Modified: trunk/blender/source/blender/render/intern/include/zbuf.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/zbuf.h 2008-01-23 17:58:09 UTC (rev 13374)
+++ trunk/blender/source/blender/render/intern/include/zbuf.h 2008-01-23 20:54:44 UTC (rev 13375)
@@ -50,7 +50,7 @@
void zbuffer_shadow(struct Render *re, float winmat[][4], struct LampRen *lar, int *rectz, int size, float jitx, float jity);
void zbuffer_solid(struct RenderPart *pa, unsigned int layer, short layflag, void (*fillfunc)(struct RenderPart*, struct ZSpan*, int, void*), void *data);
-unsigned short *zbuffer_transp_shade(struct RenderPart *pa, struct RenderLayer *rl, float *pass);
+unsigned short *zbuffer_transp_shade(struct RenderPart *pa, struct RenderLayer *rl, float *pass, struct ListBase *psmlist);
unsigned short *zbuffer_strands_shade(struct Render *re, struct RenderPart *pa, struct RenderLayer *rl, float *pass);
void convert_zbuf_to_distbuf(struct RenderPart *pa, struct RenderLayer *rl);
void zbuffer_sss(RenderPart *pa, unsigned int lay, void *handle, void (*func)(void*, int, int, int, int, int));
Modified: trunk/blender/source/blender/render/intern/source/rendercore.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rendercore.c 2008-01-23 17:58:09 UTC (rev 13374)
+++ trunk/blender/source/blender/render/intern/source/rendercore.c 2008-01-23 20:54:44 UTC (rev 13375)
@@ -631,7 +631,7 @@
lb->first= lb->last= NULL;
}
-static void addps(ListBase *lb, long *rd, int obi, int facenr, int z, unsigned short mask)
+void addps(ListBase *lb, long *rd, int obi, int facenr, int z, unsigned short mask)
{
PixStrMain *psm;
PixStr *ps, *last= NULL;
@@ -925,7 +925,7 @@
/* swap for live updates, and it is used in zbuf.c!!! */
SWAP(float *, rl->acolrect, rl->rectf);
- ztramask= zbuffer_transp_shade(pa, rl, rl->rectf);
+ ztramask= zbuffer_transp_shade(pa, rl, rl->rectf, &psmlist);
SWAP(float *, rl->acolrect, rl->rectf);
/* zbuffer transp only returns ztramask if there's solid rendered */
@@ -1147,7 +1147,7 @@
/* swap for live updates */
SWAP(float *, rl->acolrect, rl->rectf);
- zbuffer_transp_shade(pa, rl, rl->rectf);
+ zbuffer_transp_shade(pa, rl, rl->rectf, NULL);
SWAP(float *, rl->acolrect, rl->rectf);
fcol= rl->rectf; acol= rl->acolrect;
Modified: trunk/blender/source/blender/render/intern/source/strand.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/strand.c 2008-01-23 17:58:09 UTC (rev 13374)
+++ trunk/blender/source/blender/render/intern/source/strand.c 2008-01-23 20:54:44 UTC (rev 13375)
@@ -428,6 +428,7 @@
ShadeResult *result;
float *pass;
int *rectz, *outrectz;
+ long *rectdaps;
unsigned short *mask;
int rectx, recty;
int addpassflag, addzbuf, sample;
@@ -607,13 +608,33 @@
StrandBuffer *buffer= spart->segment->buffer;
ShadeResult *shr;
float /**pass,*/ t, s;
- int offset, zverg;
+ int offset, zverg, bufferz;
/* check again solid z-buffer */
offset = y*spart->rectx + x;
zverg= (int)z;
- if(zverg < spart->rectz[offset]) {
+ if(spart->rectdaps) {
+ /* find the z of the sample */
+ PixStr *ps;
+ long *rd= spart->rectdaps + offset;
+ int sample= (1<<spart->sample);
+
+ bufferz= 0x7FFFFFFF;
+
+ if(*rd) {
+ for(ps= (PixStr *)(*rd); ps; ps= ps->next) {
+ if(sample & ps->mask) {
+ bufferz= ps->z;
+ break;
+ }
+ }
+ }
+ }
+ else
+ bufferz= spart->rectz[offset];
+
+ if(zverg < bufferz) {
/* fill in output z-buffer if needed */
if(spart->addzbuf)
if(zverg < spart->outrectz[offset])
@@ -994,6 +1015,7 @@
spart.rectx= pa->rectx;
spart.recty= pa->recty;
spart.rectz= pa->rectz;
+ spart.rectdaps= pa->rectdaps;
spart.addpassflag= rl->passflag & ~(SCE_PASS_Z|SCE_PASS_COMBINED);
spart.addzbuf= rl->passflag & SCE_PASS_Z;
Modified: trunk/blender/source/blender/render/intern/source/zbuf.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/zbuf.c 2008-01-23 17:58:09 UTC (rev 13374)
+++ trunk/blender/source/blender/render/intern/source/zbuf.c 2008-01-23 20:54:44 UTC (rev 13375)
@@ -3693,7 +3693,7 @@
/* main render call to fill in pass the full transparent layer */
/* returns a mask, only if a) transp rendered and b) solid was rendered */
-unsigned short *zbuffer_transp_shade(RenderPart *pa, RenderLayer *rl, float *pass)
+unsigned short *zbuffer_transp_shade(RenderPart *pa, RenderLayer *rl, float *pass, ListBase *psmlist)
{
RenderResult *rr= pa->result;
ShadeSample ssamp;
@@ -3859,6 +3859,9 @@
*sp |= zrow[totface].mask;
if(filled==0)
break;
+
+ if(R.totstrand)
+ addps(psmlist, pa->rectdaps+od, zrow[totface].obi, zrow[totface].p, zrow[totface].z, zrow[totface].mask);
}
}
More information about the Bf-blender-cvs
mailing list