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.3 by greg, Tue Dec 12 15:53:10 1989 UTC vs.
Revision 1.4 by greg, Wed Dec 13 12:41:25 1989 UTC

# Line 263 | Line 263 | fillpicture()                          /* fill in empty spaces */
263                  return;
264          }
265          for (x = 0; x < ourview.hresolu; x++)
266 <                yback[x] = -1;
266 >                yback[x] = -2;
267                                                          /* fill image */
268 <        for (y = 0; y < ourview.vresolu; y++)
268 >        for (y = 0; y < ourview.vresolu; y++) {
269 >                xback = -2;
270                  for (x = 0; x < ourview.hresolu; x++)
271 <                        if (zscan(y)[x] <= 0.0) {       /* found hole */
272 <                                xback = x-1;
273 <                                do {                    /* find boundary */
274 <                                        if (yback[x] < 0) {
275 <                                                for (i = y+1;
276 <                                                        i < ourview.vresolu;
276 <                                                                i++)
277 <                                                        if (zscan(i)[x] > 0.0)
278 <                                                                break;
279 <                                                if (i < ourview.vresolu
271 >                        if (zscan(y)[x] <= 0.0) {       /* empty pixel */
272 >                                if (yback[x] == -2) {
273 >                                        for (i = y+1; i < ourview.vresolu; i++)
274 >                                                if (zscan(i)[x] > 0.0)
275 >                                                        break;
276 >                                        if (i < ourview.vresolu
277                                  && (y <= 0 || zscan(y-1)[x] < zscan(i)[x]))
278 <                                                        yback[x] = i;
279 <                                                else
280 <                                                        yback[x] = y-1;
284 <                                        }
285 <                                } while (++x < ourview.hresolu
286 <                                                && zscan(y)[x] <= 0.0);
287 <                                i = xback;              /* pick background */
288 <                                if (x < ourview.hresolu
289 <                        && (i < 0 || zscan(y)[i] < zscan(y)[x]))
290 <                                        xback = x;
291 <                                                        /* fill hole */
292 <                                if (xback < 0) {
293 <                                        while (++i < x)
294 <                                                if (yback[i] >= 0)
295 <                                copycolr(pscan(y)[i],pscan(yback[i])[i]);
296 <                                } else {
297 <                                        while (++i < x)
298 <                                                if (yback[i] < 0
299 <                                || ABS(i-xback) <= 1 || (ABS(y-yback[i]) > 1
300 <                                && zscan(yback[i])[i] < zscan(y)[xback]))
301 <                                        copycolr(pscan(y)[i],pscan(y)[xback]);
302 <                                                else
303 <                                        copycolr(pscan(y)[i],pscan(yback[i])[i]);
278 >                                                yback[x] = i;
279 >                                        else
280 >                                                yback[x] = y-1;
281                                  }
282 <                } else
283 <                        yback[x] = -1;                  /* clear boundary */
282 >                                if (xback == -2) {
283 >                                        for (i = x+1; x < ourview.hresolu; i++)
284 >                                                if (zscan(y)[i] > 0.0)
285 >                                                        break;
286 >                                        if (i < ourview.hresolu
287 >                                && (x <= 0 || zscan(y)[x-1] < zscan(y)[i]))
288 >                                                xback = i;
289 >                                        else
290 >                                                xback = x-1;
291 >                                }
292 >                                if (xback < 0 && yback[x] < 0)
293 >                                        continue;
294 >                                if (yback[x] < 0 || ABS(x-xback) <= 1
295 >                                        || ( ABS(y-yback[x]) > 1
296 >                                && zscan(yback[x])[x] < zscan(y)[xback] ))
297 >                                        copycolr(pscan(y)[x],pscan(y)[xback]);
298 >                                else
299 >                                        copycolr(pscan(y)[x],pscan(yback[x])[x]);
300 >                        } else {                                /* full pixel */
301 >                                yback[x] = -2;
302 >                                xback = -2;
303 >                        }
304 >        }
305          free((char *)yback);
306   }
307  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines