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

Comparing ray/src/util/rad.c (file contents):
Revision 2.112 by greg, Tue May 26 10:00:47 2015 UTC vs.
Revision 2.131 by greg, Sat Jun 10 15:49:55 2023 UTC

# Line 9 | Line 9 | static const char      RCSid[] = "$Id$";
9  
10   #include <ctype.h>
11   #include <time.h>
12 + #include <signal.h>
13  
14   #include "platform.h"
15   #include "rtprocess.h"
# Line 16 | Line 17 | static const char      RCSid[] = "$Id$";
17   #include "paths.h"
18   #include "vars.h"
19  
20 < #ifdef _WIN32
20 > #if defined(_WIN32) || defined(_WIN64)
21    #define DELCMD "del"
22    #define RENAMECMD "rename"
23   #else
# Line 63 | Line 64 | static const char      RCSid[] = "$Id$";
64   int NVARS = 31;
65  
66   VARIABLE        vv[] = {                /* variable-value pairs */
67 <        {"AMBFILE",     3,      0,      NULL,   onevalue},
67 >        {"AMBFILE",     3,      0,      NULL,   strvalue},
68          {"DETAIL",      3,      0,      NULL,   qualvalue},
69          {"EXPOSURE",    3,      0,      NULL,   fltvalue},
70          {"EYESEP",      3,      0,      NULL,   fltvalue},
# Line 74 | Line 75 | VARIABLE       vv[] = {                /* variable-value pairs */
75          {"mkpmap",      3,      0,      NULL,   catvalues},
76          {"objects",     3,      0,      NULL,   catvalues},
77          {"oconv",       3,      0,      NULL,   catvalues},
78 <        {"OCTREE",      3,      0,      NULL,   onevalue},
79 <        {"OPTFILE",     3,      0,      NULL,   onevalue},
80 <        {"PCMAP",       2,      0,      NULL,   onevalue},
78 >        {"OCTREE",      3,      0,      NULL,   strvalue},
79 >        {"OPTFILE",     3,      0,      NULL,   strvalue},
80 >        {"PCMAP",       2,      0,      NULL,   strvalue},
81          {"PENUMBRAS",   3,      0,      NULL,   boolvalue},
82          {"pfilt",       2,      0,      NULL,   catvalues},
83 <        {"PGMAP",       2,      0,      NULL,   onevalue},
84 <        {"PICTURE",     3,      0,      NULL,   onevalue},
83 >        {"PGMAP",       2,      0,      NULL,   strvalue},
84 >        {"PICTURE",     3,      0,      NULL,   strvalue},
85          {"QUALITY",     3,      0,      NULL,   qualvalue},
86 <        {"RAWFILE",     3,      0,      NULL,   onevalue},
86 >        {"RAWFILE",     3,      0,      NULL,   strvalue},
87          {"render",      3,      0,      NULL,   catvalues},
88          {"REPORT",      3,      0,      NULL,   onevalue},
89          {"RESOLUTION",  3,      0,      NULL,   onevalue},
# Line 92 | Line 93 | VARIABLE       vv[] = {                /* variable-value pairs */
93          {"UP",          2,      0,      NULL,   onevalue},
94          {"VARIABILITY", 3,      0,      NULL,   qualvalue},
95          {"view",        2,      0,      NULL,   NULL},
96 <        {"ZFILE",       2,      0,      NULL,   onevalue},
96 >        {"ZFILE",       2,      0,      NULL,   strvalue},
97          {"ZONE",        2,      0,      NULL,   onevalue},
98   };
99  
# Line 241 | Line 242 | main(
242                                  /* load variable values */
243          loadvars(rifname);
244                                  /* get any additional assignments */
245 <        for (i++; i < argc; i++)
246 <                if (setvariable(argv[i], matchvar) < 0) {
247 <                        fprintf(stderr, "%s: unknown variable: %s\n",
245 >        for (i++; i < argc; i++) {
246 >                int     rv = setvariable(argv[i], matchvar);
247 >                if (rv < 0) {
248 >                        fprintf(stderr, "%s: unknown setting: %s\n",
249                                          progname, argv[i]);
250                          quit(1);
251                  }
252 +                if (!rv)
253 +                        fprintf(stderr,
254 +                        "%s: bad variable assignment: %s (ignored)\n",
255 +                                        progname, argv[i]);
256 +        }
257                                  /* check assignments */
258          checkvalues();
259                                  /* check files and dates */
# Line 401 | Line 408 | checkfiles(void)                       /* check for existence and modified
408                  atos(fntemp, sizeof(fntemp), vval(PCMAP));
409                  pcmapname = savqstr(fntemp);
410                  pcmapdate = fdate(pcmapname);
404                if (pgmapname == NULL && !nowarn)
405                        fprintf(stderr, "%s: '%s' assigned without '%s'\n",
406                                        progname, vnam(PCMAP), vnam(PGMAP));
411          }
412          matdate = checklast(vval(MATERIAL));
413   }      
# Line 558 | Line 562 | oconv(void)                            /* run oconv and mkillum if necessary *
562                  return;
563                                                  /* make octree0 */
564          if ((oct0date < scenedate) | (oct0date < illumdate)) {
565 <                if (touchonly && oct0date)
566 <                        touch(oct0name);
567 <                else {                          /* build command */
565 >                if (touchonly && (oct0date || oct1date)) {
566 >                        if (oct0date)
567 >                                touch(oct0name);
568 >                } else {                        /* build command */
569                          if (octreedate)
570                                  sprintf(combuf, "%s%s -i %s %s > %s", c_oconv,
571                                          ocopts, vval(OCTREE),
# Line 585 | Line 590 | oconv(void)                            /* run oconv and mkillum if necessary *
590                          oct0date = octreedate;
591                  if (oct0date < illumdate)       /* ditto */
592                          oct0date = illumdate;
593 <                }
593 >        }
594          if (touchonly && oct1date)
595                  touch(oct1name);
596          else {
# Line 647 | Line 652 | mkpmap(void)                   /* run mkpmap if indicated */
652                  for (cp = combuf; *cp; cp++)
653                          ;
654                  mkpmapopts(cp);
655 +                                /* force file overwrite */
656 +                cp = addarg(cp, "-fo+");
657                  if (vdef(REPORT)) {
658                          char    errfile[256];
659                          int     n;
# Line 659 | Line 666 | mkpmap(void)                   /* run mkpmap if indicated */
666                          else
667                                  badvalue(REPORT);
668                  }
669 <                if (vdef(PGMAP)) {
669 >                if (pgmapname != NULL && pgmapdate < oct1date) {
670                          cp = addarg(cp, "-apg");
671                          addarg(cp, vval(PGMAP));
672                          cp = sskip(sskip(cp));  /* remove any bandwidth */
673                          *cp = '\0';
674                  }
675 <                if (vdef(PCMAP)) {
675 >                if (pcmapname != NULL && pcmapdate < oct1date) {
676                          cp = addarg(cp, "-apc");
677                          addarg(cp, vval(PCMAP));
678                          cp = sskip(sskip(cp));  /* remove any bandwidth */
# Line 675 | Line 682 | mkpmap(void)                   /* run mkpmap if indicated */
682                  if (runcom(combuf)) {
683                          fprintf(stderr, "%s: error running %s\n",
684                                          progname, c_mkpmap);
685 <                        if (pgmapname != NULL)
685 >                        if (pgmapname != NULL && pgmapdate < oct1date)
686                                  unlink(pgmapname);
687 <                        if (pcmapname != NULL)
687 >                        if (pcmapname != NULL && pcmapdate < oct1date)
688                                  unlink(pcmapname);
689                          quit(1);
690                  }
# Line 752 | Line 759 | mkpmapopts(                            /* get mkpmap options */
759   {
760          /* BEWARE:  This may be called via setdefaults(), so no assumptions */
761  
762 <        *mo = '\0';
762 >        if (nprocs > 1)
763 >                sprintf(mo, " -n %d", nprocs);
764 >        else
765 >                *mo = '\0';
766          if (!vdef(MKPMAP))
767                  return;
768          if (vval(MKPMAP)[0] != '-') {
# Line 786 | Line 796 | ambval(void)                           /* compute ambient value */
796   {
797          if (vdef(EXPOSURE)) {
798                  if (vval(EXPOSURE)[0] == '+' || vval(EXPOSURE)[0] == '-')
799 <                        return(.5/pow(2.,vflt(EXPOSURE)));
800 <                return(.5/vflt(EXPOSURE));
799 >                        return(.18/pow(2.,vflt(EXPOSURE)));
800 >                return(.18/vflt(EXPOSURE));
801          }
802          if (vlet(ZONE) == 'E')
803                  return(10.);
# Line 806 | Line 816 | renderopts(                    /* set rendering options */
816   {
817          char    pmapf[256], *bw;
818  
819 +        if (vdef(PGMAP)) {
820 +                *op = '\0';
821 +                bw = sskip2(vval(PGMAP), 2);
822 +                atos(pmapf, sizeof(pmapf), vval(PGMAP));
823 +                op = addarg(addarg(op, "-ap"), pmapf);
824 +                if (atoi(bw) > 0) op = addarg(op, bw);
825 +        }
826          switch(vscale(QUALITY)) {
827          case LOW:
828                  lowqopts(op, po);
# Line 817 | Line 834 | renderopts(                    /* set rendering options */
834                  hiqopts(op, po);
835                  break;
836          }
820        if (vdef(PGMAP)) {
821                bw = sskip2(vval(PGMAP), 2);
822                atos(pmapf, sizeof(pmapf), vval(PGMAP));
823                op = addarg(addarg(op, "-ap"), pmapf);
824                if (atoi(bw) > 0) op = addarg(op, bw);
825        }
837          if (vdef(PCMAP)) {
838                  bw = sskip2(vval(PCMAP), 2);
839                  atos(pmapf, sizeof(pmapf), vval(PCMAP));
840                  op = addarg(addarg(op, "-ap"), pmapf);
841                  if (atoi(bw) > 0) op = addarg(op, bw);
842          }
843 <        if (vdef(RENDER))
843 >        if (vdef(RENDER)) {
844                  op = addarg(op, vval(RENDER));
845 +                bw = strstr(vval(RENDER), "-aa ");
846 +                if (bw != NULL && atof(bw+4) <= FTINY)
847 +                        overture = 0;
848 +        }
849          if (rvdevice != NULL) {
850 <                if (vdef(RVU))
850 >                if (vdef(RVU)) {
851                          if (vval(RVU)[0] != '-') {
852                                  atos(c_rvu, sizeof(c_rvu), vval(RVU));
853                                  po = addarg(po, sskip2(vval(RVU), 1));
854                          } else
855                                  po = addarg(po, vval(RVU));
856 +                }
857          } else {
858 <                if (vdef(RPICT))
858 >                if (vdef(RPICT)) {
859                          if (vval(RPICT)[0] != '-') {
860                                  atos(c_rpict, sizeof(c_rpict), vval(RPICT));
861                                  po = addarg(po, sskip2(vval(RPICT), 1));
862                          } else
863                                  po = addarg(po, vval(RPICT));
864 +                }
865          }
866   }
867  
# Line 913 | Line 930 | lowqopts(                      /* low quality rendering options */
930          d = ambval();
931          sprintf(op, " -av %.2g %.2g %.2g", d, d, d);
932          op += strlen(op);
933 <        op = addarg(op, "-lr 6 -lw .003");
933 >        op = addarg(op, "-lr 6 -lw .001");
934   }
935  
936  
# Line 1067 | Line 1084 | hiqopts(                               /* high quality rendering options */
1084          d = ambval();
1085          sprintf(op, " -av %.2g %.2g %.2g", d, d, d);
1086          op += strlen(op);
1087 <        op = addarg(op, "-lr 12 -lw 1e-5");
1087 >        op = addarg(op, "-lr 12 -lw 5e-6");
1088   }
1089  
1090  
1091 < #ifdef _WIN32
1091 > #if defined(_WIN32) || defined(_WIN64)
1092   static void
1093   setenv(                 /* set an environment variable */
1094          char    *vname,
# Line 1118 | Line 1135 | xferopts(                              /* transfer options if indicated */
1135                          syserr(vval(OPTFILE));
1136                  sprintf(ro, " @%s", vval(OPTFILE));
1137          }
1138 < #ifdef _WIN32
1138 > #if defined(_WIN32) || defined(_WIN64)
1139          else if (n > 50) {
1140                  setenv("ROPT", ro+1);
1141                  strcpy(ro, " $ROPT");
# Line 1145 | Line 1162 | pfiltopts(                             /* get pfilt options */
1162                  po = addarg(po, "-m .25");
1163                  break;
1164          }
1165 <        if (vdef(PFILT))
1165 >        if (vdef(PFILT)) {
1166                  if (vval(PFILT)[0] != '-') {
1167                          atos(c_pfilt, sizeof(c_pfilt), vval(PFILT));
1168                          po = addarg(po, sskip2(vval(PFILT), 1));
1169                  } else
1170                          po = addarg(po, vval(PFILT));
1171 +        }
1172   }
1173  
1174  
# Line 1295 | Line 1313 | specview(                              /* get proper view spec from vs */
1313          if (cp == viewopts)             /* append any additional options */
1314                  vs++;           /* skip prefixed space if unneeded */
1315          strcpy(cp, vs);
1316 < #ifdef _WIN32
1316 > #if defined(_WIN32) || defined(_WIN64)
1317          if (strlen(viewopts) > 40) {
1318                  setenv("VIEW", viewopts);
1319                  return("$VIEW");
# Line 1341 | Line 1359 | getview(                               /* get view n, or NULL if none */
1359          }
1360   numview:
1361          mv = nvalue(VIEWS, n);          /* use view n */
1362 <        if ((vn != NULL) & (mv != NULL))
1362 >        if ((vn != NULL) & (mv != NULL)) {
1363                  if (*mv != '-') {
1364                          char    *mv2 = mv;
1365                          while (*mv2 && !isspace(*mv2))
# Line 1349 | Line 1367 | numview:
1367                          *vn = '\0';
1368                  } else
1369                          sprintf(vn, "%d", n+1);
1370 <
1370 >        }
1371          return(specview(mv));
1372   }
1373  
# Line 1363 | Line 1381 | myprintview(                   /* print out selected view */
1381          VIEW    vwr;
1382          char    buf[128];
1383          char    *cp;
1384 < #ifdef _WIN32
1384 > #if defined(_WIN32) || defined(_WIN64)
1385   /* XXX Should we allow something like this for all platforms? */
1386   /* XXX Or is it still required at all? */
1387   again:
1388   #endif
1389          if (vopts == NULL)
1390                  return(-1);
1391 < #ifdef _WIN32
1391 > #if defined(_WIN32) || defined(_WIN64)
1392          if (vopts[0] == '$') {
1393                  vopts = getenv(vopts+1);
1394                  goto again;
# Line 1517 | Line 1535 | rpict(                         /* run rpict and pfilt for each view */
1535                                  fprintf(stderr, "%s: cannot create\n", pfile);
1536                                  quit(1);
1537                          }
1538 +                        pfile[-5] = '\0';
1539                          pfile = NULL;
1540                  }
1541          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines