ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/hd/holo.h
(Generate patch)

Comparing ray/src/hd/holo.h (file contents):
Revision 3.21 by greg, Thu May 29 16:26:21 2003 UTC vs.
Revision 3.30 by greg, Wed Nov 16 00:12:49 2022 UTC

# Line 4 | Line 4
4   *
5   *      9/29/97 GWLarson
6   */
7 + #ifndef _RAD_HOLO_H_
8 + #define _RAD_HOLO_H_
9  
10   #include "standard.h"
11   #include "color.h"
12  
13 + #ifdef __cplusplus
14 + extern "C" {
15 + #endif
16 +
17   #ifndef HDMAX
18   #define HDMAX           128     /* maximum active holodeck sections */
19   #endif
# Line 20 | Line 26
26   #define DCLIN   (unsigned)(1L<<11)      /* linear depth limit */
27  
28   typedef struct {
29 <        BYTE    r[2][2];        /* ray direction index */
29 >        uby8    r[2][2];        /* ray direction index */
30          COLR    v;              /* color value */
31 <        unsigned int2   d;      /* depth code (from entry wall) */
31 >        uint16  d;              /* depth code (from entry wall) */
32   } RAYVAL;               /* ray value */
33  
34   /*
# Line 43 | Line 49 | typedef struct {
49   } GCOORD;               /* grid coordinates (two for beam) */
50  
51   typedef struct {
52 <        unsigned int4   nrd;    /* number of beam rays bundled on disk */
52 >        uint32  nrd;            /* number of beam rays bundled on disk */
53          off_t   fo;             /* position in file */
54   } BEAMI;                /* beam index */
55  
56   typedef struct {
57 <        unsigned int4   nrm;    /* number of beam rays bundled in memory */
58 <        unsigned long   tick;   /* clock tick for LRU replacement */
57 >        uint32  nrm;            /* number of beam rays bundled in memory */
58 >        uint32  tick;           /* clock tick for LRU replacement */
59   } BEAM;                 /* followed by nrm RAYVAL's */
60  
61   #define hdbray(bp)      ((RAYVAL *)((bp)+1))
# Line 58 | Line 64 | typedef struct {
64   typedef struct {
65          FVECT   orig;           /* prism origin (first) */
66          FVECT   xv[3];          /* side vectors (second) */
67 <        int2    grid[3];        /* grid resolution (third) */
67 >        int16   grid[3];        /* grid resolution (third) */
68   } HDGRID;               /* holodeck section grid (must match HOLO struct) */
69  
70   typedef struct holo {
71          FVECT   orig;           /* prism origin (first) */
72          FVECT   xv[3];          /* side vectors (second) */
73 <        int2    grid[3];        /* grid resolution (third) */
73 >        int16   grid[3];        /* grid resolution (third) */
74          int     fd;             /* file descriptor */
75          struct {
76                  int     s, n;           /* dirty section start, length */
# Line 73 | Line 79 | typedef struct holo {
79          double  tlin;           /* linear range for depth encoding */
80          FVECT   wg[3];          /* wall grid vectors (derived) */
81          int     wi[6];          /* wall super-indices (derived) */
82 <        char    *priv;          /* pointer to private client data */
82 >        void    *priv;          /* pointer to private client data */
83          BEAM    **bl;           /* beam pointers (memory cache) */
84          BEAMI   bi[1];          /* beam index (extends struct) */
85   } HOLO;                 /* holodeck section */
# Line 92 | Line 98 | typedef struct {
98   #define hdflush(hp)     (hdfreebeam(hp,0), hdsync(hp,0))
99   #define hdclobber(hp)   (hdkillbeam(hp,0), hdsync(hp,0))
100  
95 extern HOLO     *hdinit(), *hdalloc();
96 extern BEAM     *hdgetbeam();
97 extern RAYVAL   *hdnewrays();
98 extern unsigned hdmemuse();
99 extern off_t    hdfiluse(), hdfilen(), hdallocfrag();
100 extern double   hdray(), hdinter();
101 extern unsigned hdcode();
102 extern int      hdfilord();
103
101   #define FF_NEVER        0               /* never free fragments */
102   #define FF_WRITE        01              /* free fragment on write */
103   #define FF_ALLOC        02              /* free fragment on ray alloc */
# Line 124 | Line 121 | extern int     hdwg1[6];               /* wall grid 1 index */
121  
122   #define HOLOFMT         "Holodeck"      /* file format identifier */
123   #define HOLOVERS        0               /* file format version number */
124 < #define HOLOMAGIC       (323+sizeof(off_t)+8*HOLOVERS)  /* file magic number */
124 > #define HOLOMAGIC       (324+sizeof(BEAMI)+16*HOLOVERS) /* file magic number */
125  
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 < * 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.
131 > * The first longword (off_t) after the magic number is a pointer to the
132 > * pointer just before the SECOND holodeck section, or 0 if there is only one.
133   * 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
# Line 144 | Line 141 | extern int     hdwg1[6];               /* wall grid 1 index */
141   * in future versions, but we thought this would be best for paging speed
142   * in our initial implementation.
143   */
144 +
145 +        /* clumpbeams.c */
146 + extern void clumpbeams(HOLO *hp, int maxcnt, int maxsiz,
147 +                        int (*cf)(HOLO *hp, int *bqueue, int bqlen));
148 +        /* holo.c */
149 + extern void hdcompgrid(HOLO *hp);
150 + extern int hdbcoord(GCOORD gc[2], HOLO *hp, int i);
151 + extern int hdbindex(HOLO *hp, GCOORD gc[2]);
152 + extern void hdcell(FVECT cp[4], HOLO *hp, GCOORD *gc);
153 + extern int hdlseg(int   lseg[2][3], HOLO        *hp, GCOORD     gc[2]);
154 + extern unsigned int hdcode(HOLO *hp, double d);
155 + extern void hdgrid( FVECT gp, HOLO *hp, FVECT wp);
156 + extern void hdworld(FVECT wp, HOLO *hp, FVECT gp);
157 + extern double hdray(FVECT ro, FVECT rd, HOLO *hp, GCOORD gc[2], uby8 r[2][2]);
158 + extern double hdinter(GCOORD gc[2], uby8 r[2][2], double *ed, HOLO *hp,
159 +                        FVECT ro, FVECT rd);
160 +        /* holofile.c */
161 + extern HOLO * hdinit(int fd, HDGRID *hproto);
162 + extern void hddone(HOLO *hp);
163 + extern int hdsync(HOLO *hp, int all);
164 + extern off_t hdfilen(int fd);
165 + extern off_t hdfiluse(int fd);
166 + extern RAYVAL * hdnewrays(HOLO *hp, int i, int nr);
167 + extern BEAM * hdgetbeam(HOLO *hp, int i);
168 + extern void hdloadbeams(HDBEAMI *hb, int n, void (*bf)(BEAM *bp, HDBEAMI *hb));
169 + extern int hdfreebeam(HOLO *hp, int i);
170 + extern int hdfreefrag(HOLO *hp, int i);
171 + extern int hdfragOK(int fd, int *listlen, int32 *listsiz);
172 + extern int hdkillbeam(HOLO *hp, int i);
173 +
174 +
175 + #ifdef __cplusplus
176 + }
177 + #endif
178 + #endif /* _RAD_HOLO_H_ */
179 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines