From 518d3b2c36fd5355ebb0e5bcde76e628f9ac1eab Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sun, 20 Jan 2008 14:50:30 +0000 Subject: [PATCH] Two fixes for yesterday commit, new Mist pass: - non OSA case didn't work - ztransp adding was accidentally using an incorrect alpha value NOTE: allmost all pass types rendered in OSA with a filter (not box!) were incorrectly added on solid layers. Like diffuse, AO, etc. --- source/blender/render/intern/source/rendercore.c | 4 ++++ source/blender/render/intern/source/zbuf.c | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index dbe149115d9..e151151b0d2 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -484,6 +484,10 @@ static void add_passes(RenderLayer *rl, int offset, ShadeInput *shi, ShadeResult *fp= (float)shi->obr->ob->index; } break; + case SCE_PASS_MIST: + fp= rpass->rect + offset; + *fp= shr->mist; + break; } if(col) { fp= rpass->rect + pixsize*offset; diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c index 223653ddf07..3779f238102 100644 --- a/source/blender/render/intern/source/zbuf.c +++ b/source/blender/render/intern/source/zbuf.c @@ -3790,6 +3790,7 @@ unsigned short *zbuffer_transp_shade(RenderPart *pa, RenderLayer *rl, float *pas add_transp_speed(rl, od, ssamp.shr[0].winspeed, pass[3], rdrect); } else { + float alpha= 0.0f; short filled, *sp= (short *)(ztramask+od); /* for each mask-sample we alpha-under colors. then in end it's added using filter */ @@ -3812,17 +3813,21 @@ unsigned short *zbuffer_transp_shade(RenderPart *pa, RenderLayer *rl, float *pas } } + /* note; cannot use pass[3] for alpha due to filtermask */ for(a=0; arectx); + alpha+= samp_shr[a].combined[3]; } if(addpassflag) { + alpha*= sampalpha; + /* merge all in one, and then add */ merge_transp_passes(rl, samp_shr); - add_transp_passes(rl, od, samp_shr, pass[3]); + add_transp_passes(rl, od, samp_shr, alpha); if(addpassflag & SCE_PASS_VECTOR) - add_transp_speed(rl, od, samp_shr[0].winspeed, pass[3], rdrect); + add_transp_speed(rl, od, samp_shr[0].winspeed, alpha, rdrect); } } }