| 105 | } |
| 106 | |
| 107 | static uint32 CMJPermute(uint32 i, uint32 l, uint32 p) |
| 108 | { |
| 109 | uint32 w = l - 1; |
| 110 | w |= w >> 1; |
| 111 | w |= w >> 2; |
| 112 | w |= w >> 4; |
| 113 | w |= w >> 8; |
| 114 | w |= w >> 16; |
| 115 | do |
| 116 | { |
| 117 | i ^= p; i *= 0xe170893d; |
| 118 | i ^= p >> 16; |
| 119 | i ^= (i & w) >> 4; |
| 120 | i ^= p >> 8; i *= 0x0929eb3f; |
| 121 | i ^= p >> 23; |
| 122 | i ^= (i & w) >> 1; i *= 1 | p >> 27; |
| 123 | i *= 0x6935fa69; |
| 124 | i ^= (i & w) >> 11; i *= 0x74dcb303; |
| 125 | i ^= (i & w) >> 2; i *= 0x9e501cc3; |
| 126 | i ^= (i & w) >> 2; i *= 0xc860a3df; |
| 127 | i &= w; |
| 128 | i ^= i >> 5; |
| 129 | } |
| 130 | while (i >= l); |
| 131 | return (i + p) % l; |
| 132 | } |
| 133 | |
| 134 | static float CMJRandFloat(uint32 i, uint32 p) |
| 135 | { |