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