ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/rcomb.c
(Generate patch)

Comparing ray/src/util/rcomb.c (file contents):
Revision 2.2 by greg, Mon Dec 18 23:04:05 2023 UTC vs.
Revision 2.5 by greg, Tue Dec 19 20:38:38 2023 UTC

# Line 186 | Line 186 | checksymbolic(ROPMAT *rop)
186   {
187          const int       nc = rop->imx.ncomp;
188          const int       dt = rop->imx.dtype;
189 +        double          cf = 1;
190          int             i, j;
191                                          /* check suffix => reference file */
192          if (strchr(rop->preop.csym, '.') > rop->preop.csym)
# Line 206 | Line 207 | checksymbolic(ROPMAT *rop)
207                  int     comp = 0;
208                  switch (rop->preop.csym[j]) {
209                  case 'B':
210 +                case 'b':
211                          ++comp;
212                          /* fall through */
213                  case 'G':
214 +                case 'g':
215                          ++comp;
216                          /* fall through */
217                  case 'R':
218 +                case 'r':
219 +                        if (rop->preop.csym[j] <= 'Z')
220 +                                cf = 1./WHTEFFICACY;
221                          if (dt == DTxyze) {
222                                  for (i = 3; i--; )
223 <                                        rop->preop.cmat[j*nc+i] = 1./WHTEFFICACY *
218 <                                                        xyz2rgbmat[comp][i];
223 >                                        rop->preop.cmat[j*nc+i] = cf*xyz2rgbmat[comp][i];
224                          } else if (nc == 3)
225                                  rop->preop.cmat[j*nc+comp] = 1.;
226                          else
227                                  rgbrow(rop, j, comp);
228                          break;
229                  case 'Z':
230 +                case 'z':
231                          ++comp;
232                          /* fall through */
233                  case 'Y':
234 +                case 'y':
235                          ++comp;
236                          /* fall through */
237                  case 'X':
238 +                case 'x':
239 +                        if ((rop->preop.csym[j] <= 'Z') & (dt != DTxyze))
240 +                                cf = WHTEFFICACY;
241                          if (dt == DTxyze) {
242                                  rop->preop.cmat[j*nc+comp] = 1.;
243                          } else if (nc == 3) {
# Line 239 | Line 249 | checksymbolic(ROPMAT *rop)
249                          else
250                                  xyzrow(rop, j, comp);
251  
252 <                        for (i = nc*(dt != DTxyze); i--; )
253 <                                rop->preop.cmat[j*nc+i] *= WHTEFFICACY;
252 >                        for (i = nc*(cf != 1); i--; )
253 >                                rop->preop.cmat[j*nc+i] *= cf;
254                          break;
255                  case 'S':               /* scotopic (il)luminance */
256 +                        cf = WHTSCOTOPIC;
257 +                        /* fall through */
258 +                case 's':
259                          sensrow(rop, j, scolor2scotopic);
260 <                        for (i = nc; i--; )
261 <                                rop->preop.cmat[j*nc+i] *= WHTSCOTOPIC;
260 >                        for (i = nc*(cf != 1); i--; )
261 >                                rop->preop.cmat[j*nc+i] *= cf;
262                          break;
263                  case 'M':               /* melanopic (il)luminance */
264 +                        cf = WHTMELANOPIC;
265 +                        /* fall through */
266 +                case 'm':
267                          sensrow(rop, j, scolor2melanopic);
268 <                        for (i = nc; i--; )
269 <                                rop->preop.cmat[j*nc+i] *= WHTMELANOPIC;
268 >                        for (i = nc*(cf != 1); i--; )
269 >                                rop->preop.cmat[j*nc+i] *= cf;
270                          break;
271                  case 'A':               /* average component */
272 +                case 'a':
273                          for (i = nc; i--; )
274                                  rop->preop.cmat[j*nc+i] = 1./(double)nc;
275                          break;
# Line 267 | Line 284 | checksymbolic(ROPMAT *rop)
284          memcpy(rop->rmp->wlpart, WLPART, sizeof(rop->rmp->wlpart));
285          rop->rmp->ncomp = rop->preop.clen / nc;
286                                          /* decide on output type */
287 <        if (!strcmp(rop->preop.csym, "XYZ")) {
287 >        if (!strcasecmp(rop->preop.csym, "XYZ")) {
288                  if (dt <= DTspec)
289                          rop->rmp->dtype = DTxyze;
290 <        } else if (!strcmp(rop->preop.csym, "RGB")) {
290 >        } else if (!strcasecmp(rop->preop.csym, "RGB")) {
291                  if (dt <= DTspec)
292                          rop->rmp->dtype = DTrgbe;
293          } else if (rop->rmp->dtype == DTspec)
# Line 575 | Line 592 | combine_input(ROPMAT *res, FILE *fout)
592              RMATRIX     *mres = NULL;
593              for (i = 0; i < nmats; i++) {
594                  if (!rmx_load_row(mop[i].imx.mtx, &mop[i].imx, mop[i].infp)) {
595 <                        if (in_nrows <= 0)      /* normal end? */
595 >                        if (cur_row > in_nrows) /* unknown #input rows? */
596                                  goto loop_exit;
597                          fprintf(stderr, "%s: read error at row %d\n",
598                                          mop[i].inspec, cur_row);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines