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

Comparing ray/src/px/pinterp.c (file contents):
Revision 1.1 by greg, Sun Dec 10 17:34:13 1989 UTC vs.
Revision 1.2 by greg, Tue Dec 12 11:21:25 1989 UTC

# Line 250 | Line 250 | float  *zline;
250  
251   fillpicture()                           /* fill in empty spaces */
252   {
253 +        int     *yback, xback;
254          int     y;
255 <        COLR    cfill;
256 <        register int    x, xblank;
257 <        
258 <        for (y = 0; y < ourview.vresolu; y++) {
259 <                xblank = -1;
260 <                for (x = 0; x < ourview.hresolu; x++)
261 <                        if (zscan(y)[x] <= 0.0) {
261 <                                if (xblank < 0)
262 <                                        xblank = x;
263 <                        } else if (xblank >= 0) {
264 <                                if (xblank == 0 || zscan(y)[xblank-1] < zscan(y)[x])
265 <                                        copycolr(cfill, pscan(y)[x]);
266 <                                else
267 <                                        copycolr(cfill, pscan(y)[xblank-1]);
268 <                                for ( ; xblank < x; xblank++)
269 <                                        copycolr(pscan(y)[xblank], cfill);
270 <                                xblank = -1;
271 <                        }
272 <                if (xblank > 0) {
273 <                        copycolr(cfill, pscan(y)[xblank-1]);
274 <                        for ( ; xblank < ourview.hresolu; xblank++)
275 <                                copycolr(pscan(y)[xblank], cfill);
276 <                }
255 >        COLR    pfill;
256 >        register int    x, i;
257 >                                                        /* get back buffer */
258 >        yback = (int *)malloc(ourview.hresolu*sizeof(int));
259 >        if (yback == NULL) {
260 >                perror(progname);
261 >                return;
262          }
263 +        for (x = 0; x < ourview.hresolu; x++)
264 +                yback[x] = -1;
265 +                                                        /* fill image */
266 +        for (y = 0; y < ourview.vresolu; y++)
267 +                for (x = 0; x < ourview.hresolu; x++)
268 +                        if (zscan(y)[x] <= 0.0) {       /* found hole */
269 +                                xback = x-1;
270 +                                do {                    /* find boundary */
271 +                                        if (yback[x] < 0) {
272 +                                                for (i = y+1;
273 +                                                        i < ourview.vresolu;
274 +                                                                i++)
275 +                                                        if (zscan(i)[x] > 0.0)
276 +                                                                break;
277 +                                                if (i < ourview.vresolu
278 +                                && (y <= 0 || zscan(y-1)[x] < zscan(i)[x]))
279 +                                                        yback[x] = i;
280 +                                                else
281 +                                                        yback[x] = y-1;
282 +                                        }
283 +                                } while (++x < ourview.hresolu
284 +                                                && zscan(y)[x] <= 0.0);
285 +                                i = xback;              /* pick background */
286 +                                if (x < ourview.hresolu
287 +                        && (i < 0 || zscan(y)[i] < zscan(y)[x]))
288 +                                        xback = x;
289 +                                                        /* fill hole */
290 +                                if (xback < 0) {
291 +                                        while (++i < x)
292 +                                                if (yback[i] >= 0)
293 +                                copycolr(pscan(y)[i],pscan(yback[i])[i]);
294 +                                } else {
295 +                                        while (++i < x)
296 +                                                if (yback[i] < 0 ||
297 +                                zscan(yback[i])[i] < zscan(y)[xback])
298 +                                        copycolr(pscan(y)[i],pscan(y)[xback]);
299 +                                                else
300 +                                        copycolr(pscan(y)[i],pscan(yback[i])[i]);
301 +                                }
302 +                } else
303 +                        yback[x] = -1;                  /* clear boundary */
304 +        free((char *)yback);
305   }
306  
307  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines