32 lines
No EOL
671 B
HLSL
32 lines
No EOL
671 B
HLSL
uint rng_state;
|
|
|
|
//Hash invented by Thomas Wang
|
|
void wang_hash(uint seed) {
|
|
rng_state = (seed ^ 61) ^ (seed >> 16);
|
|
rng_state *= 9;
|
|
rng_state = rng_state ^ (rng_state >> 4);
|
|
rng_state *= 0x27d4eb2d;
|
|
rng_state = rng_state ^ (rng_state >> 15);
|
|
}
|
|
|
|
//Xorshift algorithm from George Marsaglia's paper
|
|
uint rand_xorshift() {
|
|
rng_state ^= (rng_state << 13);
|
|
rng_state ^= (rng_state >> 17);
|
|
rng_state ^= (rng_state << 5);
|
|
|
|
return rng_state;
|
|
}
|
|
|
|
float randValue() {
|
|
return rand_xorshift() * (1.0 / 4294967296.0);
|
|
}
|
|
|
|
void initRand(uint seed) {
|
|
wang_hash(seed);
|
|
}
|
|
|
|
float randValue(uint seed) {
|
|
initRand(seed);
|
|
return randValue();
|
|
} |