From dfc9969f85ce3995dd5c1eb599c4e7e77c237617 Mon Sep 17 00:00:00 2001 From: Marcin Date: Wed, 22 Jan 2025 16:38:07 +0000 Subject: [PATCH] vectorise fades fix fade for vec2 --- include/cglm/noise.h | 48 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/include/cglm/noise.h b/include/cglm/noise.h index 9a56d92..bec12e9 100644 --- a/include/cglm/noise.h +++ b/include/cglm/noise.h @@ -37,23 +37,49 @@ /* glm__noiseDetail_fade_vec4(vec4 t, vec4 dest) */ #define glm__noiseDetail_fade_vec4(t, dest) { \ - dest[0] = (t[0] * t[0] * t[0]) * (t[0] * (t[0] * 6.0f - 15.0f) + 10.0f); \ - dest[1] = (t[1] * t[1] * t[1]) * (t[1] * (t[1] * 6.0f - 15.0f) + 10.0f); \ - dest[2] = (t[2] * t[2] * t[2]) * (t[2] * (t[2] * 6.0f - 15.0f) + 10.0f); \ - dest[3] = (t[3] * t[3] * t[3]) * (t[3] * (t[3] * 6.0f - 15.0f) + 10.0f); \ + /* dest = (t * t * t) * (t * (t * 6.0f - 15.0f) + 10.0f) */ \ + vec4 temp; \ + glm_vec4_mul(t, t, temp); \ + glm_vec4_mul(temp, t, temp); \ + /* dest = (t * (t * 6.0f - 15.0f) + 10.0f) */ \ + glm_vec4_scale(t, 6.0f, dest); \ + glm_vec4_subs(dest, 15.0f, dest); \ + glm_vec4_mul(t, dest, dest); \ + glm_vec4_adds(dest, 10.0f, dest); \ + /* dest = temp * dest */ \ + glm_vec4_mul(temp, dest, dest); \ } /* glm__noiseDetail_fade_vec3(vec3 t, vec3 dest) */ #define glm__noiseDetail_fade_vec3(t, dest) { \ - dest[0] = (t[0] * t[0] * t[0]) * (t[0] * (t[0] * 6.0f - 15.0f) + 10.0f); \ - dest[1] = (t[1] * t[1] * t[1]) * (t[1] * (t[1] * 6.0f - 15.0f) + 10.0f); \ - dest[2] = (t[2] * t[2] * t[2]) * (t[2] * (t[2] * 6.0f - 15.0f) + 10.0f); \ + /* dest = (t * t * t) * (t * (t * 6.0f - 15.0f) + 10.0f) */ \ + /* temp = t * t * t */ \ + vec3 temp; \ + glm_vec3_mul(t, t, temp); \ + glm_vec3_mul(temp, t, temp); \ + /* dest = (t * (t * 6.0f - 15.0f) + 10.0f) */ \ + glm_vec3_scale(t, 6.0f, dest); \ + glm_vec3_subs(dest, 15.0f, dest); \ + glm_vec3_mul(t, dest, dest); \ + glm_vec3_adds(dest, 10.0f, dest); \ + /* dest = temp * dest */ \ + glm_vec3_mul(temp, dest, dest); \ } /* glm__noiseDetail_fade_vec2(vec2 t, vec2 dest) */ #define glm__noiseDetail_fade_vec2(t, dest) { \ - dest[0] = (t[0] * t[0] * t[0]) * (t[0] * (t[0] * 6.0f - 15.0f) + 10.0f); \ - dest[1] = (t[1] * t[1] * t[1]) * (t[1] * (t[1] * 6.0f - 15.0f) + 10.0f); \ + /* dest = (t * t * t) * (t * (t * 6.0f - 15.0f) + 10.0f) */ \ + /* temp = t * t * t */ \ + vec2 temp; \ + glm_vec2_mul(t, t, temp); \ + glm_vec2_mul(temp, t, temp); \ + /* dest = (t * (t * 6.0f - 15.0f) + 10.0f) */ \ + glm_vec2_scale(t, 6.0f, dest); \ + glm_vec2_subs(dest, 15.0f, dest); \ + glm_vec2_mul(t, dest, dest); \ + glm_vec2_adds(dest, 10.0f, dest); \ + /* dest = temp * dest */ \ + glm_vec2_mul(temp, dest, dest); \ } /* glm__noiseDetail_taylorInvSqrt(vec4 x, vec4 dest) */ @@ -674,8 +700,8 @@ glm_perlin_vec2(vec2 point) { /* fade_xyz = fade(vec2(Pf.x, Pf.y)) */ vec2 fade_xy; - vec2 temp = {Pf[0], Pf[1]}; /* temp = vec2(Pf.x, Pf.y) */ - glm__noiseDetail_fade_vec2(temp, fade_xy); /* fade_xy = fade(temp) */ + vec2 temp2 = {Pf[0], Pf[1]}; /* temp = vec2(Pf.x, Pf.y) */ + glm__noiseDetail_fade_vec2(temp2, fade_xy); /* fade_xy = fade(temp) */ /* n_x = lerp(vec2(n00, n01), vec2(n10, n11), fade_xy.x); */ vec2 n_x;