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

Comparing ray/src/rt/pmapdata.h (file contents):
Revision 2.10 by rschregle, Tue May 17 17:39:47 2016 UTC vs.
Revision 2.15 by greg, Tue Sep 17 16:36:05 2024 UTC

# Line 28 | Line 28
28   #ifndef PMAPDATA_H
29     #define PMAPDATA_H
30  
31 <   #include "ray.h"  
31 >   #ifndef NIX
32 >      #if defined(_WIN32) || defined(_WIN64)
33 >         #define NIX 0
34 >      #else
35 >         #define NIX 1
36 >      #endif
37 >   #endif
38 >
39 >   #if (defined(PMAP_OOC) && !NIX)
40 >      #error "OOC currently only supported on NIX -- tuff luck."
41 >   #endif
42 >
43 >   #ifdef PMAP_CBDM
44 >      /* Enable photon primary hitpoints and incident directions (see struct
45 >       * PhotonPrimary below).  Note this will increase the size of photon
46 >       * primaries 9-fold (10-fold after alignment)!!! */
47 >      #define  PMAP_PRIMARYPOS
48 >      #define  PMAP_PRIMARYDIR
49 >   #endif
50 >
51 >   #include "ray.h"
52     #include "pmaptype.h"
53 +   #include "paths.h"
54     #include "lookup.h"
55     #include <stdint.h>
56  
36
37  
57     /* Primary photon ray for light source contributions */
58     typedef struct {
59        int16    srcIdx;              /* Index of emitting light source */
60                                      /* !!! REDUCED FROM 32 BITS !!! */
61 + #ifdef PMAP_PRIMARYDIR
62        int32    dir;                 /* Encoded ray direction */
63 < #ifdef PMAP_PRIMARYPOS      
63 > #endif
64 > #ifdef PMAP_PRIMARYPOS
65        float    pos [3];             /* Hit point */
66 < #endif      
66 > #endif
67     } PhotonPrimary;
68        
69     #define photonSrcIdx(pm, p)      ((pm)->primaries[(p)->primary].srcIdx)
# Line 50 | Line 71
71  
72  
73     /* Photon primary ray index type and limit */
74 <   typedef  uint32            PhotonPrimaryIdx;      
74 >   typedef  uint32            PhotonPrimaryIdx;
75     #define  PMAP_MAXPRIMARY   UINT32_MAX
76  
77     /* Macros for photon's generating subprocess field */
78 < #ifdef PMAP_OOC        
78 > #ifdef PMAP_OOC
79     #define  PMAP_PROCBITS  7
80 < #else            
81 <   #define  PMAP_PROCBITS  5  
80 > #else
81 >   #define  PMAP_PROCBITS  5
82   #endif
83     #define  PMAP_MAXPROC         (1 << PMAP_PROCBITS)
84     #define  PMAP_GETRAYPROC(r)   ((r) -> crtype >> 8)
# Line 89 | Line 110
110        };
111        
112   #ifdef PMAP_FLOAT_FLUX
113 <      COLOR                flux;          
113 >      COLOR                flux;
114   #else
115 <      COLR                 flux;          
115 >      COLR                 flux;
116   #endif
117        PhotonPrimaryIdx     primary;       /* Index to primary ray */
118     } Photon;
119  
120 +   /* Define search queue and underlying data struct types */
121 + #ifdef PMAP_OOC
122 +   #include "pmapooc.h"
123 + #else
124 +   #include "pmapkdt.h"
125 + #endif
126  
127    
128     /* Define PMAP_FLOAT_FLUX to store photon flux as floats instead of
# Line 109 | Line 136
136     #define getPhotonFlux(p,f) colr_color(f, (p) -> flux)
137   #endif
138  
112
139    
140     /* Bias compensation history node */
141 <   typedef struct {                  
141 >   typedef struct {
142        COLOR irrad;
143        float weight;
144     } PhotonBiasCompNode;
# Line 120 | Line 146
146  
147     /* Forward declaration */
148     struct PhotonMap;
149 +
150 +
151 +   /* Mean size of heapfile write buffer, in number of photons */
152 +   #define PMAP_HEAPBUFSIZE   1e6
153    
154 +   /* Mean idle time between heap locking attempts, in usec */
155 +   #define PMAP_HEAPBUFSLEEP  2e6
156    
157 <   /* Define search queue and underlying data struct types */
158 < #ifdef PMAP_OOC
159 <   #include "pmapooc.h"
128 < #else
129 <   #include "pmapkdt.h"
130 < #endif
157 >   /* Temporary filename for photon heaps */
158 >   #define PMAP_TMPFNAME      TEMPLATE
159 >   #define PMAP_TMPFNLEN      (TEMPLEN + 1)
160  
161  
162     typedef struct PhotonMap {
# Line 140 | Line 169
169         * ================================================================ */
170        FILE           *heap;            /* Unsorted photon heap prior to
171                                            construction of store */
172 +      char           heapFname [sizeof(PMAP_TMPFNAME)];      
173        Photon         *heapBuf;         /* Write buffer for above */
174        unsigned long  heapBufLen,       /* Current & max size of heapBuf */
175                       heapBufSize;
176 <      PhotonStorage  store;            /* Photon storage in spacee
177 <                                          subdividing data struct */            
176 >      PhotonStorage  store;            /* Photon storage in space
177 >                                          subdividing data struct */
178        
179        /* ================================================================
180         * PHOTON DISTRIBUTION STUFF
# Line 181 | Line 211
211                      
212        /* ================================================================
213         * BIAS COMPENSATION STUFF
214 <       * ================================================================ */      
214 >       * ================================================================ */
215        PhotonBiasCompNode   *biasCompHist;    /* Bias compensation history */
216        
217  
218        /* ================================================================
219         * STATISTIX
220 <       * ================================================================ */            
220 >       * ================================================================ */
221        unsigned long  totalGathered,    /* Total photons gathered */
222                       numDensity,       /* Num density estimates */
223                       numLookups,       /* Counters for short photon lookups */
# Line 235 | Line 265
265     #define isContribPmap(p)   ((p) -> type == PMAP_TYPE_CONTRIB)
266     #define isVolumePmap(p)    ((p) -> type == PMAP_TYPE_VOLUME)
267  
268 <   /* Mean size of heapfile write buffer, in number of photons */
269 <   #define PMAP_HEAPBUFSIZE   1e6
270 <  
241 <   /* Mean idle time between heap locking attempts, in usec */
242 <   #define PMAP_HEAPBUFSLEEP  2e6
243 <  
244 <   /* Shared memory file for parallelised photon distribution */
245 < #if 0  
246 <   #define PMAP_SHMFNAME      "/mkpmap-%d"
247 < #else
248 <   #define PMAP_SHMFNAME      "mkpmapXXXXXX"
249 < #endif      
268 > #ifdef __cplusplus
269 > extern "C" {
270 > #endif
271  
251
272     void initPhotonMap (PhotonMap *pmap, PhotonMapType t);
273     /* Initialise empty photon map of specified type */
274  
# Line 295 | Line 315
315        are placed search queue starting with the furthest photon at pmap ->
316        squeue.node, and pmap -> squeue.tail being the number actually found. */
317  
318 <   void find1Photon (PhotonMap *pmap, const RAY *ray, Photon *photon);
319 <   /* Finds single closest photon to ray -> rop with similar normal.
320 <      Returns NULL if none found. */
318 >   Photon *find1Photon (PhotonMap *pmap, const RAY *ray, Photon *photon);
319 >   /* Find single closest photon to ray -> rop with similar normal.
320 >      Return NULL if none found, else the supplied Photon* buffer,
321 >      indicating that it contains a valid photon. */
322  
323     void getPhoton (PhotonMap *pmap, PhotonIdx idx, Photon *photon);
324     /* Retrieve photon referenced by idx from pmap -> store */
# Line 311 | Line 332
332      
333     void deletePhotons (PhotonMap*);
334     /* Free dem mammaries... */
335 +
336 + #ifdef __cplusplus
337 + }
338 + #endif
339  
340   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines