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

Comparing ray/src/util/glareval.c (file contents):
Revision 1.8 by greg, Wed Apr 3 15:20:35 1991 UTC vs.
Revision 1.12 by greg, Fri Apr 12 10:28:34 1991 UTC

# Line 20 | Line 20 | static char SCCSid[] = "$SunId$ LBL";
20   #define vfork           fork
21   #endif
22  
23 < #define MAXSBUF         409580  /* maximum total size of scanline buffer */
24 < #define HSIZE           227     /* size of scanline hash table */
23 > #define MAXSBUF         524268  /* maximum total size of scanline buffer */
24 > #define HSIZE           317     /* size of scanline hash table */
25   #define NRETIRE         16      /* number of scanlines to retire at once */
26  
27   int     rt_pid = -1;            /* process id for rtrace */
# Line 75 | Line 75 | int    y;
75                          if (sl->y == y) {               /* reclaim */
76                                  sl->next = hashtab[hi];
77                                  hashtab[hi] = sl;
78 + #ifdef DEBUG
79 +                                if (verbose)
80 +                                        fprintf(stderr,
81 +                                                "%s: scanline %d reclaimed\n",
82 +                                                        progname, y);
83 + #endif
84                          }
85                          return(sl);
86                  }
# Line 171 | Line 177 | FVECT  vd;
177  
178  
179   double
180 < getviewpix(vh, vv)              /* compute single view pixel */
180 > getviewpix(vh, vv, se)          /* compute single view pixel */
181   int     vh, vv;
182 + SPANERR *se;
183   {
184          FVECT   dir;
185          float   rt_buf[6];
186          double  res;
187  
188 <        if (compdir(dir, vh, vv) < 0)
188 >        if (compdir(dir, vh, vv, se) < 0)
189                  return(-1.0);
190          npixinvw++;
191          if ((res = pict_val(dir)) >= 0.0)
# Line 205 | Line 212 | float  *vb;
212          float   rt_buf[6*MAXPIX];       /* rtrace send/receive buffer */
213          register int    n;              /* number of pixels in buffer */
214          short   buf_vh[MAXPIX];         /* pixel positions */
215 +        SPANERR sperr;
216          FVECT   dir;
217          register int    vh;
218  
# Line 213 | Line 221 | float  *vb;
221                  fprintf(stderr, "%s: computing view span at %d...\n",
222                                  progname, vv);
223   #endif
224 +        setspanerr(&sperr, vv);
225          n = 0;
226          for (vh = -hsize; vh <= hsize; vh++) {
227 <                if (compdir(dir, vh, vv) < 0) { /* off viewable region */
227 >                if (compdir(dir, vh, vv, &sperr) < 0) { /* not in view */
228                          vb[vh+hsize] = -1.0;
229                          continue;
230                  }
# Line 289 | Line 298 | char   *s;
298   open_pict(fn)                   /* open picture file */
299   char    *fn;
300   {
292        register int    i;
293
301          if ((pictfp = fopen(fn, "r")) == NULL) {
302                  fprintf("%s: cannot open\n", fn);
303                  exit(1);
# Line 307 | Line 314 | char   *fn;
314  
315   close_pict()                    /* done with picture */
316   {
310        register int    i;
311
317          if (pictfp == NULL)
318                  return;
319          fclose(pictfp);
# Line 410 | Line 415 | SCAN *
415   scanretire()                    /* retire old scanlines to free list */
416   {
417          SCAN    *sold[NRETIRE];
413        SCAN    head;
418          int     n;
419          int     h;
420          register SCAN   *sl;
421          register int    i;
422                                          /* grab the NRETIRE oldest scanlines */
423          sold[n = 0] = NULL;
424 <        for (h = 0; h < HSIZE; h++) {
425 <                head.next = hashtab[h];
426 <                sl = &head;
427 <                while (sl->next != NULL) {
424 <                        for (i = n; i && sold[i-1]->lused > sl->next->lused; i--)
425 <                                if (i == NRETIRE) {     /* reallocate */
426 <                                        register int    oh;
427 <                                        oh = shash(sold[NRETIRE-1]->y);
428 <                                        sold[NRETIRE-1]->next = hashtab[oh];
429 <                                        if (h == oh && sl == &head)
430 <                                                head.next = sl = sold[NRETIRE-1];
431 <                                        else
432 <                                                hashtab[oh] = sold[NRETIRE-1];
433 <                                } else                  /* else bubble up */
424 >        for (h = 0; h < HSIZE; h++)
425 >                for (sl = hashtab[h]; sl != NULL; sl = sl->next) {
426 >                        for (i = n; i && sold[i-1]->lused > sl->lused; i--)
427 >                                if (i < NRETIRE)
428                                          sold[i] = sold[i-1];
429                          if (i < NRETIRE) {
430 <                                sold[i] = sl->next;
437 <                                sl->next = sl->next->next;
430 >                                sold[i] = sl;
431                                  if (n < NRETIRE)        /* grow list */
432                                          n++;
433 <                        } else
441 <                                sl = sl->next;
433 >                        }
434                  }
443                hashtab[h] = head.next;
444        }
435                                          /* put scanlines into free list */
436 <        for (i = 1; i < n; i++) {
437 <                sold[i]->next = freelist;
438 <                freelist = sold[i];
436 >        for (i = 0; i < n; i++) {
437 >                h = shash(sold[i]->y);
438 >                sl = hashtab[h];
439 >                if (sl == sold[i])
440 >                        hashtab[h] = sl->next;
441 >                else {
442 >                        while (sl->next != sold[i])     /* IS in list */
443 >                                sl = sl->next;
444 >                        sl->next = sold[i]->next;
445 >                }
446 >                if (i > 0) {            /* save oldest as return value */
447 >                        sold[i]->next = freelist;
448 >                        freelist = sold[i];
449 >                }
450          }
451          return(sold[0]);
452   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines