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

Comparing ray/src/rt/preload.c (file contents):
Revision 2.11 by greg, Fri Feb 18 02:41:55 2011 UTC vs.
Revision 2.20 by greg, Fri Jun 20 23:48:28 2025 UTC

# Line 19 | Line 19 | static const char      RCSid[] = "$Id$";
19   #include "func.h"
20   #include "bsdf.h"
21  
22 + char    *shm_boundary = NULL;           /* boundary of shared memory */
23  
24 +
25   /* KEEP THIS ROUTINE CONSISTENT WITH THE DIFFERENT OBJECT FUNCTIONS! */
26  
27  
28 < extern int
28 > int
29   load_os(                        /* load associated data for object */
30 <        register OBJREC *op
30 >        OBJREC  *op
31   )
32   {
33 <        DATARRAY  *dp;
34 <        SDData  *sd;
33 >        DATARRAY        *dp;
34 >        SDData          *sd;
35  
36 +        SDretainSet = SDretainAll;
37 +
38          switch (op->otype) {
39          case OBJ_FACE:          /* polygon */
40                  getface(op);
# Line 55 | Line 59 | load_os(                       /* load associated data for object */
59                  getfunc(op, 4, 0x3<<5, 0);
60                  return(1);
61          case PAT_CDATA:         /* color data */
62 +                if (op->oargs.nsargs < 4)
63 +                        goto sargerr;
64                  dp = getdata(op->oargs.sarg[3]);
65                  getdata(op->oargs.sarg[4]);
66                  getdata(op->oargs.sarg[5]);
# Line 72 | Line 78 | load_os(                       /* load associated data for object */
78          case PAT_CFUNC:         /* color function */
79                  getfunc(op, 3, 0x7, 0);
80                  return(1);
81 +        case PAT_SPECFUNC:      /* spectral function */
82 +                getfunc(op, 1, 0, 0);
83 +                return(1);
84 +        case PAT_SPECFILE:      /* spectrum file */
85 +                if (op->oargs.nsargs < 1)
86 +                        goto sargerr;
87 +                getdata(op->oargs.sarg[0]);
88 +                return(1);
89 +        case PAT_SPECDATA:      /* spectral data file */
90 +                if (op->oargs.nsargs < 2)
91 +                        goto sargerr;
92 +                dp = getdata(op->oargs.sarg[1]);
93 +                getfunc(op, 2, ((1<<(dp->nd-1)) - 1)<<3, 0);
94 +                return(1);
95 +        case PAT_SPECPICT:      /* spectral picture */
96 +                if (op->oargs.nsargs < 2)
97 +                        goto sargerr;
98 +                getspec(op->oargs.sarg[1]);
99 +                getfunc(op, 2, 0x3<<3, 0);
100 +                return(1);
101          case TEX_DATA:          /* texture data */
102                  if (op->oargs.nsargs < 6)
103                          goto sargerr;
# Line 98 | Line 124 | load_os(                       /* load associated data for object */
124          case MAT_METAL2:        /* anisotropic metal */
125                  getfunc(op, 3, 0x7, 1);
126                  return(1);
127 +        case MAT_WGMDF:         /* WGMDfunc material */
128 +                getfunc(op, 12, 0xEEE, 1);
129 +                return(1);
130          case MAT_BRTDF:         /* BRDTfunc material */
131                  getfunc(op, 9, 0x3f, 0);
132                  return(1);
# Line 105 | Line 134 | load_os(                       /* load associated data for object */
134                  if (op->oargs.nsargs < 6)
135                          goto sargerr;
136                  getfunc(op, 5, 0x1d, 1);
137 <                loadBSDF(op->oargs.sarg[1]);
137 >                sd = loadBSDF(op->oargs.sarg[1]);
138 >                if (sd != NULL) SDfreeCache(sd);
139                  return(1);
140 +        case MAT_ABSDF:         /* aBSDF material */
141 +                if (op->oargs.nsargs < 5)
142 +                        goto sargerr;
143 +                getfunc(op, 4, 0xe, 1);
144 +                sd = loadBSDF(op->oargs.sarg[0]);
145 +                if (sd != NULL) SDfreeCache(sd);
146 +                return(1);
147          case MAT_PDATA:         /* plastic BRDF data */
148          case MAT_MDATA:         /* metal BRDF data */
149          case MAT_TDATA:         /* trans BRDF data */
# Line 135 | Line 172 | sargerr:
172   }
173  
174  
175 < extern void
175 > void
176   preload_objs(void)              /* preload object data structures */
177   {
178 <        register OBJECT on;
178 >        OBJECT on;
179                                  /* note that nobjects may change during loop */
180          for (on = 0; on < nobjects; on++)
181                  load_os(objptr(on));
182 + }
183 +
184 +
185 + void
186 + cow_memshare(void)              /* set up copy-on-write memory sharing */
187 + {
188 +        if (shm_boundary != NULL)
189 +                return;                 /* assume we're good */
190 +
191 +        preload_objs();                 /* preload auxiliary data */
192 +                                        /* set shared memory boundary */
193 +        shm_boundary = (char *)malloc(16);
194 +        strcpy(shm_boundary, "SHM_BOUNDARY");
195 + }
196 +
197 +
198 + void
199 + cow_doneshare(void)             /* clear memory sharing boundary */
200 + {
201 +        if (shm_boundary == NULL)
202 +                return;
203 +                                        /* clear shared memory boundary */
204 +        free((void *)shm_boundary);
205 +        shm_boundary = NULL;
206   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines