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

Comparing ray/src/common/bsdf.h (file contents):
Revision 2.13 by greg, Sun Jun 5 20:27:14 2011 UTC vs.
Revision 2.20 by greg, Sat Oct 13 20:15:43 2012 UTC

# Line 30 | Line 30
30   extern "C" {
31   #endif
32  
33 + #ifdef _WIN32
34 + #define strcasecmp      stricmp
35 + #endif
36 +
37   #define SDnameLn        128             /* maximum BSDF name length */
38   #define SDmaxCh         3               /* maximum # spectral channels */
39  
# Line 67 | Line 71 | typedef struct {
71   } SDValue;
72  
73   /* Cached, encoded, cumulative distribution for one incident (solid) angle */
74 < #define SD_CDIST_BASE   double          cTotal; \
75 <                        struct SDCDst_s *next
74 > #define SD_CDIST_BASE(styp)     double          cTotal; \
75 >                                struct styp     *next
76   typedef struct SDCDst_s {
77 <        SD_CDIST_BASE;                  /* base fields first */
77 >        SD_CDIST_BASE(SDCDst_s);        /* base fields first */
78          /* ...encoded distribution extends struct */
79   } SDCDst;
80  
81 + extern const SDCDst     SDemptyCD;      /* empty distribution */
82 +
83   /* Forward declaration of BSDF component */
84   typedef struct SDComp_s SDComponent;
85  
# Line 114 | Line 120 | typedef struct {
120   /* Loaded BSDF data */
121   typedef struct {
122          char            name[SDnameLn]; /* BSDF name (usu. derived from file) */
123 +        char            matn[SDnameLn]; /* material name */
124 +        char            makr[SDnameLn]; /* manufacturer */
125          char            *mgf;           /* geometric description (if any) */
126          float           dim[3];         /* width, height, thickness (meters) */
127          SDValue         rLambFront;     /* diffuse front reflectance */
128          SDValue         rLambBack;      /* diffuse rear reflectance */
129          SDValue         tLamb;          /* diffuse transmission */
130 <        SDSpectralDF    *rf, *rb, *tf;  /* non-diffuse BSDF components */
130 >        SDSpectralDF    *rf, *rb;       /* non-diffuse BRDF components */
131 >        SDSpectralDF    *tf, *tb;       /* non-diffuse BTDF components */
132   } SDData;
133  
134   /* List of loaded BSDFs */
# Line 130 | Line 139 | extern struct SDCache_s {
139                          *next;
140   } *SDcacheList;         /* Global BSDF cache */
141  
142 < /* BSDF cache retention preference */
143 < #define SDretainNone    0               /* free unreferenced data*/
144 < #define SDretainBSDFs   1               /* keep loaded BSDFs in cache */
142 > /* BSDF cache retention policies */
143 > #define SDretainNone    0               /* free unreferenced BSDF data */
144 > #define SDretainBSDFs   1               /* keep loaded BSDFs in memory */
145   #define SDretainAll     2               /* also keep cumulative cache data */
146  
147   extern int              SDretainSet;    /* =SDretainNone by default */
# Line 152 | Line 161 | extern void            SDclipName(char res[SDnameLn], const char
161   /* Allocate new spectral distribution function */
162   extern SDSpectralDF     *SDnewSpectralDF(int nc);
163  
164 + /* Add component(s) to spectral distribution function */
165 + extern SDSpectralDF     *SDaddComponent(SDSpectralDF *odf, int nadd);
166 +
167   /* Free a spectral distribution function */
168   extern void             SDfreeSpectralDF(SDSpectralDF *df);
169  
# Line 233 | Line 245 | extern SDData          *loadBSDF(char *name);
245  
246   /* Application-specific BSDF error translator (not part of our library) */
247   extern char             *transSDError(SDError ec);
236
237 /*################################################################*/
238 /*######### DEPRECATED DEFINITIONS AWAITING PERMANENT REMOVAL #######*/
239 /*
240 * Header for BSDF i/o and access routines
241 */
242
243 #include "mat4.h"
244                                /* up directions */
245 typedef enum {
246        UDzneg=-3,
247        UDyneg=-2,
248        UDxneg=-1,
249        UDunknown=0,
250        UDxpos=1,
251        UDypos=2,
252        UDzpos=3
253 } UpDir;
254                                /* BSDF coordinate calculation routines */
255                                /* vectors always point away from surface */
256
257 typedef int     b_vecf2(FVECT v, int n, void *cd);
258 typedef int     b_ndxf2(FVECT v, void *cd);
259 typedef double  b_radf2(int n, void *cd);
260
261 /* Bidirectional Scattering Distribution Function */
262 struct BSDF_data {
263        int     ninc;                   /* number of incoming directions */
264        int     nout;                   /* number of outgoing directions */
265        float   dim[3];                 /* width, height, thickness (meters) */
266        char    *mgf;                   /* geometric description (if any) */
267        void    *ib_priv;               /* input basis private data */
268        b_vecf2 *ib_vec;                /* get input vector from index */
269        b_ndxf2 *ib_ndx;                /* get input index from vector */
270        b_radf2 *ib_ohm;                /* get input radius for index */
271        void    *ob_priv;               /* output basis private data */
272        b_vecf2 *ob_vec;                /* get output vector from index */
273        b_ndxf2 *ob_ndx;                /* get output index from vector */
274        b_radf2 *ob_ohm;                /* get output radius for index */
275        float   *bsdf;                  /* scattering distribution data */
276 };                              /* bidirectional scattering distrib. func. */
277
278 #define getBSDF_incvec(v,b,i)   (*(b)->ib_vec)(v,i,(b)->ib_priv)
279 #define getBSDF_incndx(b,v)     (*(b)->ib_ndx)(v,(b)->ib_priv)
280 #define getBSDF_incohm(b,i)     (*(b)->ib_ohm)(i,(b)->ib_priv)
281 #define getBSDF_outvec(v,b,o)   (*(b)->ob_vec)(v,o,(b)->ob_priv)
282 #define getBSDF_outndx(b,v)     (*(b)->ob_ndx)(v,(b)->ob_priv)
283 #define getBSDF_outohm(b,o)     (*(b)->ob_ohm)(o,(b)->ob_priv)
284 #define BSDF_value(b,i,o)       (b)->bsdf[(o)*(b)->ninc + (i)]
285
286 extern struct BSDF_data *load_BSDF(char *fname);
287 extern void free_BSDF(struct BSDF_data *b);
288 extern int r_BSDF_incvec(FVECT v, struct BSDF_data *b, int i,
289                                double rv, MAT4 xm);
290 extern int r_BSDF_outvec(FVECT v, struct BSDF_data *b, int o,
291                                double rv, MAT4 xm);
292 extern int getBSDF_xfm(MAT4 xm, FVECT nrm, UpDir ud, char *xfbuf);
293
294 /*######### END DEPRECATED DEFINITIONS #######*/
295 /*################################################################*/
248  
249   #ifdef __cplusplus
250   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines