summaryrefslogtreecommitdiff
path: root/thirdparty/misc/open-simplex-noise-no-allocate.patch
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/misc/open-simplex-noise-no-allocate.patch')
-rw-r--r--thirdparty/misc/open-simplex-noise-no-allocate.patch133
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);