-static int perlin_hash[] = {
+#include "foundation.h"
+#include "common_maths.h"
+
+static i32 perlin_hash[] = {
0x46,0xD5,0xB8,0xD3,0xF2,0xE5,0xCC,0x07,0xD0,0xB3,0x7A,0xA2,0xC3,0xDA,0xDC,0x7F,
0xE0,0xB7,0x42,0xA0,0xBF,0x41,0x92,0x32,0x6F,0x0D,0x45,0xC7,0x54,0xDB,0x30,0xC2,
0xD5,0xDA,0x55,0x09,0xDE,0x74,0x48,0x20,0xE1,0x24,0x5C,0x4D,0x6F,0x36,0xD8,0xE9,
#define PERLIN_HASH_LENGTH 1024
#define PERLIN_HASH_MASK (PERLIN_HASH_LENGTH-1)
-static int perlin_noise2( int x, int y, int seed )
+static i32 perlin_noise2( i32 x, i32 y, i32 seed )
{
- return perlin_hash[ (perlin_hash[(y+seed) & PERLIN_HASH_MASK] + x)
- & PERLIN_HASH_MASK ];
+ return perlin_hash[ (perlin_hash[(y+seed) & PERLIN_HASH_MASK] + x) & PERLIN_HASH_MASK ];
}
-static int perlin_noise1( int i, int seed )
+static i32 perlin_noise1( i32 i, i32 seed )
{
return perlin_hash[ (seed + i) & PERLIN_HASH_MASK ];
}
static f32 perlin_smooth( f32 x, f32 y, f32 t )
{
- return vg_lerpf( x, y, t*t*(3.0f-2.0f*t) );
+ return f32_lerp( x, y, t*t*(3.0f-2.0f*t) );
}
-f32 vg_perlin_noise_2d( f32 x, f32 y, int seed )
+f32 perlin_noise_2d( f32 x, f32 y, i32 seed )
{
- int ix = x, iy = y;
+ i32 ix = x, iy = y;
f32 x_frac = x - ix,
y_frac = y - iy;
- int s = perlin_noise2( ix, iy, seed ),
+ i32 s = perlin_noise2( ix, iy, seed ),
t = perlin_noise2( ix+1, iy, seed ),
u = perlin_noise2( ix, iy+1, seed ),
v = perlin_noise2( ix+1, iy+1, seed );
return perlin_smooth( low, high, y_frac );
}
-f32 vg_perlin_noise_1d( f32 v, int seed )
+f32 perlin_noise_1d( f32 v, i32 seed )
{
- int iv = v;
+ i32 iv = v;
f32 frac = v-iv;
- int s = perlin_noise1( iv, seed ),
+ i32 s = perlin_noise1( iv, seed ),
t = perlin_noise1( iv+1, seed );
return perlin_smooth( s, t, frac );
}
-f32 vg_perlin_fract_1d( f32 v, f32 freq, int octaves, int seed )
+f32 perlin_fract_1d( f32 v, f32 freq, i32 octaves, i32 seed )
{
f32 xa = v*freq,
amp = 1.0f,
fin = 0.f,
div = 0.f;
- for( int i=0; i<octaves; i++ ){
+ for( i32 i=0; i<octaves; i++ )
+ {
div += 256 * amp;
- fin += vg_perlin_noise_1d( xa, seed ) * amp;
+ fin += perlin_noise_1d( xa, seed ) * amp;
amp /= 2.f;
xa *= 2.f;
}
return fin/div;
}
-f32 vg_perlin_fract_2d( f32 x, f32 y, f32 freq, int octaves, int seed )
+f32 perlin_fract_2d( f32 x, f32 y, f32 freq, i32 octaves, i32 seed )
{
f32 xa = x*freq,
ya = y*freq,
fin = 0.f,
div = 0.f;
- for( int i=0; i<octaves; i++ ){
+ for( i32 i=0; i<octaves; i++ )
+ {
div += 256 * amp;
- fin += vg_perlin_noise_2d( xa, ya, seed ) * amp;
+ fin += perlin_noise_2d( xa, ya, seed ) * amp;
amp /= 2;
xa *= 2;
ya *= 2;