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.119 by greg, Sat Aug 1 23:27:04 2015 UTC vs.
Revision 2.135 by greg, Sat Jun 7 05:09:46 2025 UTC

# Line 14 | Line 14 | static const char      RCSid[] = "$Id$";
14   #include "platform.h"
15   #include "rtprocess.h"
16   #include "view.h"
17 #include "paths.h"
17   #include "vars.h"
18  
19 < #ifdef _WIN32
19 > #if defined(_WIN32) || defined(_WIN64)
20    #define DELCMD "del"
21    #define RENAMECMD "rename"
22   #else
# Line 64 | Line 63 | static const char      RCSid[] = "$Id$";
63   int NVARS = 31;
64  
65   VARIABLE        vv[] = {                /* variable-value pairs */
66 <        {"AMBFILE",     3,      0,      NULL,   onevalue},
66 >        {"AMBFILE",     3,      0,      NULL,   strvalue},
67          {"DETAIL",      3,      0,      NULL,   qualvalue},
68          {"EXPOSURE",    3,      0,      NULL,   fltvalue},
69          {"EYESEP",      3,      0,      NULL,   fltvalue},
# Line 75 | Line 74 | VARIABLE       vv[] = {                /* variable-value pairs */
74          {"mkpmap",      3,      0,      NULL,   catvalues},
75          {"objects",     3,      0,      NULL,   catvalues},
76          {"oconv",       3,      0,      NULL,   catvalues},
77 <        {"OCTREE",      3,      0,      NULL,   onevalue},
78 <        {"OPTFILE",     3,      0,      NULL,   onevalue},
79 <        {"PCMAP",       2,      0,      NULL,   onevalue},
77 >        {"OCTREE",      3,      0,      NULL,   strvalue},
78 >        {"OPTFILE",     3,      0,      NULL,   strvalue},
79 >        {"PCMAP",       2,      0,      NULL,   strvalue},
80          {"PENUMBRAS",   3,      0,      NULL,   boolvalue},
81          {"pfilt",       2,      0,      NULL,   catvalues},
82 <        {"PGMAP",       2,      0,      NULL,   onevalue},
83 <        {"PICTURE",     3,      0,      NULL,   onevalue},
82 >        {"PGMAP",       2,      0,      NULL,   strvalue},
83 >        {"PICTURE",     3,      0,      NULL,   strvalue},
84          {"QUALITY",     3,      0,      NULL,   qualvalue},
85 <        {"RAWFILE",     3,      0,      NULL,   onevalue},
85 >        {"RAWFILE",     3,      0,      NULL,   strvalue},
86          {"render",      3,      0,      NULL,   catvalues},
87          {"REPORT",      3,      0,      NULL,   onevalue},
88          {"RESOLUTION",  3,      0,      NULL,   onevalue},
# Line 93 | Line 92 | VARIABLE       vv[] = {                /* variable-value pairs */
92          {"UP",          2,      0,      NULL,   onevalue},
93          {"VARIABILITY", 3,      0,      NULL,   qualvalue},
94          {"view",        2,      0,      NULL,   NULL},
95 <        {"ZFILE",       2,      0,      NULL,   onevalue},
95 >        {"ZFILE",       2,      0,      NULL,   strvalue},
96          {"ZONE",        2,      0,      NULL,   onevalue},
97   };
98  
# Line 131 | Line 130 | char   *viewselect = NULL;     /* specific view only */
130  
131   #define DEF_RPICT_PATH  "rpict"         /* default rpict path */
132  
133 + #define R_CMDMAX        (5*PATH_MAX+512)
134                                  /* command paths */
135   char    c_oconv[256] = "oconv";
136   char    c_mkillum[256] = "mkillum";
# Line 144 | Line 144 | int    overture = 0;           /* overture calculation needed */
144  
145   int     children_running = 0;   /* set negative in children */
146  
147 char    *progname;              /* global argv[0] */
147   char    *rifname;               /* global rad input file name */
148  
149   char    radname[PATH_MAX];      /* root Radiance file name */
# Line 197 | Line 196 | main(
196          char    ropts[512];
197          char    popts[64];
198          int     i;
199 <
200 <        progname = argv[0];
199 >                                /* set global progname */
200 >        fixargv0(argv[0]);
201                                  /* get options */
202          for (i = 1; i < argc && argv[i][0] == '-'; i++)
203                  switch (argv[i][1]) {
# Line 242 | Line 241 | main(
241                                  /* load variable values */
242          loadvars(rifname);
243                                  /* get any additional assignments */
244 <        for (i++; i < argc; i++)
245 <                if (setvariable(argv[i], matchvar) < 0) {
246 <                        fprintf(stderr, "%s: unknown variable: %s\n",
244 >        for (i++; i < argc; i++) {
245 >                int     rv = setvariable(argv[i], matchvar);
246 >                if (rv < 0) {
247 >                        fprintf(stderr, "%s: unknown setting: %s\n",
248                                          progname, argv[i]);
249                          quit(1);
250                  }
251 +                if (!rv)
252 +                        fprintf(stderr,
253 +                        "%s: bad variable assignment: %s (ignored)\n",
254 +                                        progname, argv[i]);
255 +        }
256                                  /* check assignments */
257          checkvalues();
258                                  /* check files and dates */
# Line 522 | Line 527 | static void
527   oconv(void)                             /* run oconv and mkillum if necessary */
528   {
529          static char     illumtmp[] = "ilXXXXXX";
530 <        char    combuf[PATH_MAX], ocopts[64], mkopts[1024];
530 >        char    combuf[R_CMDMAX], ocopts[64], mkopts[1024];
531  
532          oconvopts(ocopts);              /* get options */
533          if (octreedate < scenedate) {   /* check date on original octree */
# Line 556 | Line 561 | oconv(void)                            /* run oconv and mkillum if necessary *
561                  return;
562                                                  /* make octree0 */
563          if ((oct0date < scenedate) | (oct0date < illumdate)) {
564 <                if (touchonly && oct0date)
565 <                        touch(oct0name);
566 <                else {                          /* build command */
564 >                if (touchonly && (oct0date || oct1date)) {
565 >                        if (oct0date)
566 >                                touch(oct0name);
567 >                } else {                        /* build command */
568                          if (octreedate)
569                                  sprintf(combuf, "%s%s -i %s %s > %s", c_oconv,
570                                          ocopts, vval(OCTREE),
# Line 583 | Line 589 | oconv(void)                            /* run oconv and mkillum if necessary *
589                          oct0date = octreedate;
590                  if (oct0date < illumdate)       /* ditto */
591                          oct0date = illumdate;
592 <                }
592 >        }
593          if (touchonly && oct1date)
594                  touch(oct1name);
595          else {
# Line 752 | Line 758 | mkpmapopts(                            /* get mkpmap options */
758   {
759          /* BEWARE:  This may be called via setdefaults(), so no assumptions */
760  
761 <        *mo = '\0';
761 >        if (nprocs > 1)
762 >                sprintf(mo, " -n %d", nprocs);
763 >        else
764 >                *mo = '\0';
765          if (!vdef(MKPMAP))
766                  return;
767          if (vval(MKPMAP)[0] != '-') {
# Line 786 | Line 795 | ambval(void)                           /* compute ambient value */
795   {
796          if (vdef(EXPOSURE)) {
797                  if (vval(EXPOSURE)[0] == '+' || vval(EXPOSURE)[0] == '-')
798 <                        return(.5/pow(2.,vflt(EXPOSURE)));
799 <                return(.5/vflt(EXPOSURE));
798 >                        return(.18/pow(2.,vflt(EXPOSURE)));
799 >                return(.18/vflt(EXPOSURE));
800          }
801          if (vlet(ZONE) == 'E')
802                  return(10.);
# Line 806 | Line 815 | renderopts(                    /* set rendering options */
815   {
816          char    pmapf[256], *bw;
817  
818 +        if (vdef(PGMAP)) {
819 +                *op = '\0';
820 +                bw = sskip2(vval(PGMAP), 2);
821 +                atos(pmapf, sizeof(pmapf), vval(PGMAP));
822 +                op = addarg(addarg(op, "-ap"), pmapf);
823 +                if (atoi(bw) > 0) op = addarg(op, bw);
824 +        }
825          switch(vscale(QUALITY)) {
826          case LOW:
827                  lowqopts(op, po);
# Line 817 | Line 833 | renderopts(                    /* set rendering options */
833                  hiqopts(op, po);
834                  break;
835          }
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        }
836          if (vdef(PCMAP)) {
837                  bw = sskip2(vval(PCMAP), 2);
838                  atos(pmapf, sizeof(pmapf), vval(PCMAP));
839                  op = addarg(addarg(op, "-ap"), pmapf);
840                  if (atoi(bw) > 0) op = addarg(op, bw);
841          }
842 <        if (vdef(RENDER))
842 >        if (vdef(RENDER)) {
843                  op = addarg(op, vval(RENDER));
844 +                bw = strstr(vval(RENDER), "-aa ");
845 +                if (bw != NULL && atof(bw+4) <= FTINY)
846 +                        overture = 0;
847 +        }
848          if (rvdevice != NULL) {
849 <                if (vdef(RVU))
849 >                if (vdef(RVU)) {
850                          if (vval(RVU)[0] != '-') {
851                                  atos(c_rvu, sizeof(c_rvu), vval(RVU));
852                                  po = addarg(po, sskip2(vval(RVU), 1));
853                          } else
854                                  po = addarg(po, vval(RVU));
855 +                }
856          } else {
857 <                if (vdef(RPICT))
857 >                if (vdef(RPICT)) {
858                          if (vval(RPICT)[0] != '-') {
859                                  atos(c_rpict, sizeof(c_rpict), vval(RPICT));
860                                  po = addarg(po, sskip2(vval(RPICT), 1));
861                          } else
862                                  po = addarg(po, vval(RPICT));
863 +                }
864          }
865   }
866  
# Line 913 | Line 929 | lowqopts(                      /* low quality rendering options */
929          d = ambval();
930          sprintf(op, " -av %.2g %.2g %.2g", d, d, d);
931          op += strlen(op);
932 <        op = addarg(op, "-lr 6 -lw .003");
932 >        op = addarg(op, "-lr 6 -lw .001");
933   }
934  
935  
# Line 1067 | Line 1083 | hiqopts(                               /* high quality rendering options */
1083          d = ambval();
1084          sprintf(op, " -av %.2g %.2g %.2g", d, d, d);
1085          op += strlen(op);
1086 <        op = addarg(op, "-lr 12 -lw 1e-5");
1086 >        op = addarg(op, "-lr 12 -lw 5e-6");
1087   }
1088  
1089  
1090 < #ifdef _WIN32
1090 > #if defined(_WIN32) || defined(_WIN64)
1091   static void
1092   setenv(                 /* set an environment variable */
1093          char    *vname,
# Line 1118 | Line 1134 | xferopts(                              /* transfer options if indicated */
1134                          syserr(vval(OPTFILE));
1135                  sprintf(ro, " @%s", vval(OPTFILE));
1136          }
1137 < #ifdef _WIN32
1137 > #if defined(_WIN32) || defined(_WIN64)
1138          else if (n > 50) {
1139                  setenv("ROPT", ro+1);
1140                  strcpy(ro, " $ROPT");
# Line 1145 | Line 1161 | pfiltopts(                             /* get pfilt options */
1161                  po = addarg(po, "-m .25");
1162                  break;
1163          }
1164 <        if (vdef(PFILT))
1164 >        if (vdef(PFILT)) {
1165                  if (vval(PFILT)[0] != '-') {
1166                          atos(c_pfilt, sizeof(c_pfilt), vval(PFILT));
1167                          po = addarg(po, sskip2(vval(PFILT), 1));
1168                  } else
1169                          po = addarg(po, vval(PFILT));
1170 +        }
1171   }
1172  
1173  
# Line 1295 | Line 1312 | specview(                              /* get proper view spec from vs */
1312          if (cp == viewopts)             /* append any additional options */
1313                  vs++;           /* skip prefixed space if unneeded */
1314          strcpy(cp, vs);
1315 < #ifdef _WIN32
1315 > #if defined(_WIN32) || defined(_WIN64)
1316          if (strlen(viewopts) > 40) {
1317                  setenv("VIEW", viewopts);
1318                  return("$VIEW");
# Line 1341 | Line 1358 | getview(                               /* get view n, or NULL if none */
1358          }
1359   numview:
1360          mv = nvalue(VIEWS, n);          /* use view n */
1361 <        if ((vn != NULL) & (mv != NULL))
1361 >        if ((vn != NULL) & (mv != NULL)) {
1362                  if (*mv != '-') {
1363                          char    *mv2 = mv;
1364                          while (*mv2 && !isspace(*mv2))
# Line 1349 | Line 1366 | numview:
1366                          *vn = '\0';
1367                  } else
1368                          sprintf(vn, "%d", n+1);
1369 <
1369 >        }
1370          return(specview(mv));
1371   }
1372  
# Line 1363 | Line 1380 | myprintview(                   /* print out selected view */
1380          VIEW    vwr;
1381          char    buf[128];
1382          char    *cp;
1383 < #ifdef _WIN32
1383 > #if defined(_WIN32) || defined(_WIN64)
1384   /* XXX Should we allow something like this for all platforms? */
1385   /* XXX Or is it still required at all? */
1386   again:
1387   #endif
1388          if (vopts == NULL)
1389                  return(-1);
1390 < #ifdef _WIN32
1390 > #if defined(_WIN32) || defined(_WIN64)
1391          if (vopts[0] == '$') {
1392                  vopts = getenv(vopts+1);
1393                  goto again;
# Line 1397 | Line 1414 | rvu(                           /* run rvu with first view */
1414   )
1415   {
1416          char    *vw;
1417 <        char    combuf[PATH_MAX];
1417 >        char    combuf[R_CMDMAX];
1418                                          /* build command */
1419          if (touchonly || (vw = getview(0, NULL)) == NULL)
1420                  return;
# Line 1517 | Line 1534 | rpict(                         /* run rpict and pfilt for each view */
1534                                  fprintf(stderr, "%s: cannot create\n", pfile);
1535                                  quit(1);
1536                          }
1537 +                        pfile[-5] = '\0';
1538                          pfile = NULL;
1539                  }
1540          }
# Line 1594 | Line 1612 | rpict(                         /* run rpict and pfilt for each view */
1612                  } else {
1613                          if (overture) {         /* run overture calculation */
1614                                  sprintf(combuf,
1615 <                                        "%s%s %s%s -x 64 -y 64 -ps 1 %s > %s",
1616 <                                                c_rpict, rep, vw, opts,
1615 >                                        "%s%s %s%s%s -x 64 -y 64 -ps 1 %s > %s",
1616 >                                                c_rpict, rep, vw, opts, po,
1617                                                  oct1name, overfile);
1618                                  if (!do_rpiece || !next_process(0)) {
1619                                          if (runcom(combuf)) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines