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.53 by greg, Sat Mar 5 01:45:21 2022 UTC vs.
Revision 2.57 by greg, Mon Mar 14 23:28:14 2022 UTC

# Line 206 | Line 206 | rmx_load_double(RMATRIX *rm, FILE *fp)
206   {
207          int     i;
208   #ifdef MAP_FILE
209 <        long    pos;            /* map memory to file if possible */
209 >        long    pos;            /* map memory for file > 1MB if possible */
210          if (!rm->swapin && array_size(rm) >= 1L<<20 &&
211                          (pos = ftell(fp)) >= 0 && !(pos % sizeof(double))) {
212                  rm->mapped = mmap(NULL, array_size(rm)+pos, PROT_READ|PROT_WRITE,
# Line 214 | Line 214 | rmx_load_double(RMATRIX *rm, FILE *fp)
214                  if (rm->mapped != MAP_FAILED) {
215                          rm->mtx = (double *)rm->mapped + pos/sizeof(double);
216                          return(1);
217 <                }
217 >                }               /* else fall back on reading into memory */
218                  rm->mapped = NULL;
219          }
220   #endif
# Line 241 | Line 241 | rmx_load_rgbe(RMATRIX *rm, FILE *fp)
241          if (!rmx_prepare(rm))
242                  return(0);
243          for (i = 0; i < rm->nrows; i++) {
244 <            double      *dp = rmx_lval(rm,i,j);
244 >            double      *dp = rmx_lval(rm,i,0);
245              if (freadscan(scan, rm->ncols, fp) < 0) {
246                  free(scan);
247                  return(0);
# Line 436 | Line 436 | rmx_write_rgbe(const RMATRIX *rm, FILE *fp)
436          for (i = 0; i < rm->nrows; i++) {
437              for (j = rm->ncols; j--; ) {
438                  const double    *dp = rmx_lval(rm,i,j);
439 <                setcolr(scan[j], dp[0], dp[1], dp[2]);
439 >                if (rm->ncomp == 1)
440 >                        setcolr(scan[j], dp[0], dp[0], dp[0]);
441 >                else
442 >                        setcolr(scan[j], dp[0], dp[1], dp[2]);
443              }
444              if (fwritecolrs(scan, rm->ncols, fp) < 0) {
445                  free(scan);
# Line 489 | Line 492 | rmx_write(const RMATRIX *rm, int dtype, FILE *fp)
492                  fprintf(fp, "NROWS=%d\n", rm->nrows);
493                  fprintf(fp, "NCOLS=%d\n", rm->ncols);
494                  fprintf(fp, "NCOMP=%d\n", rm->ncomp);
495 <        } else if (rm->ncomp != 3) {            /* wrong # components? */
496 <                CMATRIX *cm;                    /* convert & write */
494 <                if (rm->ncomp != 1)             /* only convert grayscale */
495 <                        return(0);
496 <                if (!(cm = cm_from_rmatrix(rm)))
497 <                        return(0);
498 <                fputformat(cm_fmt_id[dtype], fp);
499 <                fputc('\n', fp);
500 <                ok = cm_write(cm, dtype, fp);
501 <                cm_free(cm);
502 <                return(ok);
503 <        }
495 >        } else if ((rm->ncomp != 3) & (rm->ncomp != 1))
496 >                return(0);                      /* wrong # components */
497          if ((dtype == DTfloat) | (dtype == DTdouble))
498                  fputendian(fp);                 /* important to record */
499          fputformat(cm_fmt_id[dtype], fp);
# Line 570 | Line 563 | RMATRIX *
563   rmx_transpose(const RMATRIX *rm)
564   {
565          RMATRIX *dnew;
566 <        int     i, j, k;
566 >        int     i, j;
567  
568          if (!rm)
569                  return(0);
# Line 590 | Line 583 | rmx_transpose(const RMATRIX *rm)
583                  rmx_addinfo(dnew, "Transposed rows and columns\n");
584          }
585          dnew->dtype = rm->dtype;
586 <        for (i = dnew->nrows; i--; )
587 <            for (j = dnew->ncols; j--; )
588 <                memcpy(rmx_lval(dnew,i,j), rmx_lval(rm,i,j),
586 >        for (j = dnew->ncols; j--; )
587 >            for (i = dnew->nrows; i--; )
588 >                memcpy(rmx_lval(dnew,i,j), rmx_lval(rm,j,i),
589                                  sizeof(double)*dnew->ncomp);
590          return(dnew);
591   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines