diff options
author | Daniel Stokes <kupomail@gmail.com> | 2013-10-14 00:59:55 +0400 |
---|---|---|
committer | Daniel Stokes <kupomail@gmail.com> | 2013-10-14 00:59:55 +0400 |
commit | 0aa392d2ff4cc29f2e53485a6456a7deb838e1bb (patch) | |
tree | 50aa44367f0df077be6115c1f9deb85656018d4d /source/blender/render/intern/source/shadbuf.c | |
parent | 6167313105cd0b65ba777459ce9333ac51e0cb3b (diff) | |
parent | 2ce3bd0d672e7e26e1a8710444872ad6478a7565 (diff) |
Merged revisions 60248-60717 from trunk/blendersoc-2013-bge
Diffstat (limited to 'source/blender/render/intern/source/shadbuf.c')
-rw-r--r-- | source/blender/render/intern/source/shadbuf.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/source/blender/render/intern/source/shadbuf.c b/source/blender/render/intern/source/shadbuf.c index 0d85cfe78b7..0c3bf85cd24 100644 --- a/source/blender/render/intern/source/shadbuf.c +++ b/source/blender/render/intern/source/shadbuf.c @@ -1373,7 +1373,7 @@ float shadow_halo(LampRen *lar, const float p1[3], const float p2[3]) /* printf("start %x %x \n", (int)(0x7FFFFFFF*zf1), (int)(0x7FFFFFFF*zf2)); */ - while (1) { + do { lambda_o= lambda; if (lambda_x==lambda_y) { @@ -1394,7 +1394,13 @@ float shadow_halo(LampRen *lar, const float p1[3], const float p2[3]) } lambda = min_ff(lambda_x, lambda_y); - + + /* not making any progress? */ + if (lambda==lambda_o) break; + + /* clip to end of volume */ + lambda = min_ff(lambda, 1.0f); + zf= zf1 + lambda*(zf2-zf1); count+= (float)shb->totbuf; @@ -1409,10 +1415,9 @@ float shadow_halo(LampRen *lar, const float p1[3], const float p2[3]) lightcount+= readshadowbuf_halo(shb, shsample, x, y, z); } - /* break after sample, so it takes at least one */ - if (lambda==lambda_o || lambda>=1.0f) break; } - + while (lambda < 1.0f); + if (count!=0.0f) return (lightcount/count); return 0.0f; |