header_utils
Loading...
Searching...
No Matches
random_seq.h
1
4
5#pragma once
6
7#include "random.h"
8#include "hashes.h"
9#include "noise.h"
10
11namespace ghassanpl::noise
12{
13 using ghassanpl::integer::splitmix64;
14
16
18 {
19 const uint64_t BIT_NOISE1 = 0xB5297A4DB5297A4D;
20 const uint64_t BIT_NOISE2 = 0x68E31DA468E31DA4;
21 const uint64_t BIT_NOISE3 = 0x1B56C4E91B56C4E9;
22
23 uint64_t mangled = position;
25 mangled += seed;
26 mangled ^= (mangled >> 8);
28 mangled ^= (mangled << 8);
30 mangled ^= (mangled >> 8);
31 return mangled;
32 }
33
34 [[nodiscard]] constexpr uint32_t SquirrelNoise5(uint32_t seed, int32_t position)
35 {
36 constexpr uint32_t SQ5_BIT_NOISE1 = 0xd2a80a3f; // 11010010101010000000101000111111
37 constexpr uint32_t SQ5_BIT_NOISE2 = 0xa884f197; // 10101000100001001111000110010111
38 constexpr uint32_t SQ5_BIT_NOISE3 = 0x6C736F4B; // 01101100011100110110111101001011
39 constexpr uint32_t SQ5_BIT_NOISE4 = 0xB79F3ABB; // 10110111100111110011101010111011
40 constexpr uint32_t SQ5_BIT_NOISE5 = 0x1b56c4f5; // 00011011010101101100010011110101
41
42 auto mangledBits = (uint32_t)position;
45 mangledBits ^= (mangledBits >> 9);
47 mangledBits ^= (mangledBits >> 11);
49 mangledBits ^= (mangledBits >> 13);
51 mangledBits ^= (mangledBits >> 15);
53 mangledBits ^= (mangledBits >> 17);
54 return mangledBits;
55 }
56
57 constexpr uint32_t Get2dNoiseUint(int32_t indexX, int32_t indexY, uint32_t seed)
58 {
59 constexpr int PRIME_NUMBER = 198491317; // Large prime number with non-boring bits
60 return SquirrelNoise5(indexX + (PRIME_NUMBER * indexY), seed);
61 }
62
63 constexpr double Get1dNoiseZeroToOne(int32_t index, uint32_t seed)
64 {
65 constexpr double ONE_OVER_MAX_UINT = (1.0 / (double)0xFFFFFFFF);
66 return ONE_OVER_MAX_UINT * (double)SquirrelNoise5(index, seed);
67 }
68
69 constexpr double Get2dNoiseZeroToOne(int32_t indexX, int32_t indexY, uint32_t seed)
70 {
71 constexpr double ONE_OVER_MAX_UINT = (1.0 / (double)0xFFFFFFFF);
72 return ONE_OVER_MAX_UINT * (double)Get2dNoiseUint(indexX, indexY, seed);
73 }
74}
constexpr auto bit_count
Equal to the number of bits in the type.
Definition bits.h:33
Shamelessly stolen from https://github.com/SRombauts/SimplexNoise/.
Definition noise.h:13
uint64_t SquirrelNoise3(uint64_t seed, uint64_t position)
Value Noise.
Definition random_seq.h:17