87 |
|
static void tabin(RAY *r); |
88 |
|
static void ourtrace(RAY *r); |
89 |
|
|
90 |
< |
static void putscolor(COLORV *scol); |
90 |
> |
static void putscolor(COLORV *scol, double sf); |
91 |
|
|
92 |
|
static oputf_t *ray_out[32], *every_out[32]; |
93 |
|
static putf_t *putreal; |
684 |
|
RAY *r |
685 |
|
) |
686 |
|
{ |
687 |
< |
RREAL cval[3]; |
688 |
< |
|
689 |
< |
cval[0] = colval(r->mcol,RED); |
690 |
< |
cval[1] = colval(r->mcol,GRN); |
691 |
< |
cval[2] = colval(r->mcol,BLU); |
692 |
< |
(*putreal)(cval, 3); |
687 |
> |
putscolor(r->mcol, out_scalefactor); |
688 |
|
} |
689 |
|
|
690 |
|
|
708 |
|
copyscolor(cdiff, r->rcol); |
709 |
|
sopscolor(cdiff, -=, r->mcol); |
710 |
|
|
711 |
< |
putscolor(cdiff); |
711 |
> |
putscolor(cdiff, out_scalefactor); |
712 |
|
} |
713 |
|
|
714 |
|
|
726 |
|
RAY *r |
727 |
|
) |
728 |
|
{ |
729 |
< |
putscolor(r->rcol); |
729 |
> |
putscolor(r->rcol, out_scalefactor); |
730 |
|
} |
731 |
|
|
732 |
|
|
739 |
|
|
740 |
|
raycontrib(contr, r, PRIMARY); |
741 |
|
smultscolor(contr, r->rcol); |
742 |
< |
putscolor(contr); |
742 |
> |
putscolor(contr, out_scalefactor); |
743 |
|
} |
744 |
|
|
745 |
|
|
856 |
|
else |
857 |
|
raycontrib(contr, r, PRIMARY); |
858 |
|
|
859 |
< |
putscolor(contr); |
859 |
> |
putscolor(contr, 1.); |
860 |
|
} |
861 |
|
|
862 |
|
|
921 |
|
putd(RREAL *v, int n) /* output binary double(s) */ |
922 |
|
{ |
923 |
|
#ifdef SMLFLT |
924 |
< |
double da[3]; |
924 |
> |
double da[MAXCSAMP]; |
925 |
|
int i; |
926 |
|
|
927 |
< |
if (n > 3) |
927 |
> |
if (n > MAXCSAMP) |
928 |
|
error(INTERNAL, "code error in putd()"); |
929 |
|
for (i = n; i--; ) |
930 |
|
da[i] = v[i]; |
939 |
|
putf(RREAL *v, int n) /* output binary float(s) */ |
940 |
|
{ |
941 |
|
#ifndef SMLFLT |
942 |
< |
float fa[3]; |
942 |
> |
float fa[MAXCSAMP]; |
943 |
|
int i; |
944 |
|
|
945 |
< |
if (n > 3) |
945 |
> |
if (n > MAXCSAMP) |
946 |
|
error(INTERNAL, "code error in putf()"); |
947 |
|
for (i = n; i--; ) |
948 |
|
fa[i] = v[i]; |
954 |
|
|
955 |
|
|
956 |
|
static void |
957 |
< |
putscolor(COLORV *scol) /* output (spectral) color */ |
957 |
> |
putscolor(COLORV *scol, double sf) /* output (spectral) color */ |
958 |
|
{ |
959 |
|
static COLORMAT xyz2myrgbmat; |
960 |
|
SCOLOR my_scol; |
961 |
|
COLOR col; |
962 |
< |
/* apply scalefactor if any */ |
963 |
< |
if (out_scalefactor != 1.) { |
964 |
< |
copyscolor(my_scol, scol); |
970 |
< |
scalescolor(my_scol, out_scalefactor); |
971 |
< |
scol = my_scol; |
972 |
< |
} |
973 |
< |
if (sens_curve != NULL) { /* single channel output */ |
974 |
< |
RREAL v = (*sens_curve)(scol); |
962 |
> |
/* single channel output? */ |
963 |
> |
if (sens_curve != NULL) { |
964 |
> |
RREAL v = (*sens_curve)(scol) * sf; |
965 |
|
(*putreal)(&v, 1); |
966 |
|
return; |
967 |
+ |
} |
968 |
+ |
if (sf != 1.) { /* apply scalefactor if any */ |
969 |
+ |
copyscolor(my_scol, scol); |
970 |
+ |
scalescolor(my_scol, sf); |
971 |
+ |
scol = my_scol; |
972 |
|
} |
973 |
|
if (out_prims == NULL) { /* full spectral reporting */ |
974 |
|
if (outform == 'c') { |