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

Comparing ray/src/hd/rholo3.c (file contents):
Revision 3.27 by gwlarson, Thu Jan 7 22:04:49 1999 UTC vs.
Revision 3.30 by gwlarson, Tue Feb 2 16:13:24 1999 UTC

# Line 9 | Line 9 | static char SCCSid[] = "$SunId$ SGI";
9   */
10  
11   #include "rholo.h"
12 + #include <sys/types.h>
13  
14   #ifndef NFRAG2CHUNK
15   #define NFRAG2CHUNK     4096    /* number of fragments to start chunking */
# Line 23 | Line 24 | static char SCCSid[] = "$SunId$ SGI";
24  
25   #define rchunk(n)       (((n)+(RPACKSIZ/2))/RPACKSIZ)
26  
27 + extern time_t   time();
28 +
29 + int     chunkycmp = 0;          /* clump beams together on disk */
30 +
31   static PACKHEAD *complist=NULL; /* list of beams to compute */
32   static int      complen=0;      /* length of complist */
33   static int      listpos=0;      /* current list position for next_packet */
34   static int      lastin= -1;     /* last ordered position in list */
30 static int      chunky=0;       /* clump beams together on disk */
35  
36  
37   int
# Line 37 | Line 41 | register PACKHEAD      *b0, *b1;
41          BEAMI   *bip0, *bip1;
42          register long   c;
43                                          /* first check desired quantities */
44 <        if (chunky)
45 <                c = rchunk(b1->nr)*(rchunk(b0->nc)+1) -
46 <                                rchunk(b0->nr)*(rchunk(b1->nc)+1);
44 >        if (chunkycmp)
45 >                c = rchunk(b1->nr)*(rchunk(b0->nc)+1L) -
46 >                                rchunk(b0->nr)*(rchunk(b1->nc)+1L);
47          else
48 <                c = b1->nr*(b0->nc+1) - b0->nr*(b1->nc+1);
49 <        if (c) return(c);
48 >                c = b1->nr*(b0->nc+1L) - b0->nr*(b1->nc+1L);
49 >        if (c > 0) return(1);
50 >        if (c < 0) return(-1);
51                                  /* only one file, so skip the following: */
52   #if 0
53                                          /* next, check file descriptors */
# Line 98 | Line 103 | register HDBEAMI       *hb;
103                          error(CONSISTENCY, "unregistered holodeck in dispbeam");
104          p->bi = hb->b;
105          disp_packet(p);                 /* display it */
106 +        if (n >= 1024) {                /* free ridiculous packets */
107 +                free((char *)p);
108 +                p = NULL; n = 0;
109 +        }
110   }
111  
112  
# Line 258 | Line 267 | init_global()                  /* initialize global ray computation *
267                  free((char *)complist);
268                  done_packets(flush_queue());
269          }
270 +                                        /* reseed random number generator */
271 +        srandom(time(NULL));
272                                          /* allocate beam list */
273          complen = 0;
274          for (j = 0; hdlist[j] != NULL; j++)
# Line 324 | Line 335 | sortcomplist()                 /* fix our list order */
335  
336          if (complen <= 0)       /* check to see if there is even a list */
337                  return;
338 <        if (!chunky)            /* check to see if fragment list is full */
338 >        if (!chunkycmp)         /* check to see if fragment list is full */
339                  if (!hdfragOK(hdlist[0]->fd, &listlen, NULL)
340   #if NFRAG2CHUNK
341                                  || listlen >= NFRAG2CHUNK
342   #endif
343                                  ) {
344 +                        chunkycmp++;    /* use "chunky" comparison */
345 +                        lastin = -1;    /* need to re-sort list */
346   #ifdef DEBUG
347                          error(WARNING, "using chunky comparison mode");
348   #endif
336                        chunky++;       /* use "chunky" comparison */
337                        lastin = -1;    /* need to re-sort list */
349                  }
350          if (lastin < 0 || listpos*4 >= complen*3)
351                  qsort((char *)complist, complen, sizeof(PACKHEAD), beamcmp);
# Line 391 | Line 402 | int    n;
402          p->nr = complist[listpos].nr - p->nc;
403          if (p->nr <= 0)
404                  return(0);
405 < #ifdef DEBUG
406 <        if (n < 1 | n > RPACKSIZ)
396 <                error(CONSISTENCY, "next_packet called with bad n value");
397 < #endif
405 >        DCHECK(n < 1 | n > RPACKSIZ,
406 >                        CONSISTENCY, "next_packet called with bad n value");
407          if (p->nr > n)
408                  p->nr = n;
409          complist[listpos].nc += p->nr;  /* find where this one would go */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines