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

Comparing ray/src/rt/rtmain.c (file contents):
Revision 2.47 by greg, Wed Nov 15 18:02:53 2023 UTC vs.
Revision 2.58 by greg, Tue Apr 22 17:12:25 2025 UTC

# Line 13 | Line 13 | static const char      RCSid[] = "$Id$";
13   #include  "rtprocess.h" /* getpid() */
14   #include  "resolu.h"
15   #include  "ray.h"
16 + #include  "func.h"
17   #include  "source.h"
18   #include  "ambient.h"
19   #include  "random.h"
# Line 21 | Line 22 | static const char      RCSid[] = "$Id$";
22  
23   extern char     *progname;              /* global argv[0] */
24  
24 extern char     *shm_boundary;          /* boundary of shared memory */
25
25                                          /* persistent processes define */
26   #ifdef  F_SETLKW
27   #define  PERSIST        1               /* normal persist */
# Line 59 | Line 58 | extern void  tranotify(OBJECT obj);
58   char  *tralist[MAXMODLIST];             /* list of modifers to trace (or no) */
59   int  traincl = -1;                      /* include == 1, exclude == 0 */
60  
61 < double  (*sens_curve)(SCOLOR scol) = NULL;      /* spectral conversion for 1-channel */
61 > double  (*sens_curve)(const SCOLOR scol) = NULL;        /* spectral conversion for 1-channel */
62   double  out_scalefactor = 1;            /* output calibration scale factor */
63   RGBPRIMP  out_prims = stdprims;         /* output color primitives (NULL if spectral) */
64   static RGBPRIMS  our_prims;             /* private output color primitives */
# Line 73 | Line 72 | static void printdefaults(void);
72   #ifdef PERSIST
73   #define RTRACE_FEATURES "Persist\nParallelPersist\nMultiprocessing\n" \
74                          "IrradianceCalc\nImmediateIrradiance\nDistanceLimiting\n" \
75 <                        "Hyperspectral\nParticipatingMedia=Mist\n" \
75 >                        "ParticipatingMedia=Mist\n" \
76                          "HessianAmbientCache\nAmbientAveraging\n" \
77                          "AmbientValueSharing\nAdaptiveShadowTesting\n" \
78                          "InputFormats=a,f,d\nOutputFormats=a,f,d,c\n" \
79 <                        "Outputs=o,d,v,V,w,W,l,L,c,p,n,N,s,m,M,r,x,R,X,~\n"
79 >                        "Outputs=o,d,v,V,w,W,l,L,c,p,n,N,s,m,M,r,x,R,X,~\n" \
80 >                        "OutputCS=RGB,XYZ,Y,S,M,prims,spec\n"
81   #else
82   #define RTRACE_FEATURES "IrradianceCalc\nIrradianceCalc\nDistanceLimiting\n" \
83 <                        "Hyperspectral\nParticipatingMedia=Mist\n" \
83 >                        "ParticipatingMedia=Mist\n" \
84                          "HessianAmbientCache\nAmbientAveraging\n" \
85                          "AmbientValueSharing\nAdaptiveShadowTesting\n" \
86                          "InputFormats=a,f,d\nOutputFormats=a,f,d,c\n" \
87 <                        "Outputs=o,d,v,V,w,W,l,L,c,p,n,N,s,m,M,r,x,R,X,~\n"
87 >                        "Outputs=o,d,v,V,w,W,l,L,c,p,n,N,s,m,M,r,x,R,X,~\n" \
88 >                        "OutputCS=RGB,XYZ,Y,S,M,prims,spec\n"
89   #endif
90  
91  
# Line 114 | Line 115 | main(int  argc, char  *argv[])
115          strcat(RFeatureList, RTRACE_FEATURES);
116          if (argc > 1 && !strcmp(argv[1], "-features"))
117                  return feature_status(argc-2, argv+2);
118 +                                        /* initialize calcomp routines */
119 +        initfunc();
120                                          /* add trace notify function */
121          for (i = 0; addobjnotify[i] != NULL; i++)
122                  ;
# Line 294 | Line 297 | main(int  argc, char  *argv[])
297                                  sens_curve = NULL;
298                                  } break;
299                          case 'Y':                       /* photopic response */
300 +                                if (argv[i][3])
301 +                                        goto badopt;
302                                  sens_curve = scolor_photopic;
303                                  out_scalefactor = WHTEFFICACY;
304                                  break;
305                          case 'S':                       /* scotopic response */
306 +                                if (argv[i][3])
307 +                                        goto badopt;
308                                  sens_curve = scolor_scotopic;
309                                  out_scalefactor = WHTSCOTOPIC;
310                                  break;
311                          case 'M':                       /* melanopic response */
312 +                                if (argv[i][3])
313 +                                        goto badopt;
314                                  sens_curve = scolor_melanopic;
315                                  out_scalefactor = WHTMELANOPIC;
316                                  break;
# Line 310 | Line 319 | main(int  argc, char  *argv[])
319                          }
320                          break;
321   #if MAXCSAMP>3
322 <                case 'c':                               /* spectral sampling */
323 <                        switch (argv[i][2]) {
315 <                        case 's':                       /* spectral bin count */
316 <                                check(3,"i");
317 <                                NCSAMP = atoi(argv[++i]);
318 <                                break;
319 <                        case 'w':                       /* wavelength extrema */
320 <                                check(3,"ff");
321 <                                WLPART[0] = atof(argv[++i]);
322 <                                WLPART[3] = atof(argv[++i]);
323 <                                break;
324 <                        case 'o':                       /* output spectral results */
325 <                                rval = (out_prims == NULL);
326 <                                check_bool(3,rval);
327 <                                if (rval) out_prims = NULL;
328 <                                else if (out_prims == NULL) out_prims = stdprims;
329 <                                break;
330 <                        default:
322 >                case 'c':                               /* output spectral results */
323 >                        if (argv[i][2] != 'o')
324                                  goto badopt;
325 <                        }
325 >                        rval = (out_prims == NULL) & (sens_curve == NULL);
326 >                        check_bool(3,rval);
327 >                        if (rval) {
328 >                                out_prims = NULL;
329 >                                sens_curve = NULL;
330 >                        } else if (out_prims == NULL)
331 >                                out_prims = stdprims;
332                          break;
333   #endif
334   #ifdef  PERSIST
# Line 352 | Line 351 | main(int  argc, char  *argv[])
351          rval = setspectrsamp(CNDX, WLPART);
352          if (rval < 0)
353                  error(USER, "unsupported spectral sampling");
354 <        if (out_prims != NULL) {
354 >        if (sens_curve != NULL)
355 >                out_prims = NULL;
356 >        else if (out_prims != NULL) {
357                  if (!rval)
358                          error(WARNING, "spectral range incompatible with color output");
359          } else if (NCSAMP == 3)
# Line 455 | Line 456 | main(int  argc, char  *argv[])
456                  dup2(duped1, fileno(stdout));
457                  close(duped1);
458                  if (persist == PARALLEL) {      /* multiprocessing */
459 <                        preload_objs();         /* preload scene */
459 <                        shm_boundary = (char *)malloc(16);
460 <                        strcpy(shm_boundary, "SHM_BOUNDARY");
459 >                        cow_memshare();         /* preloads scene */
460                          while ((rval=fork()) == 0) {    /* keep on forkin' */
461                                  pflock(1);
462                                  pfhold();
# Line 514 | Line 513 | wputs(                         /* warning output function */
513   )
514   {
515          int  lasterrno = errno;
516 +        if (erract[WARNING].pf == NULL)
517 +                return;         /* called by calcomp or someone */
518          eputs(s);
519          errno = lasterrno;
520   }
# Line 578 | Line 579 | printdefaults(void)                    /* print default values to stdou
579   {
580          char  *cp;
581  
582 +        printf(erract[WARNING].pf != NULL ?
583 +                        "-w+\t\t\t\t# warning messages on\n" :
584 +                        "-w-\t\t\t\t# warning messages off\n");
585          if (imm_irrad)
586                  printf("-I+\t\t\t\t# immediate irradiance on\n");
587          printf("-n %-2d\t\t\t\t# number of rendering processes\n", nproc);
# Line 615 | Line 619 | printdefaults(void)                    /* print default values to stdou
619                  case '~': printf(" tilde"); break;
620                  }
621          fputc('\n', stdout);
618        if (NCSAMP > 3) {
619                printf("-cs %-2d\t\t\t\t# number of spectral bins\n", NCSAMP);
620                printf("-cw %3.0f %3.0f\t\t\t# wavelength limits (nm)\n",
621                                WLPART[3], WLPART[0]);
622                printf(out_prims != NULL ? "-co-\t\t\t\t# output tristimulus colors\n" :
623                                "-co+\t\t\t\t# output spectral values\n");
624        }
622          if (sens_curve == scolor_photopic)
623                  printf("-pY\t\t\t\t# photopic output\n");
624          else if (sens_curve == scolor_scotopic)
# Line 638 | Line 635 | printdefaults(void)                    /* print default values to stdou
635                                  out_prims[GRN][0], out_prims[GRN][1],
636                                  out_prims[BLU][0], out_prims[BLU][1],
637                                  out_prims[WHT][0], out_prims[WHT][1]);
638 <        printf(erract[WARNING].pf != NULL ?
639 <                        "-w+\t\t\t\t# warning messages on\n" :
640 <                        "-w-\t\t\t\t# warning messages off\n");
638 >        if ((sens_curve == NULL) & (NCSAMP > 3))
639 >                printf(out_prims != NULL ? "-co-\t\t\t\t# output tristimulus colors\n" :
640 >                                "-co+\t\t\t\t# output spectral values\n");
641          print_rdefaults();
642   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines