38 |
|
static void |
39 |
|
prog_show(double frac) |
40 |
|
{ |
41 |
< |
char pbar[256]; |
42 |
< |
int nchars; |
41 |
> |
static unsigned call_cnt = 0; |
42 |
> |
static char lastc[] = "-\\|/"; |
43 |
> |
char pbar[256]; |
44 |
> |
int nchars; |
45 |
|
|
46 |
< |
if (do_prog <= 0) return; |
46 |
> |
if (do_prog <= 1) return; |
47 |
|
if (do_prog > sizeof(pbar)-2) |
48 |
|
do_prog = sizeof(pbar)-2; |
49 |
|
if (frac < 0) frac = 0; |
50 |
< |
else if (frac > 1) frac = 1; |
51 |
< |
nchars = do_prog*frac + .5; |
50 |
> |
else if (frac >= 1) frac = .9999; |
51 |
> |
nchars = do_prog*frac; |
52 |
|
pbar[0] = '\r'; |
53 |
|
memset(pbar+1, '*', nchars); |
54 |
< |
memset(pbar+1+nchars, '-', do_prog-nchars); |
54 |
> |
pbar[nchars+1] = lastc[call_cnt++ & 3]; |
55 |
> |
memset(pbar+2+nchars, '-', do_prog-nchars-1); |
56 |
|
pbar[do_prog+1] = '\0'; |
57 |
|
fputs(pbar, stderr); |
58 |
|
} |
59 |
|
|
60 |
|
/* Finish progress bar */ |
61 |
< |
#define prog_done() if (do_prog) fputc('\n',stderr); else |
61 |
> |
static void |
62 |
> |
prog_done(void) |
63 |
> |
{ |
64 |
> |
int n = do_prog; |
65 |
|
|
66 |
+ |
if (n <= 1) return; |
67 |
+ |
fputc('\r', stderr); |
68 |
+ |
while (n--) |
69 |
+ |
fputc(' ', stderr); |
70 |
+ |
fputc('\r', stderr); |
71 |
+ |
} |
72 |
+ |
|
73 |
|
/* Return angle basis corresponding to the given name */ |
74 |
|
static ANGLE_BASIS * |
75 |
|
get_basis(const char *bn) |
207 |
|
double sum; |
208 |
|
int i, j, n; |
209 |
|
|
210 |
+ |
initurand(npsamps); |
211 |
|
SDclearBSDF(&bsd, fname); /* load BSDF file */ |
212 |
|
if ((ec = SDloadFile(&bsd, fname)) != SDEnone) |
213 |
|
goto err; |
380 |
|
|
381 |
|
sum += eval_rbfrep(rbf, vout); |
382 |
|
} |
383 |
< |
fo_getvec(vout, j+.5, abp); /* use centered secant */ |
370 |
< |
bsdfarr[j*abp->nangles + i] = sum / (npsamps*vout[2]); |
383 |
> |
bsdfarr[j*abp->nangles + i] = sum / (double)npsamps; |
384 |
|
} |
385 |
|
if (rbf != NULL) |
386 |
|
free(rbf); |