--- ray/src/common/bsdf_t.h 2011/02/18 00:41:44 3.2 +++ ray/src/common/bsdf_t.h 2011/06/03 18:12:58 3.8 @@ -1,8 +1,10 @@ -/* RCSid $Id: bsdf_t.h,v 3.2 2011/02/18 00:41:44 greg Exp $ */ +/* RCSid $Id: bsdf_t.h,v 3.8 2011/06/03 18:12:58 greg Exp $ */ /* * bsdf_t.h * - * Support for variable-resolution BSDF trees + * Support for variable-resolution BSDF trees. + * Assumes "bsdf.h" already included. + * Include after "ezxml.h" for SDloadTre() declaration. * * Created by Greg Ward on 2/2/11. * @@ -27,11 +29,37 @@ typedef struct SDNode_s { } u; /* subtrees or values (extends struct) */ } SDNode; +#define SD_UFRONT 0x1 /* flag for BSDF uses front side */ +#define SD_UBACK 0x2 /* flag for BSDF uses back side */ +#define SD_XMIT 0x3 /* combine the two for transmission */ + +/* Variable-resolution BSDF holder */ +typedef struct { + int sidef; /* transmitted component? */ + SDNode *st; /* BSDF tree */ +} SDTre; + +/* Holder for cumulative distribution (sum of BSDF * projSA) */ +typedef struct { + SD_CDIST_BASE; /* base fields; must come first */ + double clim[2][2]; /* input coordinate limits */ + double max_psa; /* maximum projected solid angle */ + short sidef; /* which side(s) to use */ + short isodist; /* isotropic distribution? */ + int calen; /* cumulative array length */ + struct { + unsigned hndx; /* hilbert index */ + unsigned cuml; /* cumulative value */ + } carr[1]; /* cumulative array (extends struct) */ +} SDTreCDst; + +#ifdef _EZXML_H /* Load a variable-resolution BSDF tree from an open XML file */ -extern SDError SDloadTre(SDData *sd, ezxml_t fl); +extern SDError SDloadTre(SDData *sd, ezxml_t wtl); +#endif /* Our matrix handling routines */ -extern const SDFunc SDhandleTre; +extern SDFunc SDhandleTre; #ifdef __cplusplus }