--- ray/src/rt/rtrace.c 2011/04/06 00:14:26 2.65 +++ ray/src/rt/rtrace.c 2016/08/18 00:52:48 2.70 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rtrace.c,v 2.65 2011/04/06 00:14:26 greg Exp $"; +static const char RCSid[] = "$Id: rtrace.c,v 2.70 2016/08/18 00:52:48 greg Exp $"; #endif /* * rtrace.c - program and variables for individual ray tracing. @@ -114,7 +114,7 @@ rtrace( /* trace rays from file */ ) { unsigned long vcount = (hresolu > 1) ? (unsigned long)hresolu*vresolu - : vresolu; + : (unsigned long)vresolu; long nextflush = (vresolu > 0) & (hresolu > 1) ? 0 : hresolu; FILE *fp; double d; @@ -410,12 +410,12 @@ getvec( /* get a vector from fp */ } break; case 'f': /* binary float */ - if (fread((char *)vf, sizeof(float), 3, fp) != 3) + if (getbinary(vf, sizeof(float), 3, fp) != 3) return(-1); VCOPY(vec, vf); break; case 'd': /* binary double */ - if (fread((char *)vd, sizeof(double), 3, fp) != 3) + if (getbinary(vd, sizeof(double), 3, fp) != 3) return(-1); VCOPY(vec, vd); break; @@ -519,7 +519,7 @@ oputv( /* print value */ setcolr(cout, colval(r->rcol,RED), colval(r->rcol,GRN), colval(r->rcol,BLU)); - fwrite(cout, sizeof(cout), 1, stdout); + putbinary(cout, sizeof(cout), 1, stdout); return; } cval[0] = colval(r->rcol,RED); @@ -642,8 +642,12 @@ oputW( /* print coefficient */ ) { RREAL contr[3]; + /* shadow ray not on source? */ + if (r->rsrc >= 0 && source[r->rsrc].so != r->ro) + setcolor(contr, 0.0, 0.0, 0.0); + else + raycontrib(contr, r, PRIMARY); - raycontrib(contr, r, PRIMARY); (*putreal)(contr, 3); } @@ -708,15 +712,25 @@ puta( /* print ascii value(s) */ static void putd(RREAL *v, int n) /* print binary double(s) */ { - if (sizeof(RREAL) != sizeof(double)) +#ifdef SMLFLT + double da[3]; + int i; + + if (n > 3) error(INTERNAL, "code error in putd()"); - fwrite(v, sizeof(RREAL), n, stdout); + for (i = n; i--; ) + da[i] = v[i]; + putbinary(da, sizeof(double), n, stdout); +#else + putbinary(v, sizeof(RREAL), n, stdout); +#endif } static void putf(RREAL *v, int n) /* print binary float(s) */ { +#ifndef SMLFLT float fa[3]; int i; @@ -724,5 +738,8 @@ putf(RREAL *v, int n) /* print binary float(s) */ error(INTERNAL, "code error in putf()"); for (i = n; i--; ) fa[i] = v[i]; - fwrite(fa, sizeof(float), n, stdout); + putbinary(fa, sizeof(float), n, stdout); +#else + putbinary(v, sizeof(RREAL), n, stdout); +#endif }