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.3 by greg, Tue Mar 19 17:06:27 1991 UTC vs.
Revision 1.6 by greg, Thu Mar 21 16:46:25 1991 UTC

# Line 39 | Line 39 | struct {
39   static long     ncall = 0L;     /* number of calls to getpictscan */
40   static long     nread = 0L;     /* number of scanlines read */
41  
42 + extern long     ftell();
43  
44 +
45   COLR *
46   getpictscan(y)                  /* get picture scanline */
47   int     y;
48   {
47        extern long     ftell();
49          int     minused;
50          register int    i;
51                                          /* first check our buffers */
# Line 59 | Line 60 | int    y;
60                          minused = i;
61          }
62                                          /* not there, read it in */
63 <        if (scanpos[y] == -1) {                 /* need to search */
64 <                while (curpos > y) {
63 >        if (scanpos[y] < 0) {                   /* need to search */
64 >                for (i = y+1; i < curpos; i++)
65 >                        if (scanpos[i] >= 0) {
66 >                                if (fseek(pictfp, scanpos[i], 0) < 0)
67 >                                        goto seekerr;
68 >                                curpos = i;
69 >                                break;
70 >                        }
71 >                while (curpos >= y) {
72                          scanpos[curpos] = ftell(pictfp);
73                          if (freadcolrs(scan[minused].sl, pxsiz, pictfp) < 0)
74                                  goto readerr;
75 +                        nread++;
76                          curpos--;
77                  }
78 <        } else if (fseek(pictfp, scanpos[y], 0) < 0) {
79 <                fprintf(stderr, "%s: picture seek error\n", progname);
80 <                exit(1);
78 >        } else {
79 >                if (curpos != y && fseek(pictfp, scanpos[y], 0) < 0)
80 >                        goto seekerr;
81 >                if (freadcolrs(scan[minused].sl, pxsiz, pictfp) < 0)
82 >                        goto readerr;
83 >                nread++;
84 >                curpos = y-1;
85          }
73        if (freadcolrs(scan[minused].sl, pxsiz, pictfp) < 0)
74                goto readerr;
75        nread++;
76        curpos = y-1;
86          scan[minused].lused = ncall;
87          scan[minused].y = y;
88          return(scan[minused].sl);
89   readerr:
90          fprintf(stderr, "%s: picture read error\n", progname);
91          exit(1);
92 + seekerr:
93 +        fprintf(stderr, "%s: picture seek error\n", progname);
94 +        exit(1);
95   }
96  
97  
98 + #ifdef DEBUG
99   pict_stats()                    /* print out picture read statistics */
100   {
101          static long     lastcall = 0L;  /* ncall at last report */
# Line 90 | Line 103 | pict_stats()                   /* print out picture read statistics */
103  
104          if (ncall == lastcall)
105                  return;
106 <        fprintf(stderr, "%s: %ld scanlines read, %ld reused\n",
107 <                        progname, nread-lastread,
95 <                        (ncall-lastcall)-(nread-lastread));
106 >        fprintf(stderr, "%s: %ld scanlines read in %ld calls\n",
107 >                        progname, nread-lastread, ncall-lastcall);
108          lastcall = ncall;
109          lastread = nread;
110   }
111 + #endif
112  
113  
114   double
# Line 154 | Line 167 | float  *vb;
167          FVECT   dir;
168          register int    vh;
169  
170 + #ifdef DEBUG
171          if (verbose)
172                  fprintf(stderr, "%s: computing view span at %d...\n",
173                                  progname, vv);
174 + #endif
175          n = 0;
176          for (vh = -hsize; vh <= hsize; vh++) {
177                  if (compdir(dir, vh, vv) < 0) { /* off viewable region */
# Line 181 | Line 196 | float  *vb;
196                  rt_buf[6*n+5] = dir[2];
197                  buf_vh[n++] = vh;
198          }
199 + #ifdef DEBUG
200          if (verbose)
201                  pict_stats();
202 + #endif
203          if (n > 0) {                            /* process pending buffer */
204                  rt_compute(rt_buf, n);
205                  while (n-- > 0)
# Line 197 | Line 214 | int    np;
214   {
215          static float    nbuf[6] = {0.,0.,0.,0.,0.,0.};
216  
217 + #ifdef DEBUG
218          if (verbose && np > 1)
219                  fprintf(stderr, "%s: sending %d samples to rtrace...\n",
220                                  progname, np);
221 + #endif
222          if (writebuf(fd_tort,(char *)pb,6*sizeof(float)*np) < 6*sizeof(float)*np
223                  || writebuf(fd_tort,(char *)nbuf,sizeof(nbuf)) < sizeof(nbuf)) {
224                  fprintf(stderr, "%s: error writing to rtrace process\n",
# Line 241 | Line 260 | char   *fn;
260          scanpos = (long *)malloc(pysiz*sizeof(long));
261          if (scanpos == NULL)
262                  memerr("scanline positions");
263 <        for (i = 0; i < pysiz; i++)
263 >        for (i = pysiz-1; i >= 0; i--)
264                  scanpos[i] = -1L;
265 +        curpos = pysiz-1;
266          for (i = 0; i < NSCANS; i++) {
267                  scan[i].lused = -1;
268                  scan[i].y = -1;
# Line 250 | Line 270 | char   *fn;
270                  if (scan[i].sl == NULL)
271                          memerr("scanline buffers");
272          }
253        curpos = pysiz-1;
273   }
274  
275  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines