ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/freeobjmem.c
Revision: 2.8
Committed: Fri Feb 18 00:40:25 2011 UTC (13 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad4R1
Changes since 2.7: +3 -1 lines
Log Message:
Major code reorg, moving mgflib to common and introducing BSDF material

File Contents

# User Rev Content
1 greg 2.1 #ifndef lint
2 greg 2.8 static const char RCSid[] = "$Id: freeobjmem.c,v 2.7 2004/03/30 16:13:01 schorsch Exp $";
3 greg 2.1 #endif
4     /*
5     * Free memory associated with object(s)
6 greg 2.4 *
7     * External symbols declared in ray.h
8 greg 2.1 */
9    
10 greg 2.5 #include "copyright.h"
11 greg 2.4
12     #include "ray.h"
13 greg 2.1 #include "otypes.h"
14 schorsch 2.7 #include "rtotypes.h"
15 greg 2.8 #include "bsdf.h"
16 greg 2.4 #include "face.h"
17     #include "cone.h"
18     #include "instance.h"
19     #include "data.h"
20     #include "font.h"
21 schorsch 2.7 #include "func.h"
22     #include "mesh.h"
23 greg 2.1
24    
25 schorsch 2.7 extern int
26     free_os( /* free unneeded memory for object */
27     register OBJREC *op
28     )
29 greg 2.1 {
30     if (op->os == NULL)
31     return(0);
32     if (hasfunc(op->otype)) {
33     freefunc(op);
34     return(1);
35     }
36     switch (op->otype) {
37     case OBJ_FACE: /* polygon */
38     freeface(op);
39     return(1);
40     case OBJ_CONE: /* cone */
41     case OBJ_RING: /* disk */
42     case OBJ_CYLINDER: /* cylinder */
43     case OBJ_CUP: /* inverted cone */
44     case OBJ_TUBE: /* inverted cylinder */
45     freecone(op);
46     return(1);
47     case OBJ_INSTANCE: /* octree instance */
48     freeinstance(op);
49 greg 2.6 return(1);
50     case OBJ_MESH: /* mesh instance */
51     freemeshinst(op);
52 greg 2.1 return(1);
53     case PAT_BTEXT: /* monochromatic text */
54     case PAT_CTEXT: /* colored text */
55     case MIX_TEXT: /* mixing text */
56     freetext(op);
57     return(1);
58     case MAT_CLIP: /* clipping surface */
59 greg 2.4 case MAT_SPOT: /* spot light source */
60     free((void *)op->os);
61 greg 2.1 op->os = NULL;
62     return(1);
63 greg 2.4 }
64 greg 2.1 #ifdef DEBUG
65 greg 2.4 objerror(op, WARNING, "cannot free structure");
66 greg 2.1 #endif
67 greg 2.4 return(0);
68 greg 2.1 }
69    
70    
71 schorsch 2.7 extern int
72     free_objs( /* free some object structures */
73     register OBJECT on,
74     OBJECT no
75     )
76 greg 2.1 {
77     int nfreed;
78     register OBJREC *op;
79    
80     for (nfreed = 0; no-- > 0; on++) {
81     op = objptr(on);
82 greg 2.2 if (op->os != NULL)
83 greg 2.1 nfreed += free_os(op);
84     }
85     return(nfreed);
86     }
87    
88    
89 schorsch 2.7 extern void
90     free_objmem(void) /* free all object cache memory */
91 greg 2.1 {
92 greg 2.2 free_objs(0, nobjects);
93 greg 2.1 freedata(NULL);
94     freefont(NULL);
95 greg 2.8 SDfreeCache(NULL);
96 greg 2.1 }