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

Comparing ray/src/rt/rxpiece.cpp (file contents):
Revision 2.6 by greg, Thu Oct 31 19:22:36 2024 UTC vs.
Revision 2.13 by greg, Thu Jun 5 18:26:46 2025 UTC

# Line 10 | Line 10 | static const char      RCSid[] = "$Id$";
10   #include  <time.h>
11   #include  <signal.h>
12   #include  <sys/mman.h>
13 + #include  <sys/wait.h>
14   #include  <unistd.h>
15  
16   #include  "platform.h"
17   #include  "RpictSimulManager.h"
18 + #include  "func.h"
19   #include  "ambient.h"
20   #include  "pmapray.h"
21   #include  "random.h"
22  
21 extern char  *progname;                 /* argv[0] */
23   const char  *sigerr[NSIG];              /* signal error messages */
24  
25   VIEW  ourview = STDVIEW;                /* global view parameters */
# Line 37 | Line 38 | double  mblur = 0.;                    /* motion blur parameter (unused
38  
39   double  dblur = 0.;                     /* depth-of-field blur parameter */
40  
41 < int  nproc = 1;                         /* number of processes to run */
41 > int  nproc = 1;                         /* number of processes to run (-1 in child) */
42  
43   RpictSimulManager       myRPmanager;    // global simulation manager
44  
# Line 56 | Line 57 | static RenderDataType rpiece(char *pout, RenderDataTyp
57                  "AdaptiveShadowTesting\nOutputs=v,l\n" \
58                  "OutputCS=RGB,XYZ,prims,spec\n"
59  
60 <
60 < // We could call myRPmanager.Cleanup() but why waste time
61 < // unwinding data structures when the whole frame is going away?
60 > // Exit program
61   void
62   quit(int code)                          /* quit program */
63   {
64 <        ambsync();                      // flush ambient cache
64 >        exit(code);                     // don't bother to free data structs
65 > }
66  
67 <        ray_done_pmap();                /* PMAP: free photon maps */
68 <
69 <        exit(code);
67 > /* Set default options */
68 > static void
69 > default_options(void)
70 > {
71 >        shadthresh = .05;
72 >        shadcert = .5;
73 >        srcsizerat = .25;
74 >        directrelay = 1;
75 >        ambacc = 0.2;
76 >        ambres = 64;
77 >        ambdiv = 512;
78 >        ambssamp = 128;
79 >        maxdepth = 7;
80   }
81  
72
82   int
83   main(int  argc, char  *argv[])
84   {
# Line 90 | Line 99 | main(int  argc, char  *argv[])
99          int  outfmt = 'c';
100          int  rval;
101          int  i;
102 <                                        /* global program name */
103 <        progname = argv[0];
102 >                                        /* set global program name */
103 >        fixargv0(argv[0]);
104                                          /* feature check only? */
105          strcat(RFeatureList, RXPIECE_FEATURES);
106          if (argc > 1 && !strcmp(argv[1], "-features"))
107                  return feature_status(argc-2, argv+2);
108 +                                        /* initialize calcomp routines */
109 +        initfunc();
110 +                                        /* set defaults */
111 +        default_options();
112                                          /* option city */
113          for (i = 1; i < argc; i++) {
114                                                  /* expand arguments */
# Line 323 | Line 336 | main(int  argc, char  *argv[])
336                                          // render tiles
337          dtype = rpiece(outfile, dtype, zfile);
338  
339 +        ambsync();                      // flush ambient cache
340 +
341 +        ray_done_pmap();                /* PMAP: free photon maps */
342 +
343          quit(dtype==RDTnone);           // status is 1 on failure
344  
345   badopt:
# Line 509 | Line 526 | children_finished()
526  
527          if (cpid == 0) {                // children render tiles
528                  sleep(nproc - cnt);     // avoid race conditions
529 +                nproc = -1;             // flag as child
530                  return false;
531          }
532          cow_doneshare();                // parent frees memory and waits
# Line 614 | Line 632 | rpiece(char *pout, RenderDataType dt, char *zout)
632          } else {
633                  dt = myRPmanager.ReopenOutput(pdfp, pout, zout);
634                  if (dt == RDTnone)
635 <                        quit(1);
635 >                        return RDTnone;
636                  if (!fscnresolu(&hresolu, &vresolu, pdfp[0]))
637                          error(USER, "missing picture resolution");
638                  pixaspect = .0;                 // need to leave this as is
639                  myRPmanager.NewHeader(pout);    // get prev. header info
640                  const char *    tval = myRPmanager.GetHeadStr("TILED=");
641 <                if (tval) sscanf(tval, "%d %d", &tileGrid[0], &tileGrid[1]);
641 >                if (!tval || sscanf(tval, "%d %d", &tileGrid[0], &tileGrid[1]) != 2)
642 >                        error(USER, "existing picture must be tiled");
643                  CHECK(myRPmanager.GetView()==NULL,
644                                  USER, "missing view in picture file");
645                  ourview = *myRPmanager.GetView();
# Line 644 | Line 663 | rpiece(char *pout, RenderDataType dt, char *zout)
663                  myRPmanager.AddHeader(buf);
664                  dt = myRPmanager.NewOutput(pdfp, pout, dt, zout);
665                  if (dt == RDTnone)
666 <                        quit(1);
666 >                        return RDTnone;
667                  fprtresolu(hresolu, vresolu, pdfp[0]);
668                  fflush(pdfp[0]);
669                  if (RDTdepthT(dt) == RDTdshort) {
# Line 729 | Line 748 | rpiece(char *pout, RenderDataType dt, char *zout)
748                  ndone++;
749          }
750          if (!ndone)
751 <                error(WARNING, "no tiles need rendering, exit");
751 >                error(WARNING, "no tiles to render, exiting");
752          /*
753          munmap(pixMap, pmlen);                  // technically unnecessary...
754          if (zdMap) munmap(zdMap, zmlen);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines