ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/object.h
Revision: 2.20
Committed: Sun Dec 8 18:59:53 2013 UTC (10 years, 4 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.19: +2 -1 lines
Log Message:
Improved rendering speed for scenes with redefined materials and aliases

File Contents

# User Rev Content
1 greg 2.20 /* RCSid $Id: object.h,v 2.19 2012/09/07 21:45:22 greg Exp $ */
2 greg 1.1 /*
3     * object.h - header file for routines using objects and object sets.
4 greg 2.14 *
5     * Include after "standard.h"
6 greg 2.8 */
7 schorsch 2.13 #ifndef _RAD_OBJECT_H_
8     #define _RAD_OBJECT_H_
9     #ifdef __cplusplus
10     extern "C" {
11     #endif
12 greg 1.1
13 greg 2.8 #ifndef OCTREE
14     #define OCTREE int
15     #endif
16    
17 greg 1.1 /*
18     * Object definitions require general specifications
19     * which may include a number of different argument types.
20     * The following structure aids in the storage of such
21     * argument lists.
22     */
23    
24     typedef struct {
25 greg 2.18 char **sarg; /* string arguments */
26     RREAL *farg; /* real arguments */
27 greg 1.1 short nsargs; /* # of string arguments */
28     short nfargs; /* # of real arguments */
29     #ifdef IARGS
30     short niargs; /* # of integer arguments */
31     long *iarg; /* integer arguments */
32     #endif
33     } FUNARGS;
34    
35 greg 2.19 #define MAXSTR 512 /* maximum string (word) length */
36 greg 1.1
37     /*
38     * An object is defined as an index into an array of
39     * structures containing the object type and specification
40     * and the modifier index.
41     */
42    
43 greg 1.4 #ifndef OBJECT
44 greg 2.12 #ifdef SMLMEM
45 greg 2.14 #define OBJECT int16 /* index to object array */
46 greg 2.12 #else
47 greg 2.14 #define OBJECT int32 /* index to object array */
48 greg 1.4 #endif
49     #endif
50 greg 1.1
51     typedef struct {
52     OBJECT omod; /* modifier number */
53     short otype; /* object type number */
54     char *oname; /* object name */
55     FUNARGS oargs; /* object specification */
56     char *os; /* object structure */
57     } OBJREC;
58    
59 greg 1.4 #ifndef MAXOBJBLK
60 greg 2.12 #ifdef SMLMEM
61     #define MAXOBJBLK 63 /* maximum number of object blocks */
62     #else
63 gwlarson 2.5 #define MAXOBJBLK 65535 /* maximum number of object blocks */
64 greg 1.4 #endif
65     #endif
66 greg 1.1
67     extern OBJREC *objblock[MAXOBJBLK]; /* the object blocks */
68 greg 1.2 extern OBJECT nobjects; /* # of objects */
69 greg 1.1
70 gwlarson 2.6 #define OBJBLKSHFT 9
71     #define OBJBLKSIZ (1<<OBJBLKSHFT) /* object block size */
72     #define objptr(obj) (objblock[(obj)>>OBJBLKSHFT]+((obj)&(OBJBLKSIZ-1)))
73 greg 1.1
74     #define OVOID (-1) /* void object */
75     #define VOIDID "void" /* void identifier */
76    
77     /*
78     * Object sets begin with the number of objects and proceed with
79     * the objects in ascending order.
80     */
81    
82 greg 2.11 #define MAXSET 511 /* maximum object set size */
83 greg 2.3
84 greg 2.8 #define setfree(os) free((void *)(os))
85    
86     extern void (*addobjnotify[])(); /* people to notify of new objects */
87 greg 2.3
88 greg 2.8 /* defined in modobject.c */
89 greg 2.10 extern OBJECT objndx(OBJREC *op);
90     extern OBJECT lastmod(OBJECT obj, char *mname);
91     extern OBJECT modifier(char *name);
92     extern OBJECT object(char *oname);
93 greg 2.20 extern int eqobjects(OBJECT obj1, OBJECT obj2);
94 greg 2.8 extern void insertobject(OBJECT obj);
95     extern void clearobjndx(void);
96     /* defined in objset.c */
97     extern void insertelem(OBJECT *os, OBJECT obj);
98     extern void deletelem(OBJECT *os, OBJECT obj);
99     extern int inset(OBJECT *os, OBJECT obj);
100     extern int setequal(OBJECT *os1, OBJECT *os2);
101     extern void setcopy(OBJECT *os1, OBJECT *os2);
102     extern OBJECT * setsave(OBJECT *os);
103     extern void setunion(OBJECT *osr, OBJECT *os1, OBJECT *os2);
104     extern void setintersect(OBJECT *osr, OBJECT *os1, OBJECT *os2);
105     extern OCTREE fullnode(OBJECT *oset);
106     extern void objset(OBJECT *oset, OCTREE ot);
107     extern int dosets(int (*f)());
108     extern void donesets(void);
109    
110     /* defined in otypes.c */
111     extern int otype(char *ofname);
112     extern void objerror(OBJREC *o, int etyp, char *msg);
113     /* defined in readfargs.c */
114     extern int readfargs(FUNARGS *fa, FILE *fp);
115     extern void freefargs(FUNARGS *fa);
116     /* defined in readobj.c */
117     extern void readobj(char *inpspec);
118     extern void getobject(char *name, FILE *fp);
119 schorsch 2.17 extern OBJECT newobject(void);
120 greg 2.8 extern void freeobjects(int firstobj, int nobjs);
121     /* defined in free_os.c */
122     extern int free_os(OBJREC *op);
123    
124 schorsch 2.13
125     #ifdef __cplusplus
126     }
127     #endif
128     #endif /* _RAD_OBJECT_H_ */
129