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.19 by greg, Sun Sep 2 15:33:15 2012 UTC vs.
Revision 2.27 by greg, Thu May 14 19:20:13 2020 UTC

# Line 25 | Line 25
25  
26   #include "fvect.h"
27   #include "ccolor.h"
28 + #include "platform.h"
29  
30   #ifdef __cplusplus
31   extern "C" {
32   #endif
33  
33 #ifdef _WIN32
34 #define strcasecmp      stricmp
35 #endif
36
34   #define SDnameLn        128             /* maximum BSDF name length */
35   #define SDmaxCh         3               /* maximum # spectral channels */
36  
# Line 58 | Line 55 | extern "C" {
55   typedef enum {SDEnone=0, SDEmemory, SDEfile, SDEformat, SDEargument,
56                  SDEdata, SDEsupport, SDEinternal, SDEunknown} SDError;
57  
58 < /* English ASCII strings corresponding to ennumerated errors */
58 > /* English strings corresponding to ennumerated errors */
59   extern const char       *SDerrorEnglish[];
60  
61 < /* Additional information on last error (ASCII English) */
61 > /* Pointer to error list in preferred language */
62 > extern const char       **SDerrorList;
63 >
64 > /* Additional information on last error (generally in English) */
65   extern char             SDerrorDetail[];
66  
67   /* Holder for BSDF value and spectral color */
# Line 84 | Line 84 | extern const SDCDst    SDemptyCD;      /* empty distribution *
84   typedef struct SDComp_s SDComponent;
85  
86   /* Methods needed to handle BSDF components (nothing is optional) */
87 < typedef const struct {
87 > typedef struct {
88                                          /* return non-diffuse BSDF */
89          int             (*getBSDFs)(float coef[SDmaxCh], const FVECT outVec,
90                                      const FVECT inVec, SDComponent *sdc);
# Line 104 | Line 104 | typedef const struct {
104   /* Structure to hold a spectral BSDF component (typedef SDComponent above) */
105   struct SDComp_s {
106          C_COLOR         cspec[SDmaxCh]; /* component spectral bases */
107 <        SDFunc          *func;          /* methods for this component */
107 >        const SDFunc    *func;          /* methods for this component */
108          void            *dist;          /* loaded distribution data */
109          SDCDst          *cdList;        /* cumulative distribution cache */
110   };
# Line 123 | Line 123 | typedef struct {
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) */
126 >        double          dim[3];         /* width, height, thickness (meters) */
127          SDValue         rLambFront;     /* diffuse front reflectance */
128          SDValue         rLambBack;      /* diffuse rear reflectance */
129          SDValue         tLamb;          /* diffuse transmission */
# Line 145 | Line 145 | extern struct SDCache_s {
145   #define SDretainAll     2               /* also keep cumulative cache data */
146  
147   extern int              SDretainSet;    /* =SDretainNone by default */
148 + extern unsigned long    SDmaxCache;     /* =0 (unlimited) by default */
149  
150   /*****************************************************************
151   * The following routines are less commonly used by applications.
# Line 152 | Line 153 | extern int             SDretainSet;    /* =SDretainNone by default *
153  
154   #define SDisLoaded(sd)  ((sd)->rLambFront.spec.flags != 0)
155  
156 < /* Report an error to the indicated stream (in English) */
157 < extern SDError          SDreportEnglish(SDError ec, FILE *fp);
156 > /* Report an error to the indicated stream */
157 > extern SDError          SDreportError(SDError ec, FILE *fp);
158  
159   /* Shorten file path to useable BSDF name, removing suffix */
160   extern void             SDclipName(char res[SDnameLn], const char *fname);
# Line 190 | Line 191 | extern SDError         SDsampComponent(SDValue *sv, FVECT ioV
191   extern void             SDmultiSamp(double t[], int n, double randX);
192  
193   /* Map a [0,1]^2 square to a unit radius disk */
194 < void                    SDsquare2disk(double ds[2], double seedx, double seedy);
194 > extern void             SDsquare2disk(double ds[2], double seedx, double seedy);
195  
196   /* Map point on unit disk to a unit square in [0,1]^2 range */
197 < void                    SDdisk2square(double sq[2], double diskx, double disky);
197 > extern void             SDdisk2square(double sq[2], double diskx, double disky);
198  
199   /*****************************************************************
200   * The calls below are the ones most applications require.
# Line 201 | Line 202 | void                   SDdisk2square(double sq[2], double diskx, doubl
202   */
203  
204   /* Get BSDF from cache (or load and cache it on first call) */
205 < /* Report any problems to stderr (in English), return NULL on failure */
205 > /* Report any problems to stderr, return NULL on failure */
206   extern const SDData     *SDcacheFile(const char *fname);
207  
208   /* Free a BSDF from our cache (clear all if sd==NULL) */
# Line 245 | Line 246 | extern SDData          *loadBSDF(char *name);
246  
247   /* Application-specific BSDF error translator (not part of our library) */
248   extern char             *transSDError(SDError ec);
248
249 /*################################################################*/
250 /*######### DEPRECATED DEFINITIONS AWAITING PERMANENT REMOVAL #######*/
251 /*
252 * Header for BSDF i/o and access routines
253 */
254
255 #include "mat4.h"
256                                /* up directions */
257 typedef enum {
258        UDzneg=-3,
259        UDyneg=-2,
260        UDxneg=-1,
261        UDunknown=0,
262        UDxpos=1,
263        UDypos=2,
264        UDzpos=3
265 } UpDir;
266                                /* BSDF coordinate calculation routines */
267                                /* vectors always point away from surface */
268
269 typedef int     b_vecf2(FVECT v, int n, void *cd);
270 typedef int     b_ndxf2(FVECT v, void *cd);
271 typedef double  b_radf2(int n, void *cd);
272
273 /* Bidirectional Scattering Distribution Function */
274 struct BSDF_data {
275        int     ninc;                   /* number of incoming directions */
276        int     nout;                   /* number of outgoing directions */
277        float   dim[3];                 /* width, height, thickness (meters) */
278        char    *mgf;                   /* geometric description (if any) */
279        void    *ib_priv;               /* input basis private data */
280        b_vecf2 *ib_vec;                /* get input vector from index */
281        b_ndxf2 *ib_ndx;                /* get input index from vector */
282        b_radf2 *ib_ohm;                /* get input radius for index */
283        void    *ob_priv;               /* output basis private data */
284        b_vecf2 *ob_vec;                /* get output vector from index */
285        b_ndxf2 *ob_ndx;                /* get output index from vector */
286        b_radf2 *ob_ohm;                /* get output radius for index */
287        float   *bsdf;                  /* scattering distribution data */
288 };                              /* bidirectional scattering distrib. func. */
289
290 #define getBSDF_incvec(v,b,i)   (*(b)->ib_vec)(v,i,(b)->ib_priv)
291 #define getBSDF_incndx(b,v)     (*(b)->ib_ndx)(v,(b)->ib_priv)
292 #define getBSDF_incohm(b,i)     (*(b)->ib_ohm)(i,(b)->ib_priv)
293 #define getBSDF_outvec(v,b,o)   (*(b)->ob_vec)(v,o,(b)->ob_priv)
294 #define getBSDF_outndx(b,v)     (*(b)->ob_ndx)(v,(b)->ob_priv)
295 #define getBSDF_outohm(b,o)     (*(b)->ob_ohm)(o,(b)->ob_priv)
296 #define BSDF_value(b,i,o)       (b)->bsdf[(o)*(b)->ninc + (i)]
297
298 extern struct BSDF_data *load_BSDF(char *fname);
299 extern void free_BSDF(struct BSDF_data *b);
300 extern int r_BSDF_incvec(FVECT v, struct BSDF_data *b, int i,
301                                double rv, MAT4 xm);
302 extern int r_BSDF_outvec(FVECT v, struct BSDF_data *b, int o,
303                                double rv, MAT4 xm);
304 extern int getBSDF_xfm(MAT4 xm, FVECT nrm, UpDir ud, char *xfbuf);
305
306 /*######### END DEPRECATED DEFINITIONS #######*/
307 /*################################################################*/
249  
250   #ifdef __cplusplus
251   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines