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

Comparing ray/src/hd/rhd_odraw.c (file contents):
Revision 3.2 by gwlarson, Sun Dec 20 20:37:53 1998 UTC vs.
Revision 3.3 by gwlarson, Mon Dec 21 13:17:00 1998 UTC

# Line 58 | Line 58 | int    n;
58          int     nbytes, i, j, k, nextsamp, count, blockdiv;
59          int     res[2];
60  
61 <        if (odNViews) {                 /* deallocate view structures */
62 <                for (i = 0; i < odNViews; i++) {
61 >        if (odNViews > 0) {             /* deallocate view structures */
62 >                for (i = odNViews; i--; ) {
63                          free((char *)odView[i].bmap);
64 +                        free((char *)odView[i].pmap);
65                          if (odView[i].emap != NULL)
66                                  free((char *)odView[i].emap);
67                  }
# Line 109 | Line 110 | int    n;
110          if (blockdiv < 8) blockdiv = 8;
111          nextsamp = 0; count /= blockdiv*blockdiv;       /* # blocks */
112          while (i--) {                   /* initialize each view */
112                odView[i].emap = NULL;
113                odView[i].dmap = NULL;
113                  dev_auxview(i, res);
114                  odView[i].hhi = res[0];
115                  odView[i].hlow = (res[0] + blockdiv/2) / blockdiv;
# Line 118 | Line 117 | int    n;
117                  odView[i].vhi = res[1];
118                  odView[i].vlow = (res[1] + blockdiv/2) / blockdiv;
119                  if (odView[i].vlow < 1) odView[i].vlow = 1;
120 +                odView[i].emap = NULL;
121 +                odView[i].dmap = NULL;
122 +                odView[i].pmap = (int4 *)calloc(FL4NELS(res[0]*res[1]),
123 +                                sizeof(int4));
124 +                if (odView[i].pmap == NULL)
125 +                        return(0);
126                  j = odView[i].hlow*odView[i].vlow;
127                  odView[i].bmap = (struct ODblock *)malloc(
128                                  j * sizeof(struct ODblock));
# Line 179 | Line 184 | double prox;
184          if (prox > bp->pthresh)
185                  return(-1);             /* worse than free list occupants */
186                                          /* check for duplicate pixel */
187 <        for (i = bp->first+bp->nsamp; i-- > bp->first; )
187 >        if (CHK4(odView[vn].pmap, vh*odView[vn].hhi + hh))
188 >                i = bp->first + bp->nsamp;
189 >        else
190 >                i = -1;
191 >        while (i-- > bp->first)
192                  if (hh == odS.ip[i][0] && vh == odS.ip[i][1]) { /* found it! */
193                                                  /* search free list for it */
194                          if (i == bp->free)
# Line 197 | Line 206 | double prox;
206                                  return(-1);     /* previous sample is fine */
207                          goto gotit;
208                  }
209 +        DCHECK(i>=-1, WARNING, "pixel in presence map not found in block");
210          if (bp->free != ENDFREE) {      /* allocate from free list */
211                  i = bp->free;
212 +                if (odS.ip[i][0] >= 0 & odS.ip[i][1] >= 0)
213 +                        CLR4(odView[vn].pmap, odS.ip[i][1]*odView[vn].hhi +
214 +                                                        odS.ip[i][0]);
215                  bp->free = odS.nextfree(i);
216                  bp->nused++;
217                  goto gotit;
# Line 222 | Line 235 | double prox;
235                  bp->nused--;
236          }
237          i = si[0];                      /* use worst sample */
238 +        CLR4(odView[vn].pmap, odS.ip[i][1]*odView[vn].hhi + odS.ip[i][0]);
239   gotit:
240          odS.ip[i][0] = hh;
241          odS.ip[i][1] = vh;
242          odS.closeness(i) = prox;
243 +        SET4(odView[vn].pmap, vh*odView[vn].hhi + hh);
244          return(i);
245   }
246  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines