ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/preload.c
Revision: 2.13
Committed: Fri Nov 8 17:11:42 2013 UTC (10 years, 5 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad4R2P2, rad5R0, rad4R2, rad4R2P1
Changes since 2.12: +5 -5 lines
Log Message:
Minor changes not affecting operation

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: preload.c,v 2.12 2011/08/16 18:09:53 greg Exp $";
3 #endif
4 /*
5 * Preload associated object structures to maximize memory sharing.
6 *
7 * External symbols declared in ray.h
8 */
9
10 #include "copyright.h"
11
12 #include "ray.h"
13 #include "otypes.h"
14 #include "face.h"
15 #include "cone.h"
16 #include "instance.h"
17 #include "mesh.h"
18 #include "data.h"
19 #include "func.h"
20 #include "bsdf.h"
21
22
23 /* KEEP THIS ROUTINE CONSISTENT WITH THE DIFFERENT OBJECT FUNCTIONS! */
24
25
26 int
27 load_os( /* load associated data for object */
28 OBJREC *op
29 )
30 {
31 DATARRAY *dp;
32
33 switch (op->otype) {
34 case OBJ_FACE: /* polygon */
35 getface(op);
36 return(1);
37 case OBJ_CONE: /* cone */
38 case OBJ_RING: /* disk */
39 case OBJ_CYLINDER: /* cylinder */
40 case OBJ_CUP: /* inverted cone */
41 case OBJ_TUBE: /* inverted cylinder */
42 getcone(op, 1);
43 return(1);
44 case OBJ_INSTANCE: /* octree instance */
45 getinstance(op, IO_ALL);
46 return(1);
47 case OBJ_MESH: /* mesh instance */
48 getmeshinst(op, IO_ALL);
49 return(1);
50 case PAT_CPICT: /* color picture */
51 if (op->oargs.nsargs < 4)
52 goto sargerr;
53 getpict(op->oargs.sarg[3]);
54 getfunc(op, 4, 0x3<<5, 0);
55 return(1);
56 case PAT_CDATA: /* color data */
57 dp = getdata(op->oargs.sarg[3]);
58 getdata(op->oargs.sarg[4]);
59 getdata(op->oargs.sarg[5]);
60 getfunc(op, 6, ((1<<dp->nd)-1)<<7, 0);
61 return(1);
62 case PAT_BDATA: /* brightness data */
63 if (op->oargs.nsargs < 2)
64 goto sargerr;
65 dp = getdata(op->oargs.sarg[1]);
66 getfunc(op, 2, ((1<<dp->nd)-1)<<3, 0);
67 return(1);
68 case PAT_BFUNC: /* brightness function */
69 getfunc(op, 1, 0x1, 0);
70 return(1);
71 case PAT_CFUNC: /* color function */
72 getfunc(op, 3, 0x7, 0);
73 return(1);
74 case TEX_DATA: /* texture data */
75 if (op->oargs.nsargs < 6)
76 goto sargerr;
77 dp = getdata(op->oargs.sarg[3]);
78 getdata(op->oargs.sarg[4]);
79 getdata(op->oargs.sarg[5]);
80 getfunc(op, 6, ((1<<dp->nd)-1)<<7, 1);
81 return(1);
82 case TEX_FUNC: /* texture function */
83 getfunc(op, 3, 0x7, 1);
84 return(1);
85 case MIX_DATA: /* mixture data */
86 dp = getdata(op->oargs.sarg[3]);
87 getfunc(op, 4, ((1<<dp->nd)-1)<<5, 0);
88 return(1);
89 case MIX_PICT: /* mixture picture */
90 getpict(op->oargs.sarg[3]);
91 getfunc(op, 4, 0x3<<5, 0);
92 return(1);
93 case MIX_FUNC: /* mixture function */
94 getfunc(op, 3, 0x4, 0);
95 return(1);
96 case MAT_PLASTIC2: /* anisotropic plastic */
97 case MAT_METAL2: /* anisotropic metal */
98 getfunc(op, 3, 0x7, 1);
99 return(1);
100 case MAT_BRTDF: /* BRDTfunc material */
101 getfunc(op, 9, 0x3f, 0);
102 return(1);
103 case MAT_BSDF: /* BSDF material */
104 if (op->oargs.nsargs < 6)
105 goto sargerr;
106 getfunc(op, 5, 0x1d, 1);
107 loadBSDF(op->oargs.sarg[1]);
108 return(1);
109 case MAT_PDATA: /* plastic BRDF data */
110 case MAT_MDATA: /* metal BRDF data */
111 case MAT_TDATA: /* trans BRDF data */
112 if (op->oargs.nsargs < 2)
113 goto sargerr;
114 getdata(op->oargs.sarg[1]);
115 getfunc(op, 2, 0, 0);
116 return(1);
117 case MAT_PFUNC: /* plastic BRDF func */
118 case MAT_MFUNC: /* metal BRDF func */
119 case MAT_TFUNC: /* trans BRDF func */
120 getfunc(op, 1, 0, 0);
121 return(1);
122 case MAT_DIRECT1: /* prism1 material */
123 getfunc(op, 4, 0xf, 1);
124 return(1);
125 case MAT_DIRECT2: /* prism2 material */
126 getfunc(op, 8, 0xff, 1);
127 return(1);
128 }
129 /* nothing to load for the remaining types */
130 return(0);
131 sargerr:
132 objerror(op, USER, "too few string arguments");
133 return 0; /* pro forma return */
134 }
135
136
137 void
138 preload_objs(void) /* preload object data structures */
139 {
140 OBJECT on;
141 /* note that nobjects may change during loop */
142 for (on = 0; on < nobjects; on++)
143 load_os(objptr(on));
144 }