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.48 by greg, Fri Nov 17 20:02:07 2023 UTC vs.
Revision 2.57 by greg, Wed Mar 5 18:56:28 2025 UTC

# Line 21 | Line 21 | static const char      RCSid[] = "$Id$";
21  
22   extern char     *progname;              /* global argv[0] */
23  
24 extern char     *shm_boundary;          /* boundary of shared memory */
25
24                                          /* persistent processes define */
25   #ifdef  F_SETLKW
26   #define  PERSIST        1               /* normal persist */
# Line 59 | Line 57 | extern void  tranotify(OBJECT obj);
57   char  *tralist[MAXMODLIST];             /* list of modifers to trace (or no) */
58   int  traincl = -1;                      /* include == 1, exclude == 0 */
59  
60 < double  (*sens_curve)(SCOLOR scol) = NULL;      /* spectral conversion for 1-channel */
60 > double  (*sens_curve)(const SCOLOR scol) = NULL;        /* spectral conversion for 1-channel */
61   double  out_scalefactor = 1;            /* output calibration scale factor */
62   RGBPRIMP  out_prims = stdprims;         /* output color primitives (NULL if spectral) */
63   static RGBPRIMS  our_prims;             /* private output color primitives */
# Line 77 | Line 75 | static void printdefaults(void);
75                          "HessianAmbientCache\nAmbientAveraging\n" \
76                          "AmbientValueSharing\nAdaptiveShadowTesting\n" \
77                          "InputFormats=a,f,d\nOutputFormats=a,f,d,c\n" \
78 <                        "Outputs=o,d,v,V,w,W,l,L,c,p,n,N,s,m,M,r,x,R,X,~\n"
78 >                        "Outputs=o,d,v,V,w,W,l,L,c,p,n,N,s,m,M,r,x,R,X,~\n" \
79 >                        "OutputCS=RGB,XYZ,Y,S,M,prims,spec\n"
80   #else
81   #define RTRACE_FEATURES "IrradianceCalc\nIrradianceCalc\nDistanceLimiting\n" \
82                          "ParticipatingMedia=Mist\n" \
83                          "HessianAmbientCache\nAmbientAveraging\n" \
84                          "AmbientValueSharing\nAdaptiveShadowTesting\n" \
85                          "InputFormats=a,f,d\nOutputFormats=a,f,d,c\n" \
86 <                        "Outputs=o,d,v,V,w,W,l,L,c,p,n,N,s,m,M,r,x,R,X,~\n"
86 >                        "Outputs=o,d,v,V,w,W,l,L,c,p,n,N,s,m,M,r,x,R,X,~\n" \
87 >                        "OutputCS=RGB,XYZ,Y,S,M,prims,spec\n"
88   #endif
89  
90  
# Line 294 | Line 294 | main(int  argc, char  *argv[])
294                                  sens_curve = NULL;
295                                  } break;
296                          case 'Y':                       /* photopic response */
297 +                                if (argv[i][3])
298 +                                        goto badopt;
299                                  sens_curve = scolor_photopic;
300                                  out_scalefactor = WHTEFFICACY;
301                                  break;
302                          case 'S':                       /* scotopic response */
303 +                                if (argv[i][3])
304 +                                        goto badopt;
305                                  sens_curve = scolor_scotopic;
306                                  out_scalefactor = WHTSCOTOPIC;
307                                  break;
308                          case 'M':                       /* melanopic response */
309 +                                if (argv[i][3])
310 +                                        goto badopt;
311                                  sens_curve = scolor_melanopic;
312                                  out_scalefactor = WHTMELANOPIC;
313                                  break;
# Line 313 | Line 319 | main(int  argc, char  *argv[])
319                  case 'c':                               /* output spectral results */
320                          if (argv[i][2] != 'o')
321                                  goto badopt;
322 <                        rval = (out_prims == NULL);
322 >                        rval = (out_prims == NULL) & (sens_curve == NULL);
323                          check_bool(3,rval);
324 <                        if (rval) out_prims = NULL;
325 <                        else if (out_prims == NULL) out_prims = stdprims;
324 >                        if (rval) {
325 >                                out_prims = NULL;
326 >                                sens_curve = NULL;
327 >                        } else if (out_prims == NULL)
328 >                                out_prims = stdprims;
329                          break;
330   #endif
331   #ifdef  PERSIST
# Line 339 | Line 348 | main(int  argc, char  *argv[])
348          rval = setspectrsamp(CNDX, WLPART);
349          if (rval < 0)
350                  error(USER, "unsupported spectral sampling");
351 <        if (out_prims != NULL) {
351 >        if (sens_curve != NULL)
352 >                out_prims = NULL;
353 >        else if (out_prims != NULL) {
354                  if (!rval)
355                          error(WARNING, "spectral range incompatible with color output");
356          } else if (NCSAMP == 3)
# Line 442 | Line 453 | main(int  argc, char  *argv[])
453                  dup2(duped1, fileno(stdout));
454                  close(duped1);
455                  if (persist == PARALLEL) {      /* multiprocessing */
456 <                        preload_objs();         /* preload scene */
446 <                        shm_boundary = (char *)malloc(16);
447 <                        strcpy(shm_boundary, "SHM_BOUNDARY");
456 >                        cow_memshare();         /* preloads scene */
457                          while ((rval=fork()) == 0) {    /* keep on forkin' */
458                                  pflock(1);
459                                  pfhold();
# Line 501 | Line 510 | wputs(                         /* warning output function */
510   )
511   {
512          int  lasterrno = errno;
513 +        if (erract[WARNING].pf == NULL)
514 +                return;         /* called by calcomp or someone */
515          eputs(s);
516          errno = lasterrno;
517   }
# Line 565 | Line 576 | printdefaults(void)                    /* print default values to stdou
576   {
577          char  *cp;
578  
579 +        printf(erract[WARNING].pf != NULL ?
580 +                        "-w+\t\t\t\t# warning messages on\n" :
581 +                        "-w-\t\t\t\t# warning messages off\n");
582          if (imm_irrad)
583                  printf("-I+\t\t\t\t# immediate irradiance on\n");
584          printf("-n %-2d\t\t\t\t# number of rendering processes\n", nproc);
# Line 602 | Line 616 | printdefaults(void)                    /* print default values to stdou
616                  case '~': printf(" tilde"); break;
617                  }
618          fputc('\n', stdout);
605        if (NCSAMP > 3)
606                printf(out_prims != NULL ? "-co-\t\t\t\t# output tristimulus colors\n" :
607                                "-co+\t\t\t\t# output spectral values\n");
619          if (sens_curve == scolor_photopic)
620                  printf("-pY\t\t\t\t# photopic output\n");
621          else if (sens_curve == scolor_scotopic)
# Line 621 | Line 632 | printdefaults(void)                    /* print default values to stdou
632                                  out_prims[GRN][0], out_prims[GRN][1],
633                                  out_prims[BLU][0], out_prims[BLU][1],
634                                  out_prims[WHT][0], out_prims[WHT][1]);
635 <        printf(erract[WARNING].pf != NULL ?
636 <                        "-w+\t\t\t\t# warning messages on\n" :
637 <                        "-w-\t\t\t\t# warning messages off\n");
635 >        if ((sens_curve == NULL) & (NCSAMP > 3))
636 >                printf(out_prims != NULL ? "-co-\t\t\t\t# output tristimulus colors\n" :
637 >                                "-co+\t\t\t\t# output spectral values\n");
638          print_rdefaults();
639   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines