346 {
347
352
353
354 fl::u16 u =
x & 0xFFFF;
355 fl::u16 v =
y & 0xFFFF;
356 fl::u16 w =
z & 0xFFFF;
357 fl::u16 s =
t & 0xFFFF;
358
359
360 u = EASE16(u);
361 v = EASE16(v);
362 w = EASE16(w);
363 s = EASE16(s);
364
365 fl::u16 N = 0x8000L;
366
367
368 fl::i16 xx = (u >> 1) & 0x7FFF;
369 fl::i16 yy = (v >> 1) & 0x7FFF;
370 fl::i16 zz = (w >> 1) & 0x7FFF;
371
372
379
380
389
390 fl::i16 L1 = LERP(
grad16(AAA, xx, yy, zz),
grad16(BAA, xx - N, yy, zz), u);
391 fl::i16 L2 = LERP(
grad16(ABA, xx, yy - N, zz),
grad16(BBA, xx - N, yy - N, zz), u);
392 fl::i16 L3 = LERP(
grad16(AAB, xx, yy, zz - N),
grad16(BAB, xx - N, yy, zz - N), u);
393 fl::i16 L4 = LERP(
grad16(ABB, xx, yy - N, zz - N),
grad16(BBB, xx - N, yy - N, zz - N), u);
394
395 fl::i16 Y1 = LERP(L1, L2, v);
396 fl::i16 Y2 = LERP(L3, L4, v);
397 fl::i16 noise_lower = LERP(Y1, Y2, w);
398
399
409
410 fl::i16 U1 = LERP(
grad16(AAA_u, xx, yy, zz),
grad16(BAA_u, xx - N, yy, zz), u);
411 fl::i16 U2 = LERP(
grad16(ABA_u, xx, yy - N, zz),
grad16(BBA_u, xx - N, yy - N, zz), u);
412 fl::i16 U3 = LERP(
grad16(AAB_u, xx, yy, zz - N),
grad16(BAB_u, xx - N, yy, zz - N), u);
413 fl::i16 U4 = LERP(
grad16(ABB_u, xx, yy - N, zz - N),
grad16(BBB_u, xx - N, yy - N, zz - N), u);
414
415 fl::i16 V1 = LERP(U1, U2, v);
416 fl::i16 V2 = LERP(U3, U4, v);
417 fl::i16 noise_upper = LERP(V1, V2, w);
418
419
420 fl::i16 noise4d = LERP(noise_lower, noise_upper, s);
421
422 return noise4d;
423}
FL_DISABLE_WARNING_PUSH unsigned char * B
static fl::i16 grad16(fl::u8 hash, fl::i16 x, fl::i16 y, fl::i16 z)
#define NOISE_P(x)
Reads a single byte from the p array.