[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12843] trunk/blender/source/blender/ render/intern/source/sss.c:
Brecht Van Lommel
brechtvanlommel at pandora.be
Tue Dec 11 15:35:09 CET 2007
Revision: 12843
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12843
Author: blendix
Date: 2007-12-11 15:35:08 +0100 (Tue, 11 Dec 2007)
Log Message:
-----------
Bugfix for SSS crash with nan's.
Modified Paths:
--------------
trunk/blender/source/blender/render/intern/source/sss.c
Modified: trunk/blender/source/blender/render/intern/source/sss.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/sss.c 2007-12-11 14:19:05 UTC (rev 12842)
+++ trunk/blender/source/blender/render/intern/source/sss.c 2007-12-11 14:35:08 UTC (rev 12843)
@@ -234,11 +234,7 @@
float indexf, t, idxf;
int index;
- if(rr > (RD_TABLE_RANGE_2*RD_TABLE_RANGE_2)) {
- rd[0]= Rd_rsquare(ss[0], rr);
- rd[1]= Rd_rsquare(ss[1], rr);
- rd[2]= Rd_rsquare(ss[2], rr);
- }
+ if(rr > (RD_TABLE_RANGE_2*RD_TABLE_RANGE_2));
else if(rr > RD_TABLE_RANGE) {
rr= sqrt(rr);
indexf= rr*(RD_TABLE_SIZE/RD_TABLE_RANGE_2);
@@ -246,9 +242,12 @@
idxf= (float)index;
t= indexf - idxf;
- rd[0]= (ss[0]->tableRd2[index]*(1-t) + ss[0]->tableRd2[index+1]*t);
- rd[1]= (ss[1]->tableRd2[index]*(1-t) + ss[1]->tableRd2[index+1]*t);
- rd[2]= (ss[2]->tableRd2[index]*(1-t) + ss[2]->tableRd2[index+1]*t);
+ if(index >= 0 && index < RD_TABLE_SIZE) {
+ rd[0]= (ss[0]->tableRd2[index]*(1-t) + ss[0]->tableRd2[index+1]*t);
+ rd[1]= (ss[1]->tableRd2[index]*(1-t) + ss[1]->tableRd2[index+1]*t);
+ rd[2]= (ss[2]->tableRd2[index]*(1-t) + ss[2]->tableRd2[index+1]*t);
+ return;
+ }
}
else {
indexf= rr*(RD_TABLE_SIZE/RD_TABLE_RANGE);
@@ -256,10 +255,18 @@
idxf= (float)index;
t= indexf - idxf;
- rd[0]= (ss[0]->tableRd[index]*(1-t) + ss[0]->tableRd[index+1]*t);
- rd[1]= (ss[1]->tableRd[index]*(1-t) + ss[1]->tableRd[index+1]*t);
- rd[2]= (ss[2]->tableRd[index]*(1-t) + ss[2]->tableRd[index+1]*t);
+ if(index >= 0 && index < RD_TABLE_SIZE) {
+ rd[0]= (ss[0]->tableRd[index]*(1-t) + ss[0]->tableRd[index+1]*t);
+ rd[1]= (ss[1]->tableRd[index]*(1-t) + ss[1]->tableRd[index+1]*t);
+ rd[2]= (ss[2]->tableRd[index]*(1-t) + ss[2]->tableRd[index+1]*t);
+ return;
+ }
}
+
+ /* fallback to slow Rd computation */
+ rd[0]= Rd_rsquare(ss[0], rr);
+ rd[1]= Rd_rsquare(ss[1], rr);
+ rd[2]= Rd_rsquare(ss[2], rr);
}
static void build_Rd_table(ScatterSettings *ss)
More information about the Bf-blender-cvs
mailing list