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.13 by greg, Fri May 3 15:43:32 1991 UTC vs.
Revision 1.14 by greg, Fri May 3 16:12:34 1991 UTC

# Line 18 | Line 18 | static char SCCSid[] = "$SunId$ LBL";
18  
19   #include  <signal.h>
20  
21 #include  <setjmp.h>
22
21   #include  <ctype.h>
22  
23   VIEW  ourview = STDVIEW;                /* viewing parameters */
# Line 57 | Line 55 | PNODE  ptrunk;                         /* the base of our image */
55   RECT  pframe;                           /* current frame boundaries */
56   int  pdepth;                            /* image depth in current frame */
57  
60 static jmp_buf  mainloop;               /* longjmp back to main loop */
58   static char  *reserve_mem = NULL;       /* pre-allocated reserve memory */
59  
60   #define RESERVE_AMT     8192            /* amount of memory to reserve */
# Line 119 | Line 116 | rview()                                /* do a view */
116          char  buf[32];
117  
118          devopen(devname);               /* open device */
119 <        newimage();                     /* set up image */
120 <        setjmp(mainloop);
119 >        newimage();                     /* start image (calls fillreserves) */
120 >
121          for ( ; ; ) {                   /* quit in command() */
122 <                while (hresolu <= 1<<pdepth &&
126 <                                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 136 | 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 */
156 < char    *detail;
154 > freereserves()                  /* free memory reserves */
155   {
156 <        if (reserve_mem == NULL) {
157 <                sprintf(errmsg, "out of memory %s", detail);
160 <                error(SYSTEM, errmsg);
161 <        }
156 >        if (reserve_mem == NULL)
157 >                return;
158          free(reserve_mem);
159          reserve_mem = NULL;
164        do
165                command("out of memory: ");
166        while (reserve_mem == NULL);
167        longjmp(mainloop, 1);
160   }
161  
162  
# Line 300 | 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 390 | 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