diff options
Diffstat (limited to 'thirdparty/misc/open-simplex-noise-no-allocate.patch')
-rw-r--r-- | thirdparty/misc/open-simplex-noise-no-allocate.patch | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/thirdparty/misc/open-simplex-noise-no-allocate.patch b/thirdparty/misc/open-simplex-noise-no-allocate.patch new file mode 100644 index 0000000000..fc3abe7d00 --- /dev/null +++ b/thirdparty/misc/open-simplex-noise-no-allocate.patch @@ -0,0 +1,133 @@ +diff -u orig/open-simplex-noise.c misc/open-simplex-noise.c +--- orig/open-simplex-noise.c 2018-09-14 11:11:40.049810000 +0200 ++++ misc/open-simplex-noise.c 2018-09-14 11:09:39.726457000 +0200 +@@ -13,6 +13,11 @@ + * of any particular randomization library, so results + * will be the same when ported to other languages. + */ ++ ++// -- GODOT start -- ++// Modified to work without allocating memory, also removed some unused function. ++// -- GODOT end -- ++ + #include <math.h> + #include <stdlib.h> + #include <stdint.h> +@@ -34,11 +39,12 @@ + + #define DEFAULT_SEED (0LL) + +-struct osn_context { ++// -- GODOT start -- ++/*struct osn_context { + int16_t *perm; + int16_t *permGradIndex3D; +-}; +- ++};*/ ++// -- GODOT end -- + #define ARRAYSIZE(x) (sizeof((x)) / sizeof((x)[0])) + + /* +@@ -126,7 +132,9 @@ + int xi = (int) x; + return x < xi ? xi - 1 : xi; + } +- ++ ++// -- GODOT start -- ++/* + static int allocate_perm(struct osn_context *ctx, int nperm, int ngrad) + { + if (ctx->perm) +@@ -154,18 +162,21 @@ + memcpy(ctx->perm, p, sizeof(*ctx->perm) * nelements); + + for (i = 0; i < 256; i++) { +- /* Since 3D has 24 gradients, simple bitmask won't work, so precompute modulo array. */ ++ // Since 3D has 24 gradients, simple bitmask won't work, so precompute modulo array. + ctx->permGradIndex3D[i] = (int16_t)((ctx->perm[i] % (ARRAYSIZE(gradients3D) / 3)) * 3); + } + return 0; + } ++*/ ++// -- GODOT end -- + + /* + * Initializes using a permutation array generated from a 64-bit seed. + * Generates a proper permutation (i.e. doesn't merely perform N successive pair + * swaps on a base array). Uses a simple 64-bit LCG. + */ +-int open_simplex_noise(int64_t seed, struct osn_context **ctx) ++// -- GODOT start -- ++int open_simplex_noise(int64_t seed, struct osn_context *ctx) + { + int rc; + int16_t source[256]; +@@ -174,20 +185,9 @@ + int16_t *permGradIndex3D; + int r; + +- *ctx = (struct osn_context *) malloc(sizeof(**ctx)); +- if (!(*ctx)) +- return -ENOMEM; +- (*ctx)->perm = NULL; +- (*ctx)->permGradIndex3D = NULL; +- +- rc = allocate_perm(*ctx, 256, 256); +- if (rc) { +- free(*ctx); +- return rc; +- } +- +- perm = (*ctx)->perm; +- permGradIndex3D = (*ctx)->permGradIndex3D; ++ perm = ctx->perm; ++ permGradIndex3D = ctx->permGradIndex3D; ++// -- GODOT end -- + + for (i = 0; i < 256; i++) + source[i] = (int16_t) i; +@@ -206,6 +206,8 @@ + return 0; + } + ++// -- GODOT start -- ++/* + void open_simplex_noise_free(struct osn_context *ctx) + { + if (!ctx) +@@ -220,6 +222,8 @@ + } + free(ctx); + } ++*/ ++// -- GODOT end -- + + /* 2D OpenSimplex (Simplectic) Noise. */ + double open_simplex_noise2(struct osn_context *ctx, double x, double y) +diff -u orig/open-simplex-noise.h misc/open-simplex-noise.h +--- orig/open-simplex-noise.h 2018-09-14 11:11:19.659807000 +0200 ++++ misc/open-simplex-noise.h 2018-09-14 11:10:05.006460000 +0200 +@@ -35,11 +35,18 @@ + extern "C" { + #endif + +-struct osn_context; ++// -- GODOT start -- ++// Modified to work without allocating memory, also removed some unused function. + +-int open_simplex_noise(int64_t seed, struct osn_context **ctx); ++struct osn_context { ++ int16_t perm[256]; ++ int16_t permGradIndex3D[256]; ++}; ++ ++int open_simplex_noise(int64_t seed, struct osn_context *ctx); ++//int open_simplex_noise_init_perm(struct osn_context *ctx, int16_t p[], int nelements); ++// -- GODOT end -- + void open_simplex_noise_free(struct osn_context *ctx); +-int open_simplex_noise_init_perm(struct osn_context *ctx, int16_t p[], int nelements); + double open_simplex_noise2(struct osn_context *ctx, double x, double y); + double open_simplex_noise3(struct osn_context *ctx, double x, double y, double z); + double open_simplex_noise4(struct osn_context *ctx, double x, double y, double z, double w); |