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

Comparing ray/src/rt/rxcmain.cpp (file contents):
Revision 2.12 by greg, Mon Dec 23 18:14:20 2024 UTC vs.
Revision 2.23 by greg, Thu Oct 23 15:52:25 2025 UTC

# Line 23 | Line 23 | int    outfmt = 'f';                   /* output format */
23  
24   int     report_intvl = 0;               /* reporting interval (seconds) */
25  
26 extern char *   progname;               // global argv[0]
27
26   RcontribSimulManager    myRCmanager;    // global rcontrib simulation manager
27  
28   #define RCONTRIB_FEATURES       "Multiprocessing\n" \
# Line 47 | Line 45 | printdefaults(void)                    /* print default values to stdou
45          if (myRCmanager.HasFlag(RTimmIrrad))
46                  printf("-I+\t\t\t\t# immediate irradiance on\n");
47          printf("-n %-2d\t\t\t\t# number of rendering processes\n", nproc);
48 <        if (myRCmanager.xres > 0)
51 <                printf("-x %-9d\t\t\t# x resolution\n", myRCmanager.xres);
48 >        printf("-x %-9d\t\t\t# x resolution\n", myRCmanager.xres);
49          printf("-y %-9d\t\t\t# y resolution\n", myRCmanager.yres);
50          printf(myRCmanager.HasFlag(RTlimDist) ?
51                          "-ld+\t\t\t\t# limit distance on\n" :
# Line 56 | Line 53 | printdefaults(void)                    /* print default values to stdou
53          printf("-f%c%c\t\t\t\t# format input/output = %s/%s\n",
54                          inpfmt, outfmt, formstr(inpfmt), formstr(outfmt));
55          if (report_intvl > 0)
56 <                printf("-t %-9d\t\t\t#  time between reports\n", report_intvl);
56 >                printf("-t %-9d\t\t\t# time between reports\n", report_intvl);
57          printf(erract[WARNING].pf != NULL ?
58                          "-w+\t\t\t\t# warning messages on\n" :
59                          "-w-\t\t\t\t# warning messages off\n");
# Line 75 | Line 72 | onsig(                         /* fatal signal */
72                  _exit(signo);
73  
74   #ifdef SIGALRM
75 <        alarm(180);                     /* allow 3 minutes to clean up */
75 >        alarm(600);                     /* allow 10 minutes to clean up */
76          signal(SIGALRM, SIG_DFL);       /* make certain we do die */
77   #endif
78          eputs("signal - ");
# Line 128 | Line 125 | setformat(const char *fmt)
125          if (!fmt[2])
126                  return;
127   fmterr:
128 <        sprintf(errmsg, "Unsupported i/o format: -f%s", fmt);
128 >        sprintf(errmsg, "unsupported i/o format: -f%s", fmt);
129          error(USER, errmsg);
130   }
131  
# Line 243 | Line 240 | main(int argc, char *argv[])
240                          if (rval) erract[WARNING].pf = wputs;
241                          else erract[WARNING].pf = NULL;
242                          break;
246                case 'e':                       /* .cal expression */
247                        check(2,"s");
248                        scompile(argv[++i], NULL, 0);
249                        break;
243                  case 'l':                       /* limit distance */
244                          if (argv[i][2] != 'd')
245                                  goto badopt;
# Line 259 | Line 252 | main(int argc, char *argv[])
252                          check_bool(2,rval);
253                          myRCmanager.SetFlag(RTimmIrrad, rval);
254                          break;
255 <                case 'f':                       /* .cal file or force or format */
263 <                        if (!argv[i][2]) {
264 <                                check(2,"s");
265 <                                loadfunc(argv[++i]);
266 <                                break;
267 <                        }
255 >                case 'f':                       /* force or format */
256                          if (argv[i][2] == 'o') {
257                                  check_bool(3,force_open);
258                                  break;
# Line 298 | Line 286 | main(int argc, char *argv[])
286                          break;
287                  case 'm':                       /* modifier name */
288                          check(2,"s");
289 <                        myRCmanager.AddModifier(argv[++i], curout, prms, binval, bincnt);
289 >                        if (!myRCmanager.AddModifier(argv[++i], curout, prms, binval, bincnt)) {
290 >                                sprintf(errmsg, "bad settings for modifier '%s'", argv[i]);
291 >                                error(USER, errmsg);
292 >                        }
293                          break;
294                  case 'M':                       /* file of modifier names */
295                          check(2,"s");
296 <                        myRCmanager.AddModFile(argv[++i], curout, prms, binval, bincnt);
296 >                        if (!myRCmanager.AddModFile(argv[++i], curout, prms, binval, bincnt)) {
297 >                                sprintf(errmsg, "bad settings for modifier file '%s'", argv[i]);
298 >                                error(USER, errmsg);
299 >                        }
300                          break;
301                  case 't':                       /* reporting interval */
302                          check(2,"i");
# Line 345 | Line 339 | main(int argc, char *argv[])
339          myRCmanager.LoadOctree(argv[argc-1]);
340                                          // add to header
341          myRCmanager.AddHeader(argc-1, argv);
342 +        {
343 +                char    buf[128] = "SOFTWARE= ";
344 +                strcpy(buf+10, VersionID);
345 +                myRCmanager.AddHeader(buf);
346 +        }
347                                          // prepare output files
348          if (recover)
349                  myRCmanager.outOp = RCOrecover;
# Line 354 | Line 353 | main(int argc, char *argv[])
353                  myRCmanager.outOp = RCOnew;
354                                          // rval = # rows recovered
355          rval = myRCmanager.PrepOutput();
356 <                                        // check if recovered everything
357 <        if (rval >= myRCmanager.GetRowMax()) {
356 >
357 >        if (rval < 0)                   // PrepOutput() failure?
358 >                error(USER, "issue loading or creating output(s)");
359 >                                        // in case we recovered everything
360 >        if (rval >= myRCmanager.GetRowMax())
361                  error(WARNING, "nothing left to compute");
362 <                quit(0);
363 <        }
362 <        rxcontrib(rval);                /* trace ray contributions (loop) */
362 >        else
363 >                rxcontrib(rval);        // trace ray contributions (loop)
364  
365 <        quit(0);        /* exit clean */
365 >        quit(0);        // exit clean
366  
367   badopt:
368          fprintf(stderr,
# Line 466 | Line 467 | getRayBundle(FVECT *orig_dir = NULL)
467                  error(INTERNAL, "unsupported format in getRayBundle()");
468                  return false;
469          }
469        n2go = myRCmanager.accum;       // normalize directions
470        while (n2go-- > 0) {
471                orig_dir -= 2;
472                normalize(orig_dir[1]);
473        }
470          return true;
471   }
472  
# Line 509 | Line 505 | rxcontrib(const int rstart)
505                  r++;
506                  if (report_intvl <= 0)
507                          continue;
508 <                tnow = time(0);         // time to report progress?
513 <                if (r == totRows)       // finished?
508 >                if (r == totRows)       // need to finish up?
509                          myRCmanager.SetThreadCount(1);
510 <                else if (tnow < last_report+report_intvl)
510 >                tnow = time(0);
511 >                if ((r < totRows) & (tnow < last_report+report_intvl))
512                          continue;
513                  sprintf(errmsg, "%.2f%% done after %.3f hours\n",
514                                  100.*myRCmanager.GetRowFinished()/totRows,
# Line 568 | Line 564 | quit(
564          int  code
565   )
566   {
567 <        if (!code && myRCmanager.Ready())       // clean up on normal exit
568 <                code = myRCmanager.Cleanup();
567 >        if (!code)
568 >                myRCmanager.ClearModifiers();
569  
570          exit(code);
571   }

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)