Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2004-04-29 20:20:34 +0400
committerTon Roosendaal <ton@blender.org>2004-04-29 20:20:34 +0400
commit97f2cf05f595e293bd313de55edaea169fa81315 (patch)
tree2f93c3d843201fcf9c78685f79ba41f4f3c38a03
parentd6eeceb83d06a82f14301b8204e320cb396b6db5 (diff)
Fix #1207
Flag for 'only shadow' was still working when lamp type switched to Hemi. Also 'only shadow' didnt work yet for ray_shadow Spot lamp.
-rw-r--r--source/blender/render/intern/source/rendercore.c49
-rw-r--r--source/blender/renderconverter/intern/convertBlenderScene.c2
2 files changed, 26 insertions, 25 deletions
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 224714b0956..8669e820842 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -1927,32 +1927,33 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr)
if(i>0.0 && (R.r.mode & R_SHADOW)) {
if(ma->mode & MA_SHADOW) {
-
- if(lar->shb) {
- shadfac[3] = testshadowbuf(lar->shb, shi->co, inp);
- }
- else if(lar->type==LA_HEMI); // no shadow
- else if(lar->mode & LA_SHAD_RAY) {
- // this extra 0.001 prevents boundary cases (shadow on smooth sphere)
- if((shi->vlr->n[0]*lv[0] + shi->vlr->n[1]*lv[1] + shi->vlr->n[2]*lv[2]) > -0.001)
- ray_shadow(shi, lar, shadfac);
- else shadfac[3]= 0.0;
- }
-
- /* warning, here it skips the loop */
- if(lar->mode & LA_ONLYSHADOW) {
-
- shadfac[3]= i*lar->energy*(1.0-shadfac[3]);
- shr->diff[0] -= shadfac[3];
- shr->diff[1] -= shadfac[3];
- shr->diff[2] -= shadfac[3];
+ if(lar->type==LA_HEMI); // no shadow
+ else {
+ if(lar->shb) {
+ shadfac[3] = testshadowbuf(lar->shb, shi->co, inp);
+ }
+ else if(lar->mode & LA_SHAD_RAY) {
+ // this extra 0.001 prevents boundary cases (shadow on smooth sphere)
+ if((shi->vlr->n[0]*lv[0] + shi->vlr->n[1]*lv[1] + shi->vlr->n[2]*lv[2]) > -0.001)
+ ray_shadow(shi, lar, shadfac);
+ else shadfac[3]= 0.0;
+ }
+
+ /* warning, here it skips the loop */
+ if(lar->mode & LA_ONLYSHADOW) {
+
+ shadfac[3]= i*lar->energy*(1.0-shadfac[3]);
+ shr->diff[0] -= shadfac[3];
+ shr->diff[1] -= shadfac[3];
+ shr->diff[2] -= shadfac[3];
+
+ continue;
+ }
- continue;
+ if(shadfac[3]==0.0) continue;
+
+ i*= shadfac[3];
}
-
- if(shadfac[3]==0.0) continue;
-
- i*= shadfac[3];
}
}
diff --git a/source/blender/renderconverter/intern/convertBlenderScene.c b/source/blender/renderconverter/intern/convertBlenderScene.c
index 47f70f64e13..3494874314d 100644
--- a/source/blender/renderconverter/intern/convertBlenderScene.c
+++ b/source/blender/renderconverter/intern/convertBlenderScene.c
@@ -1763,7 +1763,7 @@ void RE_add_render_lamp(Object *ob, int doshadbuf)
lar->spottexfac= 1.0/(xn);
if(lar->mode & LA_ONLYSHADOW) {
- if((lar->mode & LA_SHAD)==0) lar->mode -= LA_ONLYSHADOW;
+ if((lar->mode & (LA_SHAD|LA_SHAD_RAY))==0) lar->mode -= LA_ONLYSHADOW;
}
}