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 2.10 by schorsch, Thu Jul 3 22:41:45 2003 UTC vs.
Revision 2.19 by greg, Tue Nov 29 20:45:21 2022 UTC

# Line 10 | Line 10 | static const char      RCSid[] = "$Id$";
10   #include <stdlib.h>
11   #include <string.h>
12  
13 + #include "platform.h"
14   #include "rtprocess.h" /* Windows: must come first because of conflicts */
15   #include "glare.h"
16  
# Line 52 | Line 53 | static long    nrecl = 0L;     /* number of scanlines reclaim
53  
54   static int      wrongformat = 0;
55  
56 < SCAN    *scanretire();
56 > static SCAN * claimscan(int     y);
57 > static COLR * getpictscan(int   y);
58 > static double pict_val(FVECT    vd);
59 > static void rt_compute(float    *pb, int        np);
60 > static gethfunc getexpos;
61 > static SCAN * scanretire(void);
62 > static void initscans(void);
63 > static void donescans(void);
64  
57 extern long     ftell();
65  
66 <
67 < SCAN *
68 < claimscan(y)                    /* claim scanline from buffers */
69 < int     y;
66 > static SCAN *
67 > claimscan(                      /* claim scanline from buffers */
68 >        int     y
69 > )
70   {
71          int     hi = shash(y);
72          SCAN    *slast;
73 <        register SCAN   *sl;
73 >        SCAN    *sl;
74  
75          for (sl = hashtab[hi]; sl != NULL; sl = sl->next)
76                  if (sl->y == y)                         /* active scanline */
# Line 85 | Line 92 | int    y;
92   }
93  
94  
95 < COLR *
96 < getpictscan(y)                  /* get picture scanline */
97 < int     y;
95 > static COLR *
96 > getpictscan(                    /* get picture scanline */
97 >        int     y
98 > )
99   {
100 <        register SCAN   *sl;
101 <        register int    i;
100 >        SCAN    *sl;
101 >        int     i;
102                                          /* first check our buffers */
103          sl = claimscan(y);
104          if (sl == NULL)
# Line 137 | Line 145 | seekerr:
145  
146  
147   #ifdef DEBUG
148 < pict_stats()                    /* print out picture read statistics */
148 > void
149 > pict_stats(void)                        /* print out picture read statistics */
150   {
151          static long     lastcall = 0L;  /* ncall at last report */
152          static long     lastread = 0L;  /* nread at last report */
# Line 154 | Line 163 | pict_stats()                   /* print out picture read statistics */
163   #endif
164  
165  
166 < double
167 < pict_val(vd)                    /* find picture value for view direction */
168 < FVECT   vd;
166 > static double
167 > pict_val(                       /* find picture value for view direction */
168 >        FVECT   vd
169 > )
170   {
171          FVECT   pp;
172          FVECT   ip;
# Line 167 | Line 177 | FVECT  vd;
177          pp[0] = pictview.vp[0] + vd[0];
178          pp[1] = pictview.vp[1] + vd[1];
179          pp[2] = pictview.vp[2] + vd[2];
180 <        viewloc(ip, &pictview, pp);
171 <        if (ip[2] <= FTINY || ip[0] < 0. || ip[0] >= 1. ||
172 <                        ip[1] < 0. || ip[1] >= 1.)
180 >        if (viewloc(ip, &pictview, pp) != VL_GOOD)
181                  return(-1.0);
182          colr_color(res, getpictscan((int)(ip[1]*pysiz))[(int)(ip[0]*pxsiz)]);
183          return(luminance(res)/exposure);
# Line 177 | Line 185 | FVECT  vd;
185  
186  
187   double
188 < getviewpix(vh, vv)              /* compute single view pixel */
189 < int     vh, vv;
188 > getviewpix(             /* compute single view pixel */
189 >        int     vh,
190 >        int     vv
191 > )
192   {
193          FVECT   dir;
194          float   rt_buf[12];
# Line 189 | Line 199 | int    vh, vv;
199          npixinvw++;
200          if ((res = pict_val(dir)) >= 0.0)
201                  return(res);
202 <        if (rt_pd.r == -1) {
202 >        if (!(rt_pd.flags & PF_RUNNING)) {
203                  npixmiss++;
204                  return(-1.0);
205          }
# Line 204 | Line 214 | int    vh, vv;
214   }
215  
216  
217 < getviewspan(vv, vb)             /* compute a span of view pixels */
218 < int     vv;
219 < float   *vb;
217 > void
218 > getviewspan(            /* compute a span of view pixels */
219 >        int     vv,
220 >        float   *vb
221 > )
222   {
223          float   rt_buf[6*MAXPIX];       /* rtrace send/receive buffer */
224 <        register int    n;              /* number of pixels in buffer */
224 >        int     n;              /* number of pixels in buffer */
225          short   buf_vh[MAXPIX];         /* pixel positions */
226          FVECT   dir;
227 <        register int    vh;
227 >        int     vh;
228  
229   #ifdef DEBUG
230          if (verbose)
# Line 228 | Line 240 | float  *vb;
240                  npixinvw++;
241                  if ((vb[vh+hsize] = pict_val(dir)) >= 0.0)
242                          continue;
243 <                if (rt_pd.r == -1) {            /* missing information */
243 >                if (!(rt_pd.flags & PF_RUNNING)) {      /* missing information */
244                          npixmiss++;
245                          continue;
246                  }
247                                                  /* send to rtrace */
248                  if (n >= maxpix) {                      /* flush */
249                          rt_compute(rt_buf, n);
250 <                        while (n-- > 0)
250 >                        while (n > 0) {
251 >                                --n;
252                                  vb[buf_vh[n]+hsize] = luminance(rt_buf+3*n);
253 +                        }
254                  }
255                  rt_buf[6*n] = ourview.vp[0];
256                  rt_buf[6*n+1] = ourview.vp[1];
# Line 258 | Line 272 | float  *vb;
272   }
273  
274  
275 < rt_compute(pb, np)              /* process buffer through rtrace */
276 < float   *pb;
277 < int     np;
275 > static void
276 > rt_compute(             /* process buffer through rtrace */
277 >        float   *pb,
278 >        int     np
279 > )
280   {
281   #ifdef DEBUG
282          if (verbose && np > 1)
# Line 277 | Line 293 | int    np;
293   }
294  
295  
296 < int
297 < getexpos(s)                     /* get exposure from header line */
298 < char    *s;
296 > static int
297 > getexpos(                       /* get exposure from header line */
298 >        char    *s,
299 >        void    *p
300 > )
301   {
302 <        char    fmt[32];
302 >        char    fmt[MAXFMTLEN];
303  
304          if (isexpos(s))
305                  exposure *= exposval(s);
# Line 293 | Line 311 | char   *s;
311   }
312  
313  
314 < open_pict(fn)                   /* open picture file */
315 < char    *fn;
314 > void
315 > open_pict(                      /* open picture file */
316 >        char    *fn
317 > )
318   {
319          if ((pictfp = fopen(fn, "r")) == NULL) {
320                  fprintf(stderr, "%s: cannot open\n", fn);
321                  exit(1);
322          }
323 +        SET_FILE_BINARY(pictfp);
324          exposure = 1.0;
325          getheader(pictfp, getexpos, NULL);
326          if (wrongformat || !fscnresolu(&pxsiz, &pysiz, pictfp)) {
# Line 310 | Line 331 | char   *fn;
331   }
332  
333  
334 < close_pict()                    /* done with picture */
334 > void
335 > close_pict(void)                        /* done with picture */
336   {
337          if (pictfp == NULL)
338                  return;
# Line 320 | Line 342 | close_pict()                   /* done with picture */
342   }
343  
344  
345 < fork_rtrace(av)                 /* open pipe and start rtrace */
346 < char    *av[];
345 > void
346 > fork_rtrace(                    /* open pipe and start rtrace */
347 >        char    *av[]
348 > )
349   {
350          int     rval;
351  
# Line 341 | Line 365 | char   *av[];
365   }
366  
367  
368 < done_rtrace()                   /* wait for rtrace to finish */
368 > void
369 > done_rtrace(void)                       /* wait for rtrace to finish */
370   {
371          int     status;
372  
# Line 351 | Line 376 | done_rtrace()                  /* wait for rtrace to finish */
376                                  progname, status);
377                  exit(1);
378          }
354        rt_pd.r = -1;
379   }
380  
381  
382 < SCAN *
383 < scanretire()                    /* retire old scanlines to free list */
382 > static SCAN *
383 > scanretire(void)                        /* retire old scanlines to free list */
384   {
385          SCAN    *sold[NRETIRE];
386          int     n;
387          int     h;
388 <        register SCAN   *sl;
389 <        register int    i;
388 >        SCAN    *sl;
389 >        int     i;
390                                          /* grab the NRETIRE oldest scanlines */
391          sold[n = 0] = NULL;
392          for (h = 0; h < HSIZE; h++)
# Line 399 | Line 423 | scanretire()                   /* retire old scanlines to free list */
423   static char     *scan_buf;
424  
425  
426 < initscans()                             /* initialize scanline buffers */
426 > static void
427 > initscans(void)                         /* initialize scanline buffers */
428   {
429          int     scansize;
430 <        register SCAN   *ptr;
431 <        register int    i;
430 >        SCAN    *ptr;
431 >        int     i;
432                                          /* initialize positions */
433          scanpos = (long *)bmalloc(pysiz*sizeof(long));
434          if (scanpos == NULL)
# Line 438 | Line 463 | initscans()                            /* initialize scanline buffers */
463   }
464  
465  
466 < donescans()                             /* free up scanlines */
466 > static void
467 > donescans(void)                         /* free up scanlines */
468   {
469          bfree(scan_buf, scanbufsiz);
470          bfree((char *)scanpos, pysiz*sizeof(long));

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines