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

Comparing ray/src/rt/rtrace.c (file contents):
Revision 2.77 by greg, Sat May 4 13:48:06 2019 UTC vs.
Revision 2.79 by greg, Mon May 6 16:49:38 2019 UTC

# Line 118 | Line 118 | rtrace(                                /* trace rays from file */
118          unsigned long  vcount = (hresolu > 1) ? (unsigned long)hresolu*vresolu
119                                                : (unsigned long)vresolu;
120          long  nextflush = (vresolu > 0) & (hresolu > 1) ? 0 : hresolu;
121 +        int  something2flush = 0;
122          FILE  *fp;
123          double  d;
124          FVECT  orig, direc;
# Line 136 | Line 137 | rtrace(                                /* trace rays from file */
137                  castonly = 0;
138          else if (castonly)
139                  nproc = 1;              /* don't bother multiprocessing */
140 +        if ((nextflush > 0) & (nproc > nextflush)) {
141 +                error(WARNING, "reducing number of processes to match flush interval");
142 +                nproc = nextflush;
143 +        }
144          switch (outform) {
145          case 'a': putreal = puta; break;
146          case 'f': putreal = putf; break;
# Line 154 | Line 159 | rtrace(                                /* trace rays from file */
159          if (hresolu > 0) {
160                  if (vresolu > 0)
161                          fprtresolu(hresolu, vresolu, stdout);
162 <                fflush(stdout);
162 >                else
163 >                        fflush(stdout);
164          }
165                                          /* process file */
166          while (getvec(orig, inform, fp) == 0 &&
# Line 162 | Line 168 | rtrace(                                /* trace rays from file */
168  
169                  d = normalize(direc);
170                  if (d == 0.0) {                         /* zero ==> flush */
171 <                        if ((--nextflush <= 0) | !vcount) {
171 >                        if ((--nextflush <= 0) | !vcount && something2flush) {
172                                  if (ray_pnprocs > 1 && ray_fifo_flush() < 0)
173                                          error(USER, "child(ren) died");
174                                  bogusray();
175                                  fflush(stdout);
176 +                                something2flush = 0;
177                                  nextflush = (vresolu > 0) & (hresolu > 1) ? 0 :
178                                                                  hresolu;
179                          } else
# Line 179 | Line 186 | rtrace(                                /* trace rays from file */
186                                          error(USER, "child(ren) died");
187                                  fflush(stdout);
188                                  nextflush = hresolu;
189 <                        }
189 >                        } else
190 >                                something2flush = 1;
191                  }
192                  if (ferror(stdout))
193                          error(SYSTEM, "write error");
# Line 314 | Line 322 | setoutput(                             /* set up output tables */
322   static void
323   bogusray(void)                  /* print out empty record */
324   {
317        memset(&thisray, 0, sizeof(thisray));
325          rayorigin(&thisray, PRIMARY, NULL, NULL);
326          printvals(&thisray);
327   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines