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

Comparing ray/src/util/rmtxop.c (file contents):
Revision 2.30 by greg, Fri Dec 8 00:12:31 2023 UTC vs.
Revision 2.31 by greg, Tue Dec 19 00:39:03 2023 UTC

# Line 162 | Line 162 | checksymbolic(ROPMAT *rop)
162   {
163          const int       nc = rop->mtx->ncomp;
164          const int       dt = rop->mtx->dtype;
165 +        double          cf = 1;
166          int             i, j;
167                                          /* check suffix => reference file */
168          if (strchr(rop->preop.csym, '.') > rop->preop.csym)
# Line 182 | Line 183 | checksymbolic(ROPMAT *rop)
183                  int     comp = 0;
184                  switch (rop->preop.csym[j]) {
185                  case 'B':
186 +                case 'b':
187                          ++comp;
188                          /* fall through */
189                  case 'G':
190 +                case 'g':
191                          ++comp;
192                          /* fall through */
193                  case 'R':
194 +                case 'r':
195 +                        if (rop->preop.csym[j] <= 'Z')
196 +                                cf = 1./WHTEFFICACY;
197                          if (dt == DTxyze) {
198                                  for (i = 3; i--; )
199 <                                        rop->preop.cmat[j*nc+i] = 1./WHTEFFICACY *
194 <                                                        xyz2rgbmat[comp][i];
199 >                                        rop->preop.cmat[j*nc+i] = cf*xyz2rgbmat[comp][i];
200                          } else if (nc == 3)
201                                  rop->preop.cmat[j*nc+comp] = 1.;
202                          else
203                                  rgbrow(rop, j, comp);
204                          break;
205                  case 'Z':
206 +                case 'z':
207                          ++comp;
208                          /* fall through */
209                  case 'Y':
210 +                case 'y':
211                          ++comp;
212                          /* fall through */
213                  case 'X':
214 +                case 'x':
215 +                        if ((rop->preop.csym[j] <= 'Z') & (dt != DTxyze))
216 +                                cf = WHTEFFICACY;
217                          if (dt == DTxyze) {
218                                  rop->preop.cmat[j*nc+comp] = 1.;
219                          } else if (nc == 3) {
# Line 215 | Line 225 | checksymbolic(ROPMAT *rop)
225                          else
226                                  xyzrow(rop, j, comp);
227  
228 <                        for (i = nc*(dt != DTxyze); i--; )
229 <                                rop->preop.cmat[j*nc+i] *= WHTEFFICACY;
228 >                        for (i = nc*(cf != 1); i--; )
229 >                                rop->preop.cmat[j*nc+i] *= cf;
230                          break;
231                  case 'S':               /* scotopic (il)luminance */
232 +                        cf = WHTSCOTOPIC;
233 +                        /* fall through */
234 +                case 's':
235                          sensrow(rop, j, scolor2scotopic);
236 <                        for (i = nc; i--; )
237 <                                rop->preop.cmat[j*nc+i] *= WHTSCOTOPIC;
236 >                        for (i = nc*(cf != 1); i--; )
237 >                                rop->preop.cmat[j*nc+i] *= cf;
238                          break;
239                  case 'M':               /* melanopic (il)luminance */
240 +                        cf = WHTMELANOPIC;
241 +                        /* fall through */
242 +                case 'm':
243                          sensrow(rop, j, scolor2melanopic);
244 <                        for (i = nc; i--; )
245 <                                rop->preop.cmat[j*nc+i] *= WHTMELANOPIC;
244 >                        for (i = nc*(cf != 1); i--; )
245 >                                rop->preop.cmat[j*nc+i] *= cf;
246                          break;
247                  case 'A':               /* average component */
248 +                case 'a':
249                          for (i = nc; i--; )
250                                  rop->preop.cmat[j*nc+i] = 1./(double)nc;
251                          break;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines