ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/hd/holo.h
Revision: 3.17
Committed: Mon Nov 9 17:10:53 1998 UTC (25 years, 5 months ago) by gwlarson
Content type: text/plain
Branch: MAIN
Changes since 3.16: +8 -1 lines
Log Message:
changed section directory code to write in segments

File Contents

# User Rev Content
1 gwlarson 3.15 /* Copyright (c) 1998 Silicon Graphics, Inc. */
2 gregl 3.1
3     /* SCCSid "$SunId$ SGI" */
4    
5     /*
6     * Header file for holodeck programs
7     *
8     * 9/29/97 GWLarson
9     */
10    
11     #include "standard.h"
12     #include "color.h"
13    
14     #ifndef HDMAX
15     #define HDMAX 128 /* maximum active holodeck sections */
16     #endif
17    
18 gwlarson 3.17 #ifndef MAXDIRSE
19     #define MAXDIRSE 32 /* maximum seeks per directory write */
20     #endif
21    
22 gregl 3.1 #define DCINF (unsigned)((1L<<16)-1) /* special value for infinity */
23     #define DCLIN (unsigned)(1L<<11) /* linear depth limit */
24    
25     typedef struct {
26     BYTE r[2][2]; /* ray direction index */
27 gwlarson 3.15 COLR v; /* color value */
28     unsigned int2 d; /* depth code (from entry wall) */
29     } RAYVAL; /* ray value */
30 gregl 3.1
31     /*
32     * Walls are ordered: X0 X1 X2 WN
33     * 0 ? ? 0
34     * 1 ? ? 1
35     * ? 0 ? 2
36     * ? 1 ? 3
37     * ? ? 0 4
38     * ? ? 1 5
39     *
40     * Grid on wall WN corresponds to X(WN/2+1)%3 and X(WN/2+2)%3, resp.
41     */
42    
43     typedef struct {
44     short w; /* wall number */
45     short i[2]; /* index on wall grid */
46 gregl 3.2 } GCOORD; /* grid coordinates (two for beam) */
47 gregl 3.1
48     typedef struct {
49     unsigned int4 nrd; /* number of beam rays bundled on disk */
50     long fo; /* position in file */
51     } BEAMI; /* beam index */
52    
53     typedef struct {
54     unsigned int4 nrm; /* number of beam rays bundled in memory */
55     unsigned long tick; /* clock tick for LRU replacement */
56     } BEAM; /* followed by nrm RAYVAL's */
57    
58 gregl 3.3 #define hdbray(bp) ((RAYVAL *)((bp)+1))
59 gregl 3.1 #define hdbsiz(nr) (sizeof(BEAM)+(nr)*sizeof(RAYVAL))
60    
61     typedef struct {
62     FVECT orig; /* prism origin (first) */
63     FVECT xv[3]; /* side vectors (second) */
64     int2 grid[3]; /* grid resolution (third) */
65     } HDGRID; /* holodeck section grid (must match HOLO struct) */
66    
67     typedef struct holo {
68     FVECT orig; /* prism origin (first) */
69     FVECT xv[3]; /* side vectors (second) */
70     int2 grid[3]; /* grid resolution (third) */
71     int fd; /* file descriptor */
72 gwlarson 3.17 struct {
73     int s, n; /* dirty section start, length */
74     } dirseg[MAXDIRSE+1]; /* dirty beam index segments */
75     short dirty; /* number of dirty segments */
76 gregl 3.1 double tlin; /* linear range for depth encoding */
77 gregl 3.13 FVECT wg[3]; /* wall grid vectors (derived) */
78     double wo[6]; /* wall grid offsets (derived) */
79 gregl 3.1 int wi[6]; /* wall super-indices (derived) */
80     char *priv; /* pointer to private client data */
81     BEAM **bl; /* beam pointers (memory cache) */
82     BEAMI bi[1]; /* beam index (extends struct) */
83     } HOLO; /* holodeck section */
84    
85 gregl 3.9 typedef struct {
86     HOLO *h; /* pointer to holodeck */
87     int b; /* beam index */
88     } HDBEAMI; /* holodeck beam index */
89    
90 gregl 3.14 #define nbeams(hp) (((hp)->wi[5]-1)<<1)
91 gregl 3.1 #define biglob(hp) ((hp)->bi)
92     #define blglob(hp) (*(hp)->bl)
93    
94     #define bnrays(hp,i) ((hp)->bl[i]!=NULL ? (hp)->bl[i]->nrm : (hp)->bi[i].nrd)
95    
96 gwlarson 3.16 #define hdflush(hp) (hdfreebeam(hp,0), hdsync(hp,0))
97     #define hdclobber(hp) (hdkillbeam(hp,0), hdsync(hp,0))
98 gregl 3.1
99 gregl 3.4 extern HOLO *hdinit(), *hdalloc();
100 gregl 3.1 extern BEAM *hdgetbeam();
101     extern RAYVAL *hdnewrays();
102 gregl 3.9 extern unsigned hdmemuse();
103 gregl 3.12 extern long hdfiluse(), hdfilen(), hdallocfrag();
104 gregl 3.1 extern double hdray(), hdinter();
105     extern unsigned hdcode();
106 gregl 3.14 extern int hdfilord();
107 gregl 3.1
108 gregl 3.9 extern unsigned hdcachesize; /* target cache size (bytes) */
109 gregl 3.1 extern unsigned long hdclock; /* holodeck system clock */
110     extern HOLO *hdlist[HDMAX+1]; /* holodeck pointers (NULL term.) */
111    
112     extern float hd_depthmap[]; /* depth conversion map */
113 gregl 3.13
114     extern int hdwg0[6]; /* wall grid 0 index */
115     extern int hdwg1[6]; /* wall grid 1 index */
116 gregl 3.1
117     #define hddepth(hp,dc) ( (dc) >= DCINF ? FHUGE : \
118     (hp)->tlin * ( (dc) >= DCLIN ? \
119     hd_depthmap[(dc)-DCLIN] : \
120     ((dc)+.5)/DCLIN ) )
121    
122     #define HOLOFMT "Holodeck" /* file format identifier */
123     #define HOLOVERS 0 /* file format version number */
124 gregl 3.11 #define HOLOMAGIC (323+sizeof(long)+8*HOLOVERS) /* file magic number */
125 gregl 3.1
126     /*
127     * A holodeck file consists of an information header terminated by a
128     * blank line, with "FORMAT=Holodeck" somewhere in it.
129     * The first integer after the information header is the
130     * above magic number, which includes the file format version number.
131 gregl 3.6 * The first longword after the magic number is a pointer to the pointer
132     * just before the SECOND holodeck section, or 0 if there is only one.
133 gregl 3.1 * This longword is immediately followed by the first holodeck
134     * section header and directory.
135     * Similarly, every holodeck section in the file is preceeded by
136     * a pointer to the following section, or 0 for the final section.
137     * Since holodeck files consist of directly written C data structures,
138     * they are not generally portable between different machine architectures.
139     * In particular, different floating point formats or bit/byte ordering
140     * will make the data unusable. This is unfortunate, and may be changed
141     * in future versions, but we thought this would be best for paging speed
142     * in our initial implementation.
143     */