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

Comparing ray/src/util/rmatrix.c (file contents):
Revision 2.51 by greg, Fri Mar 4 02:07:34 2022 UTC vs.
Revision 2.52 by greg, Fri Mar 4 17:17:28 2022 UTC

# Line 137 | Line 137 | get_dminfo(char *s, void *p)
137                  return(0);
138          }
139          if (isexpos(s)) {
140 <                double  d = exposval(s);
141 <                scalecolor(ip->cexp, d);
140 >                float   f = exposval(s);
141 >                scalecolor(ip->cexp, f);
142                  return(0);
143          }
144          if (iscolcor(s)) {
# Line 410 | Line 410 | rmx_write_float(const RMATRIX *rm, FILE *fp)
410   static int
411   rmx_write_double(const RMATRIX *rm, FILE *fp)
412   {
413 <        int     i, j;
413 >        int     i;
414  
415          for (i = 0; i < rm->nrows; i++)
416 <            for (j = 0; j < rm->ncols; j++)
417 <                if (putbinary(&rmx_lval(rm,i,j,0), sizeof(double), rm->ncomp, fp) != rm->ncomp)
416 >                if (putbinary(&rmx_lval(rm,i,0,0), sizeof(double)*rm->ncomp,
417 >                                        rm->ncols, fp) != rm->ncols)
418                          return(0);
419          return(1);
420   }
# Line 462 | Line 462 | findCIEprims(const char *info)
462   int
463   rmx_write(const RMATRIX *rm, int dtype, FILE *fp)
464   {
465        RMATRIX *mydm = NULL;
465          int     ok = 1;
466  
467 <        if (!rm | !fp)
467 >        if (!rm | !fp || !rm->mtx)
468                  return(0);
469   #ifdef getc_unlocked
470          flockfile(fp);
# Line 485 | Line 484 | rmx_write(const RMATRIX *rm, int dtype, FILE *fp)
484                  fprintf(fp, "NCOLS=%d\n", rm->ncols);
485                  fprintf(fp, "NCOMP=%d\n", rm->ncomp);
486          } else if (rm->ncomp != 3) {            /* wrong # components? */
487 <                double  cmtx[3];
487 >                CMATRIX *cm;                    /* convert & write */
488                  if (rm->ncomp != 1)             /* only convert grayscale */
489                          return(0);
490 <                cmtx[0] = cmtx[1] = cmtx[2] = 1;
492 <                mydm = rmx_transform(rm, 3, cmtx);
493 <                if (!mydm)
490 >                if (!(cm = cm_from_rmatrix(rm)))
491                          return(0);
492 <                rm = mydm;
492 >                fputformat(cm_fmt_id[dtype], fp);
493 >                fputc('\n', fp);
494 >                ok = cm_write(cm, dtype, fp);
495 >                cm_free(cm);
496 >                return(ok);
497          }
498          if ((dtype == DTfloat) | (dtype == DTdouble))
499                  fputendian(fp);                 /* important to record */
# Line 520 | Line 521 | rmx_write(const RMATRIX *rm, int dtype, FILE *fp)
521   #ifdef getc_unlocked
522          funlockfile(fp);
523   #endif
523        if (mydm)
524                rmx_free(mydm);
524          return(ok);
525   }
526  
# Line 534 | Line 533 | rmx_identity(const int dim, const int n)
533  
534          if (!rid)
535                  return(NULL);
536 <        memset(rid->mtx, 0, sizeof(rid->mtx[0])*n*dim*dim);
536 >        memset(rid->mtx, 0, array_size(rid));
537          for (i = dim; i--; )
538              for (k = n; k--; )
539                  rmx_lval(rid,i,i,k) = 1;
# Line 554 | Line 553 | rmx_copy(const RMATRIX *rm)
553                  return(NULL);
554          rmx_addinfo(dnew, rm->info);
555          dnew->dtype = rm->dtype;
556 <        memcpy(dnew->mtx, rm->mtx,
558 <                sizeof(rm->mtx[0])*rm->ncomp*rm->nrows*rm->ncols);
556 >        memcpy(dnew->mtx, rm->mtx, array_size(dnew));
557          return(dnew);
558   }
559  
# Line 788 | Line 786 | cm_from_rmatrix(const RMATRIX *rm)
786          int     i, j;
787          CMATRIX *cnew;
788  
789 <        if (!rm || rm->ncomp != 3)
789 >        if (!rm || !rm->mtx | ((rm->ncomp != 3) & (rm->ncomp != 1)))
790                  return(NULL);
791          cnew = cm_alloc(rm->nrows, rm->ncols);
792          if (!cnew)
# Line 796 | Line 794 | cm_from_rmatrix(const RMATRIX *rm)
794          for (i = cnew->nrows; i--; )
795              for (j = cnew->ncols; j--; ) {
796                  COLORV  *cv = cm_lval(cnew,i,j);
797 <                cv[0] = (COLORV)rmx_lval(rm,i,j,0);
798 <                cv[1] = (COLORV)rmx_lval(rm,i,j,1);
799 <                cv[2] = (COLORV)rmx_lval(rm,i,j,2);
797 >                if (rm->ncomp == 1)
798 >                    cv[0] = cv[1] = cv[2] = (COLORV)rmx_lval(rm,i,j,0);
799 >                else {
800 >                    cv[0] = (COLORV)rmx_lval(rm,i,j,0);
801 >                    cv[1] = (COLORV)rmx_lval(rm,i,j,1);
802 >                    cv[2] = (COLORV)rmx_lval(rm,i,j,2);
803 >                }
804              }
805          return(cnew);
806   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines