diff options
author | pryazha <pryadeiniv@mail.ru> | 2025-06-15 16:11:31 +0500 |
---|---|---|
committer | pryazha <pryadeiniv@mail.ru> | 2025-06-15 16:11:31 +0500 |
commit | 9d944f26d359e4bc1ffd8e44350b0df9f0935b18 (patch) | |
tree | 9759a83a76ab741a587b99f00c2463eafd05d813 /advanced_lighting/9.ssao/xoshiro128plus.c | |
parent | d65ddd07a43d5ffdcf2ddf90d6f86626cf9b92d8 (diff) |
something
Diffstat (limited to 'advanced_lighting/9.ssao/xoshiro128plus.c')
-rw-r--r-- | advanced_lighting/9.ssao/xoshiro128plus.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/advanced_lighting/9.ssao/xoshiro128plus.c b/advanced_lighting/9.ssao/xoshiro128plus.c new file mode 100644 index 0000000..b55c63b --- /dev/null +++ b/advanced_lighting/9.ssao/xoshiro128plus.c @@ -0,0 +1,28 @@ +#include <stdint.h> + +/* --- xoshiro128+ --- */ +static inline uint32_t rotl(const uint32_t x, int k) { + return (x << k) | (x >> (32 - k)); +} + +uint32_t next(uint32_t *s) { + const uint32_t result = s[0] + s[3]; + const uint32_t t = s[1] << 9; + s[2] ^= s[0]; + s[3] ^= s[1]; + s[1] ^= s[2]; + s[0] ^= s[3]; + s[2] ^= t; + s[3] = rotl(s[3], 11); + return result; +} +/* --- /xoshiro128+ --- */ + +float int_to_float(uint32_t random) { + union { uint32_t u32; float f; } u = { .u32 = random >> 9 | 0x3f800000 }; + return u.f - 1.0; +} + +float nextf(uint32_t* s) { + return int_to_float(next(s)); +} |