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.115 by greg, Wed May 27 14:12:09 2015 UTC vs.
Revision 2.133 by greg, Mon Dec 23 01:39:27 2024 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 130 | Line 131 | char   *viewselect = NULL;     /* specific view only */
131  
132   #define DEF_RPICT_PATH  "rpict"         /* default rpict path */
133  
134 + #define R_CMDMAX        (5*PATH_MAX+512)
135                                  /* command paths */
136   char    c_oconv[256] = "oconv";
137   char    c_mkillum[256] = "mkillum";
# Line 241 | Line 243 | main(
243                                  /* load variable values */
244          loadvars(rifname);
245                                  /* get any additional assignments */
246 <        for (i++; i < argc; i++)
247 <                if (setvariable(argv[i], matchvar) < 0) {
248 <                        fprintf(stderr, "%s: unknown variable: %s\n",
246 >        for (i++; i < argc; i++) {
247 >                int     rv = setvariable(argv[i], matchvar);
248 >                if (rv < 0) {
249 >                        fprintf(stderr, "%s: unknown setting: %s\n",
250                                          progname, argv[i]);
251                          quit(1);
252                  }
253 +                if (!rv)
254 +                        fprintf(stderr,
255 +                        "%s: bad variable assignment: %s (ignored)\n",
256 +                                        progname, argv[i]);
257 +        }
258                                  /* check assignments */
259          checkvalues();
260                                  /* check files and dates */
# Line 521 | Line 529 | static void
529   oconv(void)                             /* run oconv and mkillum if necessary */
530   {
531          static char     illumtmp[] = "ilXXXXXX";
532 <        char    combuf[PATH_MAX], ocopts[64], mkopts[1024];
532 >        char    combuf[R_CMDMAX], ocopts[64], mkopts[1024];
533  
534          oconvopts(ocopts);              /* get options */
535          if (octreedate < scenedate) {   /* check date on original octree */
# Line 555 | Line 563 | oconv(void)                            /* run oconv and mkillum if necessary *
563                  return;
564                                                  /* make octree0 */
565          if ((oct0date < scenedate) | (oct0date < illumdate)) {
566 <                if (touchonly && oct0date)
567 <                        touch(oct0name);
568 <                else {                          /* build command */
566 >                if (touchonly && (oct0date || oct1date)) {
567 >                        if (oct0date)
568 >                                touch(oct0name);
569 >                } else {                        /* build command */
570                          if (octreedate)
571                                  sprintf(combuf, "%s%s -i %s %s > %s", c_oconv,
572                                          ocopts, vval(OCTREE),
# Line 582 | Line 591 | oconv(void)                            /* run oconv and mkillum if necessary *
591                          oct0date = octreedate;
592                  if (oct0date < illumdate)       /* ditto */
593                          oct0date = illumdate;
594 <                }
594 >        }
595          if (touchonly && oct1date)
596                  touch(oct1name);
597          else {
# Line 644 | Line 653 | mkpmap(void)                   /* run mkpmap if indicated */
653                  for (cp = combuf; *cp; cp++)
654                          ;
655                  mkpmapopts(cp);
656 +                                /* force file overwrite */
657 +                cp = addarg(cp, "-fo+");
658                  if (vdef(REPORT)) {
659                          char    errfile[256];
660                          int     n;
# Line 749 | Line 760 | mkpmapopts(                            /* get mkpmap options */
760   {
761          /* BEWARE:  This may be called via setdefaults(), so no assumptions */
762  
763 <        *mo = '\0';
763 >        if (nprocs > 1)
764 >                sprintf(mo, " -n %d", nprocs);
765 >        else
766 >                *mo = '\0';
767          if (!vdef(MKPMAP))
768                  return;
769          if (vval(MKPMAP)[0] != '-') {
# Line 783 | Line 797 | ambval(void)                           /* compute ambient value */
797   {
798          if (vdef(EXPOSURE)) {
799                  if (vval(EXPOSURE)[0] == '+' || vval(EXPOSURE)[0] == '-')
800 <                        return(.5/pow(2.,vflt(EXPOSURE)));
801 <                return(.5/vflt(EXPOSURE));
800 >                        return(.18/pow(2.,vflt(EXPOSURE)));
801 >                return(.18/vflt(EXPOSURE));
802          }
803          if (vlet(ZONE) == 'E')
804                  return(10.);
# Line 803 | Line 817 | renderopts(                    /* set rendering options */
817   {
818          char    pmapf[256], *bw;
819  
820 +        if (vdef(PGMAP)) {
821 +                *op = '\0';
822 +                bw = sskip2(vval(PGMAP), 2);
823 +                atos(pmapf, sizeof(pmapf), vval(PGMAP));
824 +                op = addarg(addarg(op, "-ap"), pmapf);
825 +                if (atoi(bw) > 0) op = addarg(op, bw);
826 +        }
827          switch(vscale(QUALITY)) {
828          case LOW:
829                  lowqopts(op, po);
# Line 814 | Line 835 | renderopts(                    /* set rendering options */
835                  hiqopts(op, po);
836                  break;
837          }
817        if (vdef(PGMAP)) {
818                bw = sskip2(vval(PGMAP), 2);
819                atos(pmapf, sizeof(pmapf), vval(PGMAP));
820                op = addarg(addarg(op, "-ap"), pmapf);
821                if (atoi(bw) > 0) op = addarg(op, bw);
822        }
838          if (vdef(PCMAP)) {
839                  bw = sskip2(vval(PCMAP), 2);
840                  atos(pmapf, sizeof(pmapf), vval(PCMAP));
841                  op = addarg(addarg(op, "-ap"), pmapf);
842                  if (atoi(bw) > 0) op = addarg(op, bw);
843          }
844 <        if (vdef(RENDER))
844 >        if (vdef(RENDER)) {
845                  op = addarg(op, vval(RENDER));
846 +                bw = strstr(vval(RENDER), "-aa ");
847 +                if (bw != NULL && atof(bw+4) <= FTINY)
848 +                        overture = 0;
849 +        }
850          if (rvdevice != NULL) {
851 <                if (vdef(RVU))
851 >                if (vdef(RVU)) {
852                          if (vval(RVU)[0] != '-') {
853                                  atos(c_rvu, sizeof(c_rvu), vval(RVU));
854                                  po = addarg(po, sskip2(vval(RVU), 1));
855                          } else
856                                  po = addarg(po, vval(RVU));
857 +                }
858          } else {
859 <                if (vdef(RPICT))
859 >                if (vdef(RPICT)) {
860                          if (vval(RPICT)[0] != '-') {
861                                  atos(c_rpict, sizeof(c_rpict), vval(RPICT));
862                                  po = addarg(po, sskip2(vval(RPICT), 1));
863                          } else
864                                  po = addarg(po, vval(RPICT));
865 +                }
866          }
867   }
868  
# Line 910 | Line 931 | lowqopts(                      /* low quality rendering options */
931          d = ambval();
932          sprintf(op, " -av %.2g %.2g %.2g", d, d, d);
933          op += strlen(op);
934 <        op = addarg(op, "-lr 6 -lw .003");
934 >        op = addarg(op, "-lr 6 -lw .001");
935   }
936  
937  
# Line 1064 | Line 1085 | hiqopts(                               /* high quality rendering options */
1085          d = ambval();
1086          sprintf(op, " -av %.2g %.2g %.2g", d, d, d);
1087          op += strlen(op);
1088 <        op = addarg(op, "-lr 12 -lw 1e-5");
1088 >        op = addarg(op, "-lr 12 -lw 5e-6");
1089   }
1090  
1091  
1092 < #ifdef _WIN32
1092 > #if defined(_WIN32) || defined(_WIN64)
1093   static void
1094   setenv(                 /* set an environment variable */
1095          char    *vname,
# Line 1115 | Line 1136 | xferopts(                              /* transfer options if indicated */
1136                          syserr(vval(OPTFILE));
1137                  sprintf(ro, " @%s", vval(OPTFILE));
1138          }
1139 < #ifdef _WIN32
1139 > #if defined(_WIN32) || defined(_WIN64)
1140          else if (n > 50) {
1141                  setenv("ROPT", ro+1);
1142                  strcpy(ro, " $ROPT");
# Line 1142 | Line 1163 | pfiltopts(                             /* get pfilt options */
1163                  po = addarg(po, "-m .25");
1164                  break;
1165          }
1166 <        if (vdef(PFILT))
1166 >        if (vdef(PFILT)) {
1167                  if (vval(PFILT)[0] != '-') {
1168                          atos(c_pfilt, sizeof(c_pfilt), vval(PFILT));
1169                          po = addarg(po, sskip2(vval(PFILT), 1));
1170                  } else
1171                          po = addarg(po, vval(PFILT));
1172 +        }
1173   }
1174  
1175  
# Line 1292 | Line 1314 | specview(                              /* get proper view spec from vs */
1314          if (cp == viewopts)             /* append any additional options */
1315                  vs++;           /* skip prefixed space if unneeded */
1316          strcpy(cp, vs);
1317 < #ifdef _WIN32
1317 > #if defined(_WIN32) || defined(_WIN64)
1318          if (strlen(viewopts) > 40) {
1319                  setenv("VIEW", viewopts);
1320                  return("$VIEW");
# Line 1338 | Line 1360 | getview(                               /* get view n, or NULL if none */
1360          }
1361   numview:
1362          mv = nvalue(VIEWS, n);          /* use view n */
1363 <        if ((vn != NULL) & (mv != NULL))
1363 >        if ((vn != NULL) & (mv != NULL)) {
1364                  if (*mv != '-') {
1365                          char    *mv2 = mv;
1366                          while (*mv2 && !isspace(*mv2))
# Line 1346 | Line 1368 | numview:
1368                          *vn = '\0';
1369                  } else
1370                          sprintf(vn, "%d", n+1);
1371 <
1371 >        }
1372          return(specview(mv));
1373   }
1374  
# Line 1360 | Line 1382 | myprintview(                   /* print out selected view */
1382          VIEW    vwr;
1383          char    buf[128];
1384          char    *cp;
1385 < #ifdef _WIN32
1385 > #if defined(_WIN32) || defined(_WIN64)
1386   /* XXX Should we allow something like this for all platforms? */
1387   /* XXX Or is it still required at all? */
1388   again:
1389   #endif
1390          if (vopts == NULL)
1391                  return(-1);
1392 < #ifdef _WIN32
1392 > #if defined(_WIN32) || defined(_WIN64)
1393          if (vopts[0] == '$') {
1394                  vopts = getenv(vopts+1);
1395                  goto again;
# Line 1394 | Line 1416 | rvu(                           /* run rvu with first view */
1416   )
1417   {
1418          char    *vw;
1419 <        char    combuf[PATH_MAX];
1419 >        char    combuf[R_CMDMAX];
1420                                          /* build command */
1421          if (touchonly || (vw = getview(0, NULL)) == NULL)
1422                  return;
# Line 1514 | Line 1536 | rpict(                         /* run rpict and pfilt for each view */
1536                                  fprintf(stderr, "%s: cannot create\n", pfile);
1537                                  quit(1);
1538                          }
1539 +                        pfile[-5] = '\0';
1540                          pfile = NULL;
1541                  }
1542          }
# Line 1591 | Line 1614 | rpict(                         /* run rpict and pfilt for each view */
1614                  } else {
1615                          if (overture) {         /* run overture calculation */
1616                                  sprintf(combuf,
1617 <                                        "%s%s %s%s -x 64 -y 64 -ps 1 %s > %s",
1618 <                                                c_rpict, rep, vw, opts,
1617 >                                        "%s%s %s%s%s -x 64 -y 64 -ps 1 %s > %s",
1618 >                                                c_rpict, rep, vw, opts, po,
1619                                                  oct1name, overfile);
1620                                  if (!do_rpiece || !next_process(0)) {
1621                                          if (runcom(combuf)) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines