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.7 by greg, Tue Aug 5 21:45:05 2014 UTC vs.
Revision 2.12 by greg, Fri Jan 23 01:14:20 2015 UTC

# Line 59 | Line 59 | rmx_addinfo(RMATRIX *rm, const char *info)
59   {
60          if (!info || !*info)
61                  return(0);
62 <        if (!rm->info)
62 >        if (!rm->info) {
63                  rm->info = (char *)malloc(strlen(info)+1);
64 <        else
64 >                if (rm->info) rm->info[0] = '\0';
65 >        } else
66                  rm->info = (char *)realloc(rm->info,
67                                  strlen(rm->info)+strlen(info)+1);
68          if (!rm->info)
# Line 245 | Line 246 | rmx_load(const char *fname)
246          case DTascii:
247                  if (!rmx_load_ascii(dnew, fp))
248                          goto loaderr;
249 +                dnew->dtype = DTascii;          /* should leave double? */
250                  break;
251          case DTfloat:
252                  if (!rmx_load_float(dnew, fp))
# Line 355 | Line 357 | rmx_write_rgbe(const RMATRIX *rm, FILE *fp)
357   }
358  
359   /* Write matrix to file type indicated by dtype */
360 < long
360 > int
361   rmx_write(const RMATRIX *rm, int dtype, FILE *fp)
362   {
363          RMATRIX *mydm = NULL;
# Line 370 | Line 372 | rmx_write(const RMATRIX *rm, int dtype, FILE *fp)
372                  dtype = rm->dtype;
373          else if ((dtype == DTrgbe) & (rm->dtype == DTxyze))
374                  dtype = DTxyze;
375 <        else if ((dtype = DTxyze) & (rm->dtype == DTrgbe))
375 >        else if ((dtype == DTxyze) & (rm->dtype == DTrgbe))
376                  dtype = DTrgbe;
377          if ((dtype != DTrgbe) & (dtype != DTxyze)) {
378                  fprintf(fp, "NROWS=%d\n", rm->nrows);
# Line 408 | Line 410 | rmx_write(const RMATRIX *rm, int dtype, FILE *fp)
410          }
411          ok &= (fflush(fp) == 0);
412          rmx_free(mydm);
413 <        return(ftell(fp) * ok);         /* return # bytes written */
413 >        return(ok);
414   }
415  
416   /* Allocate and assign square identity matrix with n components */
# Line 416 | Line 418 | RMATRIX *
418   rmx_identity(const int dim, const int n)
419   {
420          RMATRIX *rid = rmx_alloc(dim, dim, n);
421 <        int     i;
421 >        int     i, k;
422  
423          if (rid == NULL)
424                  return(NULL);
425 <        memset(rid->mtx, 0, sizeof(rid->mtx[0])*dim*dim);
425 >        memset(rid->mtx, 0, sizeof(rid->mtx[0])*n*dim*dim);
426          for (i = dim; i--; )
427 <                rmx_lval(rid,i,i,0) = 1;
428 <        for (i = n; --i; )
427 <                memcpy(rid->mtx+i*(dim*dim), rid->mtx,
428 <                                sizeof(rid->mtx[0])*dim*dim);
427 >            for (k = n; k--; )
428 >                rmx_lval(rid,i,i,k) = 1;
429          return(rid);
430   }
431  
# Line 491 | Line 491 | rmx_multiply(const RMATRIX *m1, const RMATRIX *m2)
491                  rmx_addinfo(mres, rmx_mismatch_warn);
492          for (i = mres->nrows; i--; )
493              for (j = mres->ncols; j--; )
494 <                for (h = m1->ncols; h--; ) {
494 >                for (k = mres->ncomp; k--; ) {
495                      long double d = 0;
496 <                    for (k = mres->ncomp; k--; )
496 >                    for (h = m1->ncols; h--; )
497                          d += (long double)rmx_lval(m1,i,h,k) *
498                                  (long double)rmx_lval(m2,h,j,k);
499                      rmx_lval(mres,i,j,k) = (double)d;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines