--- ray/src/rt/rv3.c 2008/08/28 23:50:39 2.25 +++ ray/src/rt/rv3.c 2008/08/29 05:46:03 2.26 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rv3.c,v 2.25 2008/08/28 23:50:39 greg Exp $"; +static const char RCSid[] = "$Id: rv3.c,v 2.26 2008/08/29 05:46:03 greg Exp $"; #endif /* * rv3.c - miscellaneous routines for rview. @@ -146,7 +146,27 @@ greyof( /* convert color to greyscale */ return(gcol); } +static void +recolor( /* recolor the given node */ + PNODE *p +) +{ + while (p->kid != NULL) { /* need to propogate down */ + int mx = (p->xmin + p->xmax) >> 1; + int my = (p->ymin + p->ymax) >> 1; + int ki; + if (p->x >= mx) + ki = (p->y >= my) ? UR : DR; + else + ki = (p->y >= my) ? UL : DL; + pcopy(p, p->kid+ki); + p = p->kid + ki; + } + (*dev->paintr)(greyscale?greyof(p->v):p->v, + p->xmin, p->ymin, p->xmax, p->ymax); +} + int paint( /* compute and paint a rectangle */ PNODE *p @@ -186,21 +206,8 @@ paint( /* compute and paint a rectangle */ copycolor(p->v, thisray.rcol); scalecolor(p->v, exposure); - while (p->kid != NULL) { /* need to propogate down */ - int mx = (p->xmin + p->xmax) >> 1; - int my = (p->ymin + p->ymax) >> 1; - int ki; - if (p->x >= mx) - ki = (p->y >= my) ? UR : DR; - else - ki = (p->y >= my) ? UL : DL; - pcopy(p, p->kid+ki); - p = p->kid + ki; - } + recolor(p); /* paint it */ - (*dev->paintr)(greyscale?greyof(p->v):p->v, - p->xmin, p->ymin, p->xmax, p->ymax); - if (ambounce <= 0) /* shall we check for input? */ flushintvl = ray_pnprocs*WFLUSH; else if (niflush < WFLUSH) @@ -228,8 +235,7 @@ waitrays(void) /* finish up pending rays */ PNODE *p = (PNODE *)raydone.rno; copycolor(p->v, raydone.rcol); scalecolor(p->v, exposure); - (*dev->paintr)(greyscale?greyof(p->v):p->v, - p->xmin, p->ymin, p->xmax, p->ymax); + recolor(p); nwaited++; } if (rval < 0)