--- ray/src/rt/pmaprand.h 2015/02/24 19:39:27 2.1 +++ ray/src/rt/pmaprand.h 2015/05/08 13:20:23 2.3 @@ -7,10 +7,11 @@ Roland Schregle (roland.schregle@{hslu.ch, gmail.com}) (c) Fraunhofer Institute for Solar Energy Systems, - Lucerne University of Applied Sciences & Arts + (c) Lucerne University of Applied Sciences and Arts, + supported by the Swiss National Science Foundation (SNSF, #147053) ================================================================== - $Id: pmaprand.h,v 2.1 2015/02/24 19:39:27 greg Exp $ + $Id: pmaprand.h,v 2.3 2015/05/08 13:20:23 rschregle Exp $ */ @@ -20,15 +21,24 @@ erand48() with separate states for photon emission, scattering, and russian roulette. The pmapSeed() and pmapRandom() macros can be adapted to other (better?) RNGs. */ + +#if defined(_WIN32) || defined(BSD) + /* Assume no erand48(), so use standard RNG without explicit multistate + control; the resulting sequences will be suboptimal */ + #include "random.h" -#define pmapSeed(seed, state) (state [0] += seed, state [1] += seed, \ - state [2] += seed) -#define pmapRandom(state) erand48(state) + #define pmapSeed(seed, state) (srandom(seed)) + #define pmapRandom(state) (frandom()) +#else + #define pmapSeed(seed, state) (state [0] += seed, state [1] += seed, \ + state [2] += seed) + #define pmapRandom(state) erand48(state) +#endif - extern unsigned short partState [3], emitState [3], cntState [3], mediumState [3], scatterState [3], rouletteState [3], randSeed; #endif +