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.9 by gregl, Thu Dec 18 14:45:59 1997 UTC vs.
Revision 3.23 by schorsch, Mon Jul 14 22:24:00 2003 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1997 Silicon Graphics, Inc. */
2 <
3 < /* SCCSid "$SunId$ SGI" */
4 <
1 > /* RCSid: $Id$ */
2   /*
3   * Header file for holodeck programs
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
20 < #ifndef int2
21 < #define int2    short
20 >
21 > #ifndef MAXDIRSE
22 > #define MAXDIRSE        32      /* maximum seeks per directory write */
23   #endif
20 #ifndef int4
21 #define int4    long
22 #endif
24  
25   #define DCINF   (unsigned)((1L<<16)-1)  /* special value for infinity */
26   #define DCLIN   (unsigned)(1L<<11)      /* linear depth limit */
27  
28   typedef struct {
29          BYTE    r[2][2];        /* ray direction index */
30 <        COLR    v;              /* value */
31 <        unsigned int2   d;      /* depth code */
32 < } RAYVAL;               /* ray value (from second wall) */
30 >        COLR    v;              /* color value */
31 >        uint16  d;              /* depth code (from entry wall) */
32 > } RAYVAL;               /* ray value */
33  
34   /*
35   * Walls are ordered:           X0      X1      X2      WN
# Line 48 | 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 */
53 <        long    fo;             /* position in file */
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 */
57 >        uint32  nrm;            /* number of beam rays bundled in memory */
58          unsigned long   tick;   /* clock tick for LRU replacement */
59   } BEAM;                 /* followed by nrm RAYVAL's */
60  
# Line 63 | 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 <        short   dirty;          /* beam index needs update to file */
75 >        struct {
76 >                int     s, n;           /* dirty section start, length */
77 >        } dirseg[MAXDIRSE+1];   /* dirty beam index segments */
78 >        short   dirty;          /* number of dirty segments */
79          double  tlin;           /* linear range for depth encoding */
80 <        FVECT   wn[3];          /* wall normals (derived) */
77 <        double  wg[3];          /* wall grid multipliers (derived) */
78 <        double  wo[6];          /* wall offsets (derived) */
80 >        FVECT   wg[3];          /* wall grid vectors (derived) */
81          int     wi[6];          /* wall super-indices (derived) */
82          char    *priv;          /* pointer to private client data */
83          BEAM    **bl;           /* beam pointers (memory cache) */
# Line 87 | Line 89 | typedef struct {
89          int     b;              /* beam index */
90   } HDBEAMI;              /* holodeck beam index */
91  
92 < #define nbeams(hp)      (2*((hp)->wi[5]-1))
92 > #define nbeams(hp)      (((hp)->wi[5]-1)<<1)
93   #define biglob(hp)      ((hp)->bi)
94   #define blglob(hp)      (*(hp)->bl)
95  
96   #define bnrays(hp,i)    ((hp)->bl[i]!=NULL ? (hp)->bl[i]->nrm : (hp)->bi[i].nrd)
97  
98 < #define hdflush(hp)     (hdfreebeam(hp,0) && hdsync(hp,0))
99 < #define hdclobber(hp)   (hdkillbeam(hp,0) && hdsync(hp,0))
98 > #define hdflush(hp)     (hdfreebeam(hp,0), hdsync(hp,0))
99 > #define hdclobber(hp)   (hdkillbeam(hp,0), hdsync(hp,0))
100  
101   extern HOLO     *hdinit(), *hdalloc();
102   extern BEAM     *hdgetbeam();
103   extern RAYVAL   *hdnewrays();
104   extern unsigned hdmemuse();
105 < extern long     hdfiluse(), hdfilen();
105 > extern off_t    hdfiluse(), hdfilen(), hdallocfrag();
106   extern double   hdray(), hdinter();
107   extern unsigned hdcode();
108 + extern int      hdfilord();
109  
110 + #define FF_NEVER        0               /* never free fragments */
111 + #define FF_WRITE        01              /* free fragment on write */
112 + #define FF_ALLOC        02              /* free fragment on ray alloc */
113 + #define FF_READ         04              /* free fragment on read */
114 + #define FF_KILL         010             /* free fragment on beam kill */
115 +
116 + extern int      hdfragflags;            /* tells when to free fragments */
117   extern unsigned hdcachesize;            /* target cache size (bytes) */
118   extern unsigned long    hdclock;        /* holodeck system clock */
119   extern HOLO     *hdlist[HDMAX+1];       /* holodeck pointers (NULL term.) */
120  
121   extern float    hd_depthmap[];          /* depth conversion map */
122  
123 + extern int      hdwg0[6];               /* wall grid 0 index */
124 + extern int      hdwg1[6];               /* wall grid 1 index */
125 +
126   #define hddepth(hp,dc)  ( (dc) >= DCINF ? FHUGE : \
127                                  (hp)->tlin * ( (dc) >= DCLIN ? \
128                                          hd_depthmap[(dc)-DCLIN] : \
# Line 117 | Line 130 | extern float   hd_depthmap[];          /* depth conversion map *
130  
131   #define HOLOFMT         "Holodeck"      /* file format identifier */
132   #define HOLOVERS        0               /* file format version number */
133 < #define HOLOMAGIC       (327+HOLOVERS)  /* file magic number */
133 > #define HOLOMAGIC       (323+sizeof(off_t)+8*HOLOVERS)  /* file magic number */
134  
135   /*
136   * A holodeck file consists of an information header terminated by a
# Line 137 | Line 150 | extern float   hd_depthmap[];          /* depth conversion map *
150   * in future versions, but we thought this would be best for paging speed
151   * in our initial implementation.
152   */
153 +
154 +
155 + #ifdef __cplusplus
156 + }
157 + #endif
158 + #endif /* _RAD_HOLO_H_ */
159 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines