nuclear@0: #include nuclear@0: #include "pnoise.h" nuclear@0: #include "vmath/vmath.h" nuclear@0: nuclear@0: #define B 0x100 nuclear@0: #define BM 0xff nuclear@0: #define N 0x1000 nuclear@0: #define NP 12 nuclear@0: #define NM 0xfff nuclear@0: nuclear@0: #define s_curve(t) ((t) * (t) * (3.0f - 2.0f * (t))) nuclear@0: #define setup(elem, b0, b1, r0, r1) \ nuclear@0: do { \ nuclear@0: scalar_t t = elem + N; \ nuclear@0: b0 = ((int)t) & BM; \ nuclear@0: b1 = (b0 + 1) & BM; \ nuclear@0: r0 = t - (int)t; \ nuclear@0: r1 = r0 - 1.0f; \ nuclear@0: } while(0) nuclear@0: nuclear@0: #define setup_p(elem, b0, b1, r0, r1, p) \ nuclear@0: do { \ nuclear@0: scalar_t t = elem + N; \ nuclear@0: b0 = (((int)t) & BM) % p; \ nuclear@0: b1 = ((b0 + 1) & BM) % p; \ nuclear@0: r0 = t - (int)t; \ nuclear@0: r1 = r0 - 1.0f; \ nuclear@0: } while(0) nuclear@0: nuclear@0: static int perm[B + B + 2]; nuclear@0: static vec2_t grad2[B + B + 2]; nuclear@0: static bool tables_valid; nuclear@0: nuclear@0: static void init_noise() nuclear@0: { nuclear@0: for(int i=0; i