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

Comparing ray/src/rt/rview.c (file contents):
Revision 1.12 by greg, Fri May 3 15:22:24 1991 UTC vs.
Revision 1.14 by greg, Fri May 3 16:12:34 1991 UTC

# Line 116 | Line 116 | rview()                                /* do a view */
116          char  buf[32];
117  
118          devopen(devname);               /* open device */
119 <        newimage();                     /* set up image */
119 >        newimage();                     /* start image (calls fillreserves) */
120  
121          for ( ; ; ) {                   /* quit in command() */
122 <                while (hresolu <= 1<<pdepth &&
123 <                                vresolu <= 1<<pdepth)
122 >                while (hresolu <= 1<<pdepth && vresolu <= 1<<pdepth)
123                          command("done: ");
124 <
125 <                if (hresolu <= psample<<pdepth &&
126 <                                vresolu <= psample<<pdepth) {
124 >                while (reserve_mem == NULL)
125 >                        command("out of memory: ");
126 >                errno = 0;
127 >                if (hresolu <= psample<<pdepth && vresolu <= psample<<pdepth) {
128                          sprintf(buf, "%d sampling...\n", 1<<pdepth);
129                          (*dev->comout)(buf);
130                          rsample();
# Line 133 | Line 133 | rview()                                /* do a view */
133                          (*dev->comout)(buf);
134                          refine(&ptrunk, 0, 0, hresolu, vresolu, pdepth+1);
135                  }
136 <                if (dev->inpready)
136 >                if (errno == ENOMEM)            /* ran out of memory */
137 >                        freereserves();
138 >                else if (dev->inpready)         /* noticed some input */
139                          command(": ");
140 <                else
140 >                else                            /* finished this depth */
141                          pdepth++;
142          }
143   }
144  
145  
146 < memreserve()                    /* fill memory reserves */
146 > fillreserves()                  /* fill memory reserves */
147   {
148          if (reserve_mem != NULL)
149 <                return;                 /* got some already */
149 >                return;
150          reserve_mem = malloc(RESERVE_AMT);
151   }
152  
153  
154 < memerror(detail)                /* try and rescue a memory error */
153 < char    *detail;
154 > freereserves()                  /* free memory reserves */
155   {
156 <        if (reserve_mem == NULL) {
157 <                sprintf(errmsg, "out of memory %s", detail);
157 <                error(SYSTEM, errmsg);
158 <        }
156 >        if (reserve_mem == NULL)
157 >                return;
158          free(reserve_mem);
159          reserve_mem = NULL;
161        for ( ; ; )
162                command("out of memory: ");
160   }
161  
162  
# Line 295 | Line 292 | rsample()                      /* sample the image */
292          ysiz = (((pframe.u-pframe.d)<<pdepth)+vresolu-1) / vresolu;
293          rl = (RECT *)malloc(xsiz*sizeof(RECT));
294          if (rl == NULL)
295 <                memerror("in rsample");
295 >                return;
296          pl = (PNODE **)malloc(xsiz*sizeof(PNODE *));
297          if (pl == NULL)
298 <                memerror("in rsample");
298 >                return;
299          /*
300           * Initialize the bottom row.
301           */
# Line 385 | Line 382 | int  pd;
382          if (p->kid == NULL) {                   /* subdivide */
383  
384                  if ((p->kid = newptree()) == NULL)
385 <                        memerror("in refine");
385 >                        return(growth);
386                  /*
387                   *  The following paint order can leave a black pixel
388                   *  when redraw() is called in (*dev->paintr)().

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines