00001
00032 #include "llviewerprecompiledheaders.h"
00033
00034 #include "noise.h"
00035
00036 #include "llrand.h"
00037
00038
00039 #define B 0x100
00040 S32 p[B + B + 2];
00041 F32 g3[B + B + 2][3];
00042 F32 g2[B + B + 2][2];
00043 F32 g1[B + B + 2];
00044 S32 gNoiseStart = 1;
00045
00046
00047 F32 noise2(F32 *vec)
00048 {
00049 U8 bx0, bx1, by0, by1;
00050 U32 b00, b10, b01, b11;
00051 F32 rx0, rx1, ry0, ry1, *q, sx, sy, a, b, u, v;
00052 S32 i, j;
00053
00054 if (gNoiseStart) {
00055 gNoiseStart = 0;
00056 init();
00057 }
00058
00059
00060 fast_setup(*vec, bx0, bx1, rx0, rx1);
00061 fast_setup(*(vec + 1), by0, by1, ry0, ry1);
00062
00063 i = *(p + bx0);
00064 j = *(p + bx1);
00065
00066 b00 = *(p + i + by0);
00067 b10 = *(p + j + by0);
00068 b01 = *(p + i + by1);
00069 b11 = *(p + j + by1);
00070
00071 sx = s_curve(rx0);
00072 sy = s_curve(ry0);
00073
00074
00075 q = *(g2 + b00);
00076 u = fast_at2(rx0, ry0, q);
00077 q = *(g2 + b10);
00078 v = fast_at2(rx1, ry0, q);
00079 a = lerp_m(sx, u, v);
00080
00081 q = *(g2 + b01);
00082 u = fast_at2(rx0,ry1,q);
00083 q = *(g2 + b11);
00084 v = fast_at2(rx1,ry1,q);
00085 b = lerp_m(sx, u, v);
00086
00087 return lerp_m(sy, a, b);
00088 }
00089