--- ray/src/rt/rpict.c 1993/11/24 14:28:08 2.35 +++ ray/src/rt/rpict.c 1994/12/21 09:51:56 2.40 @@ -1,4 +1,4 @@ -/* Copyright (c) 1992 Regents of the University of California */ +/* Copyright (c) 1994 Regents of the University of California */ #ifndef lint static char SCCSid[] = "$SunId$ LBL"; @@ -67,6 +67,8 @@ double srcsizerat = .25; /* maximum ratio source size double specthresh = .15; /* specular sampling threshold */ double specjitter = 1.; /* specular sampling jitter */ +int backvis = 1; /* back face visibility */ + int maxdepth = 6; /* maximum recursion depth */ double minweight = 5e-3; /* minimum ray weight */ @@ -155,7 +157,11 @@ report() /* report progress */ gethostname(hostname, sizeof(hostname)); #else times(&tbuf); +#ifdef _SC_CLK_TCK period = 1.0 / sysconf(_SC_CLK_TCK); +#else + period = 1.0 / 60.0; +#endif u = ( tbuf.tms_utime + tbuf.tms_cutime ) * period; s = ( tbuf.tms_stime + tbuf.tms_cstime ) * period; uname(&nambuf); @@ -496,7 +502,7 @@ int xres, y, xstep; b = fillsample(scanline, zline, 0, y, i, 0, b/2); else b = fillsample(scanline+i-xstep, - zline ? zline+i-xstep : NULL, + zline ? zline+i-xstep : (float *)NULL, i-xstep, y, xstep, 0, b/2); if (sd) *sd++ = nc & 1 ? bl : b; bl = b; @@ -524,7 +530,7 @@ int xres, y, ysize; zline[ysize] = zbar[ysize][i]; } - b = fillsample(vline, zbar[0] ? zline : NULL, + b = fillsample(vline, zbar[0] ? zline : (float *)NULL, i, y, 0, ysize, b/2); for (j = 1; j < ysize; j++) @@ -582,7 +588,8 @@ int b; /* recurse */ ncut += fillsample(colline, zline, x, y, xlen>>1, ylen>>1, (b-1)/2); - ncut += fillsample(colline+(len>>1), zline ? zline+(len>>1) : NULL, + ncut += fillsample(colline+(len>>1), + zline ? zline+(len>>1) : (float *)NULL, x+(xlen>>1), y+(ylen>>1), xlen-(xlen>>1), ylen-(ylen>>1), b/2); @@ -597,8 +604,8 @@ int x, y; /* pixel position */ { static RAY thisray; - if (viewray(thisray.rorg, thisray.rdir, &ourview, - (x+pixjitter())/hres, (y+pixjitter())/vres) < 0) { + if ((thisray.rmax = viewray(thisray.rorg, thisray.rdir, &ourview, + (x+pixjitter())/hres, (y+pixjitter())/vres)) < -FTINY) { setcolor(col, 0.0, 0.0, 0.0); return(0.0); } @@ -624,12 +631,12 @@ char *oldfile; int x, y; if (oldfile == NULL) - return(0); - + goto gotzip; + if ((fp = fopen(oldfile, "r")) == NULL) { sprintf(errmsg, "cannot open recover file \"%s\"", oldfile); error(WARNING, errmsg); - return(0); + goto gotzip; } #ifdef MSDOS setmode(fileno(fp), O_BINARY); @@ -642,7 +649,7 @@ char *oldfile; oldfile); error(WARNING, errmsg); fclose(fp); - return(0); + goto gotzip; } if (x != hres || y != vres) { @@ -666,6 +673,10 @@ char *oldfile; fclose(fp); unlink(oldfile); return(y); +gotzip: + if (fflush(stdout) == EOF) + error(SYSTEM, "error writing picture header"); + return(0); writerr: sprintf(errmsg, "write error during recovery of \"%s\"", oldfile); error(SYSTEM, errmsg);