ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/rxcmain.cpp
(Generate patch)

Comparing ray/src/rt/rxcmain.cpp (file contents):
Revision 2.7 by greg, Thu Nov 7 18:09:39 2024 UTC vs.
Revision 2.11 by greg, Mon Dec 23 16:15:38 2024 UTC

# Line 96 | Line 96 | sigdie(                        /* set fatal signal */
96          sigerr[signo] = msg;
97   }
98  
99 const char *
100 formstr(int f)                          // return format identifier
101 {
102        switch (f) {
103        case 'a': return("ascii");
104        case 'f': return("float");
105        case 'd': return("double");
106        case 'c': return(NCSAMP==3 ? COLRFMT : SPECFMT);
107        }
108        return("unknown");
109 }
110
99   /* set input/output format */
100   static void
101   setformat(const char *fmt)
# Line 144 | Line 132 | fmterr:
132          error(USER, errmsg);
133   }
134  
135 + /* Set default options */
136 + static void
137 + default_options(void)
138 + {
139 +        rand_samp = 1;
140 +        dstrsrc = 0.9;
141 +        directrelay = 3;
142 +        vspretest = 512;
143 +        srcsizerat = .2;
144 +        specthresh = .02;
145 +        specjitter = 1.;
146 +        maxdepth = -10;
147 +        minweight = 2e-3;
148 +        ambres = 256;
149 +        ambdiv = 350;
150 +        ambounce = 1;
151 + }
152  
153   /* Set overriding options */
154   static void
# Line 154 | Line 159 | override_options(void)
159          ambacc = 0;
160   }
161  
157
162   int
163   main(int argc, char *argv[])
164   {
# Line 185 | Line 189 | main(int argc, char *argv[])
189                                          /* initialize calcomp routines early */
190          initfunc();
191          calcontext(RCCONTEXT);
192 +                                        /* set rcontrib defaults */
193 +        default_options();
194                                          /* option city */
195          for (i = 1; i < argc; i++) {
196                                                  /* expand arguments */
# Line 349 | Line 355 | main(int argc, char *argv[])
355                                          // rval = # rows recovered
356          rval = myRCmanager.PrepOutput();
357                                          // check if recovered everything
358 <        if (recover && rval >= myRCmanager.GetRowMax()) {
358 >        if (rval >= myRCmanager.GetRowMax()) {
359                  error(WARNING, "nothing left to compute");
360                  quit(0);
361          }                               // add processes as requested
# Line 409 | Line 415 | getRayBundle(FVECT *orig_dir = NULL)
415          int     n2go = myRCmanager.accum;
416  
417          switch (inpfmt) {
418 <        case 'a':                               // ASCII input
418 >        case 'a':                       // ASCII input
419                  if (!orig_dir)
420                          return skipWords(6*n2go);
421                  while (n2go-- > 0) {
# Line 422 | Line 428 | getRayBundle(FVECT *orig_dir = NULL)
428                          orig_dir += 2;
429                  }
430                  break;
431 <        case 'f':                               // float input
431 >        case 'f':                       // float input
432                  if (!orig_dir)
433                          return skipBytes(6*sizeof(float)*n2go);
434   #ifdef SMLFLT
435                  if (getbinary(orig_dir, sizeof(FVECT), 2*n2go, stdin) != 2*n2go)
436                          return false;
437 +                orig_dir += 2*n2go;
438   #else
439                  while (n2go-- > 0) {
440                          float   fvecs[6];
# Line 439 | Line 446 | getRayBundle(FVECT *orig_dir = NULL)
446                  }
447   #endif
448                  break;
449 <        case 'd':                               // double input
449 >        case 'd':                       // double input
450                  if (!orig_dir)
451                          return skipBytes(6*sizeof(double)*n2go);
452   #ifndef SMLFLT
453                  if (getbinary(orig_dir, sizeof(FVECT), 2*n2go, stdin) != 2*n2go)
454                          return false;
455 +                orig_dir += 2*n2go;
456   #else
457                  while (n2go-- > 0) {
458                          double  dvecs[6];
# Line 460 | Line 468 | getRayBundle(FVECT *orig_dir = NULL)
468                  error(INTERNAL, "unsupported format in getRayBundle()");
469                  return false;
470          }
471 <        int     warned = 0;             // normalize directions
464 <        n2go = myRCmanager.accum;
471 >        n2go = myRCmanager.accum;       // normalize directions
472          while (n2go-- > 0) {
473                  orig_dir -= 2;
474 <                if (normalize(orig_dir[1]) == 0)
468 <                        if (!warned++)
469 <                                error(WARNING, "zero ray direction on input");
474 >                normalize(orig_dir[1]);
475          }
476          return true;
477   }
# Line 494 | Line 499 | rxcontrib(const int rstart)
499                  }
500                  last_report = tstart = time(0);
501          }
502 <        while (r < totRows) {           // getting to work...
502 >        while (r < totRows) {           // loop until done
503                  time_t  tnow;
504                  if (!getRayBundle(odarr))
505                          goto readerr;
# Line 503 | Line 508 | rxcontrib(const int rstart)
508                  r++;
509                  if (report_intvl <= 0)
510                          continue;
511 <                if ((r < totRows) & ((tnow = time(0)) < last_report+report_intvl))
511 >                tnow = time(0);         // time to report progress?
512 >                if (r == totRows)
513 >                        myRCmanager.FlushQueue();
514 >                else if (tnow < last_report+report_intvl)
515                          continue;
516                  sprintf(errmsg, "%.2f%% done after %.3f hours\n",
517 <                                100.*r/totRows, (1./3600.)*(tnow - tstart));
517 >                                100.*myRCmanager.GetRowFinished()/totRows,
518 >                                (1./3600.)*(tnow - tstart));
519                  eputs(errmsg);
520                  last_report = tnow;
521          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines