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; |