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.3 by greg, Tue Dec 19 00:39:03 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;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines