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.10 by greg, Fri Dec 13 21:12:40 2024 UTC vs.
Revision 2.16 by greg, Wed Mar 5 17:29:57 2025 UTC

# Line 47 | Line 47 | printdefaults(void)                    /* print default values to stdou
47          if (myRCmanager.HasFlag(RTimmIrrad))
48                  printf("-I+\t\t\t\t# immediate irradiance on\n");
49          printf("-n %-2d\t\t\t\t# number of rendering processes\n", nproc);
50 <        if (myRCmanager.xres > 0)
51 <                printf("-x %-9d\t\t\t# x resolution\n", myRCmanager.xres);
50 >        printf("-x %-9d\t\t\t# x resolution\n", myRCmanager.xres);
51          printf("-y %-9d\t\t\t# y resolution\n", myRCmanager.yres);
52          printf(myRCmanager.HasFlag(RTlimDist) ?
53                          "-ld+\t\t\t\t# limit distance on\n" :
# Line 56 | Line 55 | printdefaults(void)                    /* print default values to stdou
55          printf("-f%c%c\t\t\t\t# format input/output = %s/%s\n",
56                          inpfmt, outfmt, formstr(inpfmt), formstr(outfmt));
57          if (report_intvl > 0)
58 <                printf("-t %-9d\t\t\t#  time between reports\n", report_intvl);
58 >                printf("-t %-9d\t\t\t# time between reports\n", report_intvl);
59          printf(erract[WARNING].pf != NULL ?
60                          "-w+\t\t\t\t# warning messages on\n" :
61                          "-w-\t\t\t\t# warning messages off\n");
# Line 75 | Line 74 | onsig(                         /* fatal signal */
74                  _exit(signo);
75  
76   #ifdef SIGALRM
77 <        alarm(180);                     /* allow 3 minutes to clean up */
77 >        alarm(600);                     /* allow 10 minutes to clean up */
78          signal(SIGALRM, SIG_DFL);       /* make certain we do die */
79   #endif
80          eputs("signal - ");
# Line 345 | Line 344 | main(int argc, char *argv[])
344          myRCmanager.LoadOctree(argv[argc-1]);
345                                          // add to header
346          myRCmanager.AddHeader(argc-1, argv);
347 +        {
348 +                char    buf[128] = "SOFTWARE= ";
349 +                strcpy(buf+10, VersionID);
350 +                myRCmanager.AddHeader(buf);
351 +        }
352                                          // prepare output files
353          if (recover)
354                  myRCmanager.outOp = RCOrecover;
# Line 358 | Line 362 | main(int argc, char *argv[])
362          if (rval >= myRCmanager.GetRowMax()) {
363                  error(WARNING, "nothing left to compute");
364                  quit(0);
365 <        }                               // add processes as requested
362 <        myRCmanager.SetThreadCount(nproc);
363 <
365 >        }
366          rxcontrib(rval);                /* trace ray contributions (loop) */
367  
368          quit(0);        /* exit clean */
# Line 415 | Line 417 | getRayBundle(FVECT *orig_dir = NULL)
417          int     n2go = myRCmanager.accum;
418  
419          switch (inpfmt) {
420 <        case 'a':                               // ASCII input
420 >        case 'a':                       // ASCII input
421                  if (!orig_dir)
422                          return skipWords(6*n2go);
423                  while (n2go-- > 0) {
# Line 428 | Line 430 | getRayBundle(FVECT *orig_dir = NULL)
430                          orig_dir += 2;
431                  }
432                  break;
433 <        case 'f':                               // float input
433 >        case 'f':                       // float input
434                  if (!orig_dir)
435                          return skipBytes(6*sizeof(float)*n2go);
436   #ifdef SMLFLT
437                  if (getbinary(orig_dir, sizeof(FVECT), 2*n2go, stdin) != 2*n2go)
438                          return false;
439 +                orig_dir += 2*n2go;
440   #else
441                  while (n2go-- > 0) {
442                          float   fvecs[6];
# Line 445 | Line 448 | getRayBundle(FVECT *orig_dir = NULL)
448                  }
449   #endif
450                  break;
451 <        case 'd':                               // double input
451 >        case 'd':                       // double input
452                  if (!orig_dir)
453                          return skipBytes(6*sizeof(double)*n2go);
454   #ifndef SMLFLT
455                  if (getbinary(orig_dir, sizeof(FVECT), 2*n2go, stdin) != 2*n2go)
456                          return false;
457 +                orig_dir += 2*n2go;
458   #else
459                  while (n2go-- > 0) {
460                          double  dvecs[6];
# Line 466 | Line 470 | getRayBundle(FVECT *orig_dir = NULL)
470                  error(INTERNAL, "unsupported format in getRayBundle()");
471                  return false;
472          }
473 <        int     warned = 0;             // normalize directions
470 <        n2go = myRCmanager.accum;
473 >        n2go = myRCmanager.accum;       // normalize directions
474          while (n2go-- > 0) {
475                  orig_dir -= 2;
476 <                if (normalize(orig_dir[1]) == 0)
474 <                        if (!warned++)
475 <                                error(WARNING, "zero ray direction on input");
476 >                normalize(orig_dir[1]);
477          }
478          return true;
479   }
# Line 500 | Line 501 | rxcontrib(const int rstart)
501                  }
502                  last_report = tstart = time(0);
503          }
504 +                                        // start children as requested
505 +        myRCmanager.SetThreadCount(nproc);
506 +
507          while (r < totRows) {           // loop until done
508                  time_t  tnow;
509                  if (!getRayBundle(odarr))
# Line 509 | Line 513 | rxcontrib(const int rstart)
513                  r++;
514                  if (report_intvl <= 0)
515                          continue;
516 <                tnow = time(0);         // time to report progress?
517 <                if (r == totRows)
518 <                        myRCmanager.FlushQueue();
519 <                else if (tnow < last_report+report_intvl)
516 >                if (r == totRows)       // need to finish up?
517 >                        myRCmanager.SetThreadCount(1);
518 >                tnow = time(0);
519 >                if ((r < totRows) & (tnow < last_report+report_intvl))
520                          continue;
521                  sprintf(errmsg, "%.2f%% done after %.3f hours\n",
522                                  100.*myRCmanager.GetRowFinished()/totRows,
# Line 568 | Line 572 | quit(
572          int  code
573   )
574   {
575 <        if (!code && myRCmanager.Ready())       // clean up on normal exit
572 <                code = myRCmanager.Cleanup();
575 >        myRCmanager.FlushQueue();       // leave nothing in queue
576  
577          exit(code);
578   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines