From a5c52c1e38a591847f694cb2a54428cd3a82386a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Mon, 19 Feb 2024 01:03:11 +0100 Subject: [PATCH] FastNoiseLite: Sync with 1.1.0, clean up SCsub Doesn't fix the LTO warning about `-Waggressive-loop-optimizations` due to GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80922. --- COPYRIGHT.txt | 2 +- modules/noise/SCsub | 17 - thirdparty/README.md | 2 +- thirdparty/noise/FastNoiseLite.h | 15 +- thirdparty/noise/patches/FastNoiseLite.patch | 455 ------------------ .../noise/patches/namespace-warnings.patch | 43 ++ 6 files changed, 53 insertions(+), 481 deletions(-) delete mode 100644 thirdparty/noise/patches/FastNoiseLite.patch create mode 100644 thirdparty/noise/patches/namespace-warnings.patch diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index bb29c884433e..0fe1a11f7106 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -397,7 +397,7 @@ License: Expat Files: ./thirdparty/noise/FastNoiseLite.h Comment: FastNoise Lite -Copyright: 2020, Jordan Peck and contributors +Copyright: 2023, Jordan Peck and contributors License: Expat Files: ./thirdparty/misc/pcg.cpp diff --git a/modules/noise/SCsub b/modules/noise/SCsub index 1430aa0c4e51..f309fd2dd44b 100644 --- a/modules/noise/SCsub +++ b/modules/noise/SCsub @@ -5,23 +5,9 @@ Import("env_modules") env_noise = env_modules.Clone() -# Thirdparty source files - -thirdparty_obj = [] - thirdparty_dir = "#thirdparty/noise/" -thirdparty_sources = [ - # Add C++ source files for noise modules here -] -thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] - env_noise.Prepend(CPPPATH=[thirdparty_dir]) -env_thirdparty = env_noise.Clone() -env_thirdparty.disable_warnings() -env_thirdparty.add_source_files(thirdparty_obj, thirdparty_sources) -env.modules_sources += thirdparty_obj - # Godot source files module_obj = [] @@ -29,6 +15,3 @@ module_obj = [] env_noise.add_source_files(module_obj, "*.cpp") env_noise.add_source_files(module_obj, "editor/*.cpp") env.modules_sources += module_obj - -# Needed to force rebuilding the module files when the thirdparty library is updated. -env.Depends(module_obj, thirdparty_obj) diff --git a/thirdparty/README.md b/thirdparty/README.md index 107c2b2589b7..353c2f5bb936 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -697,7 +697,7 @@ Files extracted from the upstream source: ## noise - Upstream: https://github.com/Auburn/FastNoiseLite -- Version: git (6be3d6bf7fb408de341285f9ee8a29b67fd953f1, 2022) +- Version: 1.1.0 (f7af54b56518aa659e1cf9fb103c0b6e36a833d9, 2023) - License: MIT Files extracted from the upstream source: diff --git a/thirdparty/noise/FastNoiseLite.h b/thirdparty/noise/FastNoiseLite.h index a213f0888e38..fb6dbcb92ad1 100644 --- a/thirdparty/noise/FastNoiseLite.h +++ b/thirdparty/noise/FastNoiseLite.h @@ -1,7 +1,7 @@ // MIT License // -// Copyright(c) 2020 Jordan Peck (jordan.me2@gmail.com) -// Copyright(c) 2020 Contributors +// Copyright(c) 2023 Jordan Peck (jordan.me2@gmail.com) +// Copyright(c) 2023 Contributors // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files(the "Software"), to deal @@ -44,15 +44,15 @@ // ....',;:codxkO000OOxdoc:;,''',,,;;;;,''.......',,;:clodkO00000Okxolc::;,,''..',;:ldxOKXNWWWNNK0OkkkkkkkkkkkxxddooooodxxkOOOOO000 // ....',;;clodxkkOOOkkdolc:;,,,,,,,,'..........,;:clodxkO0KKXKK0Okxdolcc::;;,,,;;:codkO0XXNNNNXKK0OOOOOkkkkxxdoollloodxkO0KKKXXXXX // -// VERSION: 1.0.1 -// https://github.com/Auburn/FastNoise +// VERSION: 1.1.0 +// https://github.com/Auburn/FastNoiseLite #ifndef FASTNOISELITE_H #define FASTNOISELITE_H #include -namespace fastnoiselite{ +namespace fastnoiselite { class FastNoiseLite { @@ -2594,5 +2594,6 @@ const T FastNoiseLite::Lookup::RandVecs3D[] = -0.7870349638f, 0.03447489231f, 0.6159443543f, 0, -0.2015596421f, 0.6859872284f, 0.6991389226f, 0, -0.08581082512f, -0.10920836f, -0.9903080513f, 0, 0.5532693395f, 0.7325250401f, -0.396610771f, 0, -0.1842489331f, -0.9777375055f, -0.1004076743f, 0, 0.0775473789f, -0.9111505856f, 0.4047110257f, 0, 0.1399838409f, 0.7601631212f, -0.6344734459f, 0, 0.4484419361f, -0.845289248f, 0.2904925424f, 0 }; -} -#endif // namespace fastnoiselite +} // namespace fastnoiselite + +#endif diff --git a/thirdparty/noise/patches/FastNoiseLite.patch b/thirdparty/noise/patches/FastNoiseLite.patch deleted file mode 100644 index 3c835c7b062b..000000000000 --- a/thirdparty/noise/patches/FastNoiseLite.patch +++ /dev/null @@ -1,455 +0,0 @@ ---- orig/FastNoiseLite.h 1900-01-00 00:00:00 +0000 -+++ noise/FastNoiseLite.h 1900-01-00 00:00:00 +0000 -@@ -52,6 +52,8 @@ - - #include - -+namespace fastnoiselite{ -+ - class FastNoiseLite - { - public: -@@ -2583,4 +2585,5 @@ - -0.7870349638f, 0.03447489231f, 0.6159443543f, 0, -0.2015596421f, 0.6859872284f, 0.6991389226f, 0, -0.08581082512f, -0.10920836f, -0.9903080513f, 0, 0.5532693395f, 0.7325250401f, -0.396610771f, 0, -0.1842489331f, -0.9777375055f, -0.1004076743f, 0, 0.0775473789f, -0.9111505856f, 0.4047110257f, 0, 0.1399838409f, 0.7601631212f, -0.6344734459f, 0, 0.4484419361f, -0.845289248f, 0.2904925424f, 0 - }; - --#endif -+} -+#endif // namespace fastnoiselite -@@ -295,7 +295,7 @@ public: - /// Noise output bounded between -1...1 - /// - template -- float GetNoise(FNfloat x, FNfloat y) -+ float GetNoise(FNfloat x, FNfloat y) const - { - Arguments_must_be_floating_point_values(); - -@@ -321,7 +321,7 @@ public: - /// Noise output bounded between -1...1 - /// - template -- float GetNoise(FNfloat x, FNfloat y, FNfloat z) -+ float GetNoise(FNfloat x, FNfloat y, FNfloat z) const - { - Arguments_must_be_floating_point_values(); - -@@ -350,7 +350,7 @@ public: - /// noise = GetNoise(x, y) - /// - template -- void DomainWarp(FNfloat& x, FNfloat& y) -+ void DomainWarp(FNfloat& x, FNfloat& y) const - { - Arguments_must_be_floating_point_values(); - -@@ -377,7 +377,7 @@ public: - /// noise = GetNoise(x, y, z) - /// - template -- void DomainWarp(FNfloat& x, FNfloat& y, FNfloat& z) -+ void DomainWarp(FNfloat& x, FNfloat& y, FNfloat& z) const - { - Arguments_must_be_floating_point_values(); - -@@ -528,7 +528,7 @@ private: - } - - -- float GradCoord(int seed, int xPrimed, int yPrimed, float xd, float yd) -+ float GradCoord(int seed, int xPrimed, int yPrimed, float xd, float yd) const - { - int hash = Hash(seed, xPrimed, yPrimed); - hash ^= hash >> 15; -@@ -541,7 +541,7 @@ private: - } - - -- float GradCoord(int seed, int xPrimed, int yPrimed, int zPrimed, float xd, float yd, float zd) -+ float GradCoord(int seed, int xPrimed, int yPrimed, int zPrimed, float xd, float yd, float zd) const - { - int hash = Hash(seed, xPrimed, yPrimed, zPrimed); - hash ^= hash >> 15; -@@ -555,7 +555,7 @@ private: - } - - -- void GradCoordOut(int seed, int xPrimed, int yPrimed, float& xo, float& yo) -+ void GradCoordOut(int seed, int xPrimed, int yPrimed, float& xo, float& yo) const - { - int hash = Hash(seed, xPrimed, yPrimed) & (255 << 1); - -@@ -564,7 +564,7 @@ private: - } - - -- void GradCoordOut(int seed, int xPrimed, int yPrimed, int zPrimed, float& xo, float& yo, float& zo) -+ void GradCoordOut(int seed, int xPrimed, int yPrimed, int zPrimed, float& xo, float& yo, float& zo) const - { - int hash = Hash(seed, xPrimed, yPrimed, zPrimed) & (255 << 2); - -@@ -574,7 +574,7 @@ private: - } - - -- void GradCoordDual(int seed, int xPrimed, int yPrimed, float xd, float yd, float& xo, float& yo) -+ void GradCoordDual(int seed, int xPrimed, int yPrimed, float xd, float yd, float& xo, float& yo) const - { - int hash = Hash(seed, xPrimed, yPrimed); - int index1 = hash & (127 << 1); -@@ -592,7 +592,7 @@ private: - } - - -- void GradCoordDual(int seed, int xPrimed, int yPrimed, int zPrimed, float xd, float yd, float zd, float& xo, float& yo, float& zo) -+ void GradCoordDual(int seed, int xPrimed, int yPrimed, int zPrimed, float xd, float yd, float zd, float& xo, float& yo, float& zo) const - { - int hash = Hash(seed, xPrimed, yPrimed, zPrimed); - int index1 = hash & (63 << 2); -@@ -616,7 +616,7 @@ private: - // Generic noise gen - - template -- float GenNoiseSingle(int seed, FNfloat x, FNfloat y) -+ float GenNoiseSingle(int seed, FNfloat x, FNfloat y) const - { - switch (mNoiseType) - { -@@ -638,7 +638,7 @@ private: - } - - template -- float GenNoiseSingle(int seed, FNfloat x, FNfloat y, FNfloat z) -+ float GenNoiseSingle(int seed, FNfloat x, FNfloat y, FNfloat z) const - { - switch (mNoiseType) - { -@@ -663,7 +663,7 @@ private: - // Noise Coordinate Transforms (frequency, and possible skew or rotation) - - template -- void TransformNoiseCoordinate(FNfloat& x, FNfloat& y) -+ void TransformNoiseCoordinate(FNfloat& x, FNfloat& y) const - { - x *= mFrequency; - y *= mFrequency; -@@ -686,7 +686,7 @@ private: - } - - template -- void TransformNoiseCoordinate(FNfloat& x, FNfloat& y, FNfloat& z) -+ void TransformNoiseCoordinate(FNfloat& x, FNfloat& y, FNfloat& z) const - { - x *= mFrequency; - y *= mFrequency; -@@ -757,7 +757,7 @@ private: - // Domain Warp Coordinate Transforms - - template -- void TransformDomainWarpCoordinate(FNfloat& x, FNfloat& y) -+ void TransformDomainWarpCoordinate(FNfloat& x, FNfloat& y) const - { - switch (mDomainWarpType) - { -@@ -777,7 +777,7 @@ private: - } - - template -- void TransformDomainWarpCoordinate(FNfloat& x, FNfloat& y, FNfloat& z) -+ void TransformDomainWarpCoordinate(FNfloat& x, FNfloat& y, FNfloat& z) const - { - switch (mWarpTransformType3D) - { -@@ -844,7 +844,7 @@ private: - // Fractal FBm - - template -- float GenFractalFBm(FNfloat x, FNfloat y) -+ float GenFractalFBm(FNfloat x, FNfloat y) const - { - int seed = mSeed; - float sum = 0; -@@ -865,7 +865,7 @@ private: - } - - template -- float GenFractalFBm(FNfloat x, FNfloat y, FNfloat z) -+ float GenFractalFBm(FNfloat x, FNfloat y, FNfloat z) const - { - int seed = mSeed; - float sum = 0; -@@ -890,7 +890,7 @@ private: - // Fractal Ridged - - template -- float GenFractalRidged(FNfloat x, FNfloat y) -+ float GenFractalRidged(FNfloat x, FNfloat y) const - { - int seed = mSeed; - float sum = 0; -@@ -911,7 +911,7 @@ private: - } - - template -- float GenFractalRidged(FNfloat x, FNfloat y, FNfloat z) -+ float GenFractalRidged(FNfloat x, FNfloat y, FNfloat z) const - { - int seed = mSeed; - float sum = 0; -@@ -936,7 +936,7 @@ private: - // Fractal PingPong - - template -- float GenFractalPingPong(FNfloat x, FNfloat y) -+ float GenFractalPingPong(FNfloat x, FNfloat y) const - { - int seed = mSeed; - float sum = 0; -@@ -957,7 +957,7 @@ private: - } - - template -- float GenFractalPingPong(FNfloat x, FNfloat y, FNfloat z) -+ float GenFractalPingPong(FNfloat x, FNfloat y, FNfloat z) const - { - int seed = mSeed; - float sum = 0; -@@ -982,7 +982,7 @@ private: - // Simplex/OpenSimplex2 Noise - - template -- float SingleSimplex(int seed, FNfloat x, FNfloat y) -+ float SingleSimplex(int seed, FNfloat x, FNfloat y) const - { - // 2D OpenSimplex2 case uses the same algorithm as ordinary Simplex. - -@@ -1053,7 +1053,7 @@ private: - } - - template -- float SingleOpenSimplex2(int seed, FNfloat x, FNfloat y, FNfloat z) -+ float SingleOpenSimplex2(int seed, FNfloat x, FNfloat y, FNfloat z) const - { - // 3D OpenSimplex2 case uses two offset rotated cube grids. - -@@ -1155,7 +1155,7 @@ private: - // OpenSimplex2S Noise - - template -- float SingleOpenSimplex2S(int seed, FNfloat x, FNfloat y) -+ float SingleOpenSimplex2S(int seed, FNfloat x, FNfloat y) const - { - // 2D OpenSimplex2S case is a modified 2D simplex noise. - -@@ -1286,7 +1286,7 @@ private: - } - - template -- float SingleOpenSimplex2S(int seed, FNfloat x, FNfloat y, FNfloat z) -+ float SingleOpenSimplex2S(int seed, FNfloat x, FNfloat y, FNfloat z) const - { - // 3D OpenSimplex2S case uses two offset rotated cube grids. - -@@ -1482,7 +1482,7 @@ private: - // Cellular Noise - - template -- float SingleCellular(int seed, FNfloat x, FNfloat y) -+ float SingleCellular(int seed, FNfloat x, FNfloat y) const - { - int xr = FastRound(x); - int yr = FastRound(y); -@@ -1612,7 +1612,7 @@ private: - } - - template -- float SingleCellular(int seed, FNfloat x, FNfloat y, FNfloat z) -+ float SingleCellular(int seed, FNfloat x, FNfloat y, FNfloat z) const - { - int xr = FastRound(x); - int yr = FastRound(y); -@@ -1769,7 +1769,7 @@ private: - // Perlin Noise - - template -- float SinglePerlin(int seed, FNfloat x, FNfloat y) -+ float SinglePerlin(int seed, FNfloat x, FNfloat y) const - { - int x0 = FastFloor(x); - int y0 = FastFloor(y); -@@ -1794,7 +1794,7 @@ private: - } - - template -- float SinglePerlin(int seed, FNfloat x, FNfloat y, FNfloat z) -+ float SinglePerlin(int seed, FNfloat x, FNfloat y, FNfloat z) const - { - int x0 = FastFloor(x); - int y0 = FastFloor(y); -@@ -1833,7 +1833,7 @@ private: - // Value Cubic Noise - - template -- float SingleValueCubic(int seed, FNfloat x, FNfloat y) -+ float SingleValueCubic(int seed, FNfloat x, FNfloat y) const - { - int x1 = FastFloor(x); - int y1 = FastFloor(y); -@@ -1863,7 +1863,7 @@ private: - } - - template -- float SingleValueCubic(int seed, FNfloat x, FNfloat y, FNfloat z) -+ float SingleValueCubic(int seed, FNfloat x, FNfloat y, FNfloat z) const - { - int x1 = FastFloor(x); - int y1 = FastFloor(y); -@@ -1920,7 +1920,7 @@ private: - // Value Noise - - template -- float SingleValue(int seed, FNfloat x, FNfloat y) -+ float SingleValue(int seed, FNfloat x, FNfloat y) const - { - int x0 = FastFloor(x); - int y0 = FastFloor(y); -@@ -1940,7 +1940,7 @@ private: - } - - template -- float SingleValue(int seed, FNfloat x, FNfloat y, FNfloat z) -+ float SingleValue(int seed, FNfloat x, FNfloat y, FNfloat z) const - { - int x0 = FastFloor(x); - int y0 = FastFloor(y); -@@ -1972,7 +1972,7 @@ private: - // Domain Warp - - template -- void DoSingleDomainWarp(int seed, float amp, float freq, FNfloat x, FNfloat y, FNfloat& xr, FNfloat& yr) -+ void DoSingleDomainWarp(int seed, float amp, float freq, FNfloat x, FNfloat y, FNfloat& xr, FNfloat& yr) const - { - switch (mDomainWarpType) - { -@@ -1989,7 +1989,7 @@ private: - } - - template -- void DoSingleDomainWarp(int seed, float amp, float freq, FNfloat x, FNfloat y, FNfloat z, FNfloat& xr, FNfloat& yr, FNfloat& zr) -+ void DoSingleDomainWarp(int seed, float amp, float freq, FNfloat x, FNfloat y, FNfloat z, FNfloat& xr, FNfloat& yr, FNfloat& zr) const - { - switch (mDomainWarpType) - { -@@ -2009,7 +2009,7 @@ private: - // Domain Warp Single Wrapper - - template -- void DomainWarpSingle(FNfloat& x, FNfloat& y) -+ void DomainWarpSingle(FNfloat& x, FNfloat& y) const - { - int seed = mSeed; - float amp = mDomainWarpAmp * mFractalBounding; -@@ -2023,7 +2023,7 @@ private: - } - - template -- void DomainWarpSingle(FNfloat& x, FNfloat& y, FNfloat& z) -+ void DomainWarpSingle(FNfloat& x, FNfloat& y, FNfloat& z) const - { - int seed = mSeed; - float amp = mDomainWarpAmp * mFractalBounding; -@@ -2041,7 +2041,7 @@ private: - // Domain Warp Fractal Progressive - - template -- void DomainWarpFractalProgressive(FNfloat& x, FNfloat& y) -+ void DomainWarpFractalProgressive(FNfloat& x, FNfloat& y) const - { - int seed = mSeed; - float amp = mDomainWarpAmp * mFractalBounding; -@@ -2062,7 +2062,7 @@ private: - } - - template -- void DomainWarpFractalProgressive(FNfloat& x, FNfloat& y, FNfloat& z) -+ void DomainWarpFractalProgressive(FNfloat& x, FNfloat& y, FNfloat& z) const - { - int seed = mSeed; - float amp = mDomainWarpAmp * mFractalBounding; -@@ -2087,7 +2087,7 @@ private: - // Domain Warp Fractal Independant - - template -- void DomainWarpFractalIndependent(FNfloat& x, FNfloat& y) -+ void DomainWarpFractalIndependent(FNfloat& x, FNfloat& y) const - { - FNfloat xs = x; - FNfloat ys = y; -@@ -2108,7 +2108,7 @@ private: - } - - template -- void DomainWarpFractalIndependent(FNfloat& x, FNfloat& y, FNfloat& z) -+ void DomainWarpFractalIndependent(FNfloat& x, FNfloat& y, FNfloat& z) const - { - FNfloat xs = x; - FNfloat ys = y; -@@ -2133,7 +2133,7 @@ private: - // Domain Warp Basic Grid - - template -- void SingleDomainWarpBasicGrid(int seed, float warpAmp, float frequency, FNfloat x, FNfloat y, FNfloat& xr, FNfloat& yr) -+ void SingleDomainWarpBasicGrid(int seed, float warpAmp, float frequency, FNfloat x, FNfloat y, FNfloat& xr, FNfloat& yr) const - { - FNfloat xf = x * frequency; - FNfloat yf = y * frequency; -@@ -2166,7 +2166,7 @@ private: - } - - template -- void SingleDomainWarpBasicGrid(int seed, float warpAmp, float frequency, FNfloat x, FNfloat y, FNfloat z, FNfloat& xr, FNfloat& yr, FNfloat& zr) -+ void SingleDomainWarpBasicGrid(int seed, float warpAmp, float frequency, FNfloat x, FNfloat y, FNfloat z, FNfloat& xr, FNfloat& yr, FNfloat& zr) const - { - FNfloat xf = x * frequency; - FNfloat yf = y * frequency; -@@ -2228,7 +2228,7 @@ private: - // Domain Warp Simplex/OpenSimplex2 - - template -- void SingleDomainWarpSimplexGradient(int seed, float warpAmp, float frequency, FNfloat x, FNfloat y, FNfloat& xr, FNfloat& yr, bool outGradOnly) -+ void SingleDomainWarpSimplexGradient(int seed, float warpAmp, float frequency, FNfloat x, FNfloat y, FNfloat& xr, FNfloat& yr, bool outGradOnly) const - { - const float SQRT3 = 1.7320508075688772935274463415059f; - const float G2 = (3 - SQRT3) / 6; -@@ -2326,7 +2326,7 @@ private: - } - - template -- void SingleDomainWarpOpenSimplex2Gradient(int seed, float warpAmp, float frequency, FNfloat x, FNfloat y, FNfloat z, FNfloat& xr, FNfloat& yr, FNfloat& zr, bool outGradOnly) -+ void SingleDomainWarpOpenSimplex2Gradient(int seed, float warpAmp, float frequency, FNfloat x, FNfloat y, FNfloat z, FNfloat& xr, FNfloat& yr, FNfloat& zr, bool outGradOnly) const - { - x *= frequency; - y *= frequency; -@@ -1611,6 +1611,12 @@ private: - } - } - -+// GCC raises warnings when integer overflows occur, which are needed for hashing here. -+#if defined(__GNUC__) && !defined(__clang__) -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Waggressive-loop-optimizations" -+#endif -+ - template - float SingleCellular(int seed, FNfloat x, FNfloat y, FNfloat z) const - { -@@ -1765,6 +1771,9 @@ private: - } - } - -+#if defined(__GNUC__) && !defined(__clang__) -+#pragma GCC diagnostic pop -+#endif - - // Perlin Noise - \ No newline at end of file diff --git a/thirdparty/noise/patches/namespace-warnings.patch b/thirdparty/noise/patches/namespace-warnings.patch new file mode 100644 index 000000000000..6348ae1f058a --- /dev/null +++ b/thirdparty/noise/patches/namespace-warnings.patch @@ -0,0 +1,43 @@ +diff --git a/thirdparty/noise/FastNoiseLite.h b/thirdparty/noise/FastNoiseLite.h +index ed97b0fcac..fb6dbcb92a 100644 +--- a/thirdparty/noise/FastNoiseLite.h ++++ b/thirdparty/noise/FastNoiseLite.h +@@ -52,6 +52,8 @@ + + #include + ++namespace fastnoiselite { ++ + class FastNoiseLite + { + public: +@@ -1609,6 +1611,12 @@ private: + } + } + ++// GCC raises warnings when integer overflows occur, which are needed for hashing here. ++#if defined(__GNUC__) && !defined(__clang__) ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Waggressive-loop-optimizations" ++#endif ++ + template + float SingleCellular(int seed, FNfloat x, FNfloat y, FNfloat z) const + { +@@ -1763,6 +1771,9 @@ private: + } + } + ++#if defined(__GNUC__) && !defined(__clang__) ++#pragma GCC diagnostic pop ++#endif + + // Perlin Noise + +@@ -2583,4 +2594,6 @@ const T FastNoiseLite::Lookup::RandVecs3D[] = + -0.7870349638f, 0.03447489231f, 0.6159443543f, 0, -0.2015596421f, 0.6859872284f, 0.6991389226f, 0, -0.08581082512f, -0.10920836f, -0.9903080513f, 0, 0.5532693395f, 0.7325250401f, -0.396610771f, 0, -0.1842489331f, -0.9777375055f, -0.1004076743f, 0, 0.0775473789f, -0.9111505856f, 0.4047110257f, 0, 0.1399838409f, 0.7601631212f, -0.6344734459f, 0, 0.4484419361f, -0.845289248f, 0.2904925424f, 0 + }; + ++} // namespace fastnoiselite ++ + #endif