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
11
namespace
ghassanpl::noise
12
{
13
using
ghassanpl::integer::splitmix64;
14
16
17
uint64_t
SquirrelNoise3
(
uint64_t
seed
,
uint64_t
position)
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;
24
mangled
*=
BIT_NOISE1
;
25
mangled
+=
seed
;
26
mangled
^= (
mangled
>> 8);
27
mangled
+=
BIT_NOISE2
;
28
mangled
^= (
mangled
<< 8);
29
mangled
*=
BIT_NOISE3
;
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;
43
mangledBits
*=
SQ5_BIT_NOISE1
;
44
mangledBits
+=
seed
;
45
mangledBits
^= (
mangledBits
>> 9);
46
mangledBits
+=
SQ5_BIT_NOISE2
;
47
mangledBits
^= (
mangledBits
>> 11);
48
mangledBits
*=
SQ5_BIT_NOISE3
;
49
mangledBits
^= (
mangledBits
>> 13);
50
mangledBits
+=
SQ5_BIT_NOISE4
;
51
mangledBits
^= (
mangledBits
>> 15);
52
mangledBits
*=
SQ5_BIT_NOISE5
;
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
}
ghassanpl::bit_count
constexpr auto bit_count
Equal to the number of bits in the type.
Definition
bits.h:33
ghassanpl::noise
Shamelessly stolen from https://github.com/SRombauts/SimplexNoise/.
Definition
noise.h:13
ghassanpl::noise::SquirrelNoise3
uint64_t SquirrelNoise3(uint64_t seed, uint64_t position)
Value Noise.
Definition
random_seq.h:17
include
ghassanpl
random_seq.h
Generated by
1.9.8