--- ray/src/rt/rview.c 2008/08/21 07:05:59 2.29 +++ ray/src/rt/rview.c 2009/12/12 23:08:13 2.33 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rview.c,v 2.29 2008/08/21 07:05:59 greg Exp $"; +static const char RCSid[] = "$Id: rview.c,v 2.33 2009/12/12 23:08:13 greg Exp $"; #endif /* * rview.c - routines and variables for interactive view generation. @@ -19,6 +19,22 @@ static const char RCSid[] = "$Id: rview.c,v 2.29 2008/ void +quit(code) /* quit program */ +int code; +{ +#ifdef MSTATS + if (code == 2 && errno == ENOMEM) + printmemstats(stderr); +#endif + if (ray_pnprocs > 0) /* close children if any */ + ray_pclose(0); + else if (!ray_pnprocs) /* in parent */ + devclose(); + exit(code); +} + + +void devopen( /* open device driver */ char *dname ) @@ -85,8 +101,6 @@ rview(void) /* do a view */ (*dev->comout)(buf); refine(&ptrunk, pdepth+1); } - if (waitrays() < 0) - quit(1); if (dev->inpready) /* noticed some input */ command(": "); else /* finished this depth */ @@ -109,6 +123,9 @@ again: ; if (*args) *args++ = '\0'; else *++args = '\0'; + + if (waitrays() < 0) /* clear ray queue */ + quit(1); switch (inpbuf[0]) { case 'f': /* new frame (|focus|free) */ @@ -395,13 +412,6 @@ refine( /* refine a node */ growth += refine(p->kid+DR, pd-1); if (my < pframe.u) growth += refine(p->kid+UR, pd-1); - } - /* recompute sum */ - if (growth) { - setcolor(p->v, 0.0, 0.0, 0.0); - for (i = 0; i < 4; i++) - addcolor(p->v, p->kid[i].v); - scalecolor(p->v, 0.25); } return(growth); }