| 52 |
|
#endif |
| 53 |
|
OBJECT traset[MAXTSET+1]={0}; /* trace include/exclude set */ |
| 54 |
|
|
| 55 |
+ |
static int Tflag = 0; /* source tracing enabled? */ |
| 56 |
+ |
|
| 57 |
|
static RAY thisray; /* for our convenience */ |
| 58 |
|
|
| 59 |
|
static FILE *inpfp = NULL; /* input stream pointer */ |
| 121 |
|
} |
| 122 |
|
|
| 123 |
|
|
| 124 |
+ |
static void |
| 125 |
+ |
trace_sources(void) /* trace rays to light sources, also */ |
| 126 |
+ |
{ |
| 127 |
+ |
int sn; |
| 128 |
+ |
|
| 129 |
+ |
for (sn = 0; sn < nsources; sn++) |
| 130 |
+ |
source[sn].sflags |= SFOLLOW; |
| 131 |
+ |
} |
| 132 |
+ |
|
| 133 |
+ |
|
| 134 |
|
void |
| 135 |
|
rtrace( /* trace rays from file */ |
| 136 |
|
char *fname, |
| 160 |
|
/* set up output */ |
| 161 |
|
if (castonly || every_out[0] != NULL) |
| 162 |
|
nproc = 1; /* don't bother multiprocessing */ |
| 163 |
+ |
if (Tflag && every_out[0] != NULL) |
| 164 |
+ |
trace_sources(); /* asking to trace light sources */ |
| 165 |
|
if ((nextflush > 0) & (nproc > nextflush)) { |
| 166 |
|
error(WARNING, "reducing number of processes to match flush interval"); |
| 167 |
|
nproc = nextflush; |
| 231 |
|
} |
| 232 |
|
|
| 233 |
|
|
| 220 |
– |
static void |
| 221 |
– |
trace_sources(void) /* trace rays to light sources, also */ |
| 222 |
– |
{ |
| 223 |
– |
int sn; |
| 224 |
– |
|
| 225 |
– |
for (sn = 0; sn < nsources; sn++) |
| 226 |
– |
source[sn].sflags |= SFOLLOW; |
| 227 |
– |
} |
| 228 |
– |
|
| 229 |
– |
|
| 234 |
|
int |
| 235 |
|
setrtoutput(void) /* set up output tables, return #comp */ |
| 236 |
|
{ |
| 245 |
|
do |
| 246 |
|
switch (*vs) { |
| 247 |
|
case 'T': /* trace sources */ |
| 248 |
< |
if (!vs[1]) break; |
| 245 |
< |
trace_sources(); |
| 248 |
> |
Tflag++; |
| 249 |
|
/* fall through */ |
| 250 |
|
case 't': /* trace */ |
| 251 |
|
if (!vs[1]) break; |