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

Comparing ray/src/cv/mgflib/context.c (file contents):
Revision 1.1 by greg, Tue Jun 21 14:45:43 1994 UTC vs.
Revision 1.4 by greg, Fri Jun 24 09:32:49 1994 UTC

# Line 9 | Line 9 | static char SCCSid[] = "$SunId$ LBL";
9   */
10  
11   #include <stdio.h>
12 + #include <math.h>
13   #include <string.h>
14   #include "parser.h"
15   #include "lookup.h"
# Line 28 | Line 29 | C_COLOR                *c_ccolor = &c_uncolor;
29   C_MATERIAL      *c_cmaterial = &c_unmaterial;
30   C_VERTEX        *c_cvertex = &c_unvertex;
31  
32 < static LUTAB    clr_tab;                /* color lookup table */
33 < static LUTAB    mat_tab;                /* material lookup table */
34 < static LUTAB    vtx_tab;                /* vertex lookup table */
32 > static LUTAB    clr_tab = LU_SINIT(free,free);  /* color lookup table */
33 > static LUTAB    mat_tab = LU_SINIT(free,free);  /* material lookup table */
34 > static LUTAB    vtx_tab = LU_SINIT(free,free);  /* vertex lookup table */
35  
36  
37   int
# Line 42 | Line 43 | register char  **av;
43  
44          switch (mg_entity(av[0])) {
45          case MG_E_COLOR:        /* get/set color context */
46 +                if (ac > 4)
47 +                        return(MG_EARGC);
48                  if (ac == 1) {          /* set unnamed color context */
49                          c_uncolor = c_dfcolor;
50                          c_ccolor = &c_uncolor;
# Line 106 | Line 109 | register char  **av;
109  
110          switch (mg_entity(av[0])) {
111          case MG_E_MATERIAL:     /* get/set material context */
112 +                if (ac > 4)
113 +                        return(MG_EARGC);
114                  if (ac == 1) {          /* set unnamed material context */
115                          c_unmaterial = c_dfmaterial;
116                          c_cmaterial = &c_unmaterial;
# Line 134 | Line 139 | register char  **av;
139                  c_cmaterial = (C_MATERIAL *)lp->data;
140                  if (ac == 3) {          /* use default template */
141                          *c_cmaterial = c_dfmaterial;
142 +                        c_cmaterial->name = lp->key;
143                          return(MG_OK);
144                  }
145                  lp = lu_find(&mat_tab, av[3]);  /* lookup template */
# Line 142 | Line 148 | register char  **av;
148                  if (lp->data == NULL)
149                          return(MG_EUNDEF);
150                  *c_cmaterial = *(C_MATERIAL *)lp->data;
151 +                c_cmaterial->name = lp->key;
152 +                c_cmaterial->clock = 1;
153                  if (ac > 4)
154                          return(MG_EARGC);
155                  return(MG_OK);
# Line 154 | Line 162 | register char  **av;
162                  if (c_cmaterial->rd < 0. | c_cmaterial->rd > 1.)
163                          return(MG_EILL);
164                  c_cmaterial->rd_c = *c_ccolor;
165 +                c_cmaterial->clock++;
166                  return(MG_OK);
167          case MG_E_ED:           /* set diffuse emittance */
168                  if (ac != 2)
# Line 164 | Line 173 | register char  **av;
173                  if (c_cmaterial->ed < 0.)
174                          return(MG_EILL);
175                  c_cmaterial->ed_c = *c_ccolor;
176 +                c_cmaterial->clock++;
177                  return(MG_OK);
178          case MG_E_TD:           /* set diffuse transmittance */
179                  if (ac != 2)
# Line 186 | Line 196 | register char  **av;
196                                  c_cmaterial->rs_a < 0.)
197                          return(MG_EILL);
198                  c_cmaterial->rs_c = *c_ccolor;
199 +                c_cmaterial->clock++;
200                  return(MG_OK);
201          case MG_E_TS:           /* set specular transmittance */
202                  if (ac != 3)
# Line 198 | Line 209 | register char  **av;
209                                  c_cmaterial->ts_a < 0.)
210                          return(MG_EILL);
211                  c_cmaterial->ts_c = *c_ccolor;
212 +                c_cmaterial->clock++;
213                  return(MG_OK);
214          }
215          return(MG_EUNK);
# Line 213 | Line 225 | register char  **av;
225  
226          switch (mg_entity(av[0])) {
227          case MG_E_VERTEX:       /* get/set vertex context */
228 +                if (ac > 4)
229 +                        return(MG_EARGC);
230                  if (ac == 1) {          /* set unnamed vertex context */
231                          c_unvertex = c_dfvertex;
232                          c_cvertex = &c_unvertex;
# Line 276 | Line 290 | register char  **av;
290   }
291  
292  
279 static void
280 freectx(lp)                     /* free a context table entry */
281 register LUENT  *lp;
282 {
283        free((MEM_PTR)lp->key);
284        free((MEM_PTR)lp->data);
285 }
286
287
293   void
294   c_clearall()                    /* empty context tables */
295   {
296          c_uncolor = c_dfcolor;
297          c_ccolor = &c_uncolor;
298 <        lu_done(&clr_tab, freectx);
298 >        lu_done(&clr_tab);
299          c_unmaterial = c_dfmaterial;
300          c_cmaterial = &c_unmaterial;
301 <        lu_done(&mat_tab, freectx);
301 >        lu_done(&mat_tab);
302          c_unvertex = c_dfvertex;
303          c_cvertex = &c_unvertex;
304 <        lu_done(&vtx_tab, freectx);
304 >        lu_done(&vtx_tab);
305   }
306  
307  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines