diff options
Diffstat (limited to 'src/glm/vec3.c')
-rw-r--r-- | src/glm/vec3.c | 464 |
1 files changed, 397 insertions, 67 deletions
diff --git a/src/glm/vec3.c b/src/glm/vec3.c index f278471..b85cf63 100644 --- a/src/glm/vec3.c +++ b/src/glm/vec3.c @@ -1,133 +1,463 @@ #include <lua.h> -#include <honeysuckle.h> +#include <lauxlib.h> #include <cglm/cglm.h> #include "util/util.h" #include "glm.h" -int vec3_create(lua_State *L); -int vec3_set(lua_State *L); -int vec3_get(lua_State *L); -int vec3_normalize(lua_State *L); +int glm_vec3_create(lua_State *L) +{ + lua_newuserdata(L, sizeof(vec3)); + luaL_getmetatable(L, glm_vec3_tname); + lua_setmetatable(L, -2); + return 1; +} + + +int glm_vec3_set(lua_State *L) +{ + vec3 *vec = luaL_checkudata(L, 1, glm_vec3_tname); + int index = luaL_checkinteger(L, 2); + double value = luaL_checknumber(L, 3); + (*vec)[index] = value; + return 0; +} -int vec3_add(lua_State *L); -int vec3_sub(lua_State *L); -int vec3_scale(lua_State *L); -int vec3_dot(lua_State *L); -int vec3_cross(lua_State *L); -const char *vec3_tname = "glm.vec3"; +int glm_vec3_get(lua_State *L) +{ + vec3 *vec = luaL_checkudata(L, 1, glm_vec3_tname); + int index = luaL_checkinteger(L, 2); + lua_pushnumber(L, (*vec)[index]); + return 1; +} -void setup_vec3(lua_State *L, int glm_tbl) +int glm_vec3_bind(lua_State *L) { - luaL_newmetatable(L, vec3_tname); - lua_pop(L, 1); + vec4 *v4 = luaL_checkudata(L, 1, glm_vec4_tname); + vec3 *dest = luaL_checkudata(L, 2, glm_vec3_tname); + glm_vec3(*v4, *dest); + return 0; +} - int tbl = hs_create_table(L, - hs_str_cfunc("vec3", vec3_create), - hs_str_cfunc("vec3_set", vec3_set), - hs_str_cfunc("vec3_get", vec3_get), - hs_str_cfunc("vec3_normalize", vec3_normalize), +int glm_vec3_copy_bind(lua_State *L) +{ + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 2, glm_vec3_tname); + glm_vec3_copy(*a, *dest); + return 0; +} - hs_str_cfunc("vec3_add", vec3_add), - hs_str_cfunc("vec3_sub", vec3_sub), - hs_str_cfunc("vec3_scale", vec3_scale), - hs_str_cfunc("vec3_dot", vec3_dot), - hs_str_cfunc("vec3_cross", vec3_cross), - ); - append_table(L, glm_tbl, tbl); - lua_pop(L, 1); +int glm_vec3_zero_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + glm_vec3_zero(*v); + return 0; } -int vec3_create(lua_State *L) +int glm_vec3_one_bind(lua_State *L) { - lua_newuserdata(L, 3*sizeof(float)); - luaL_getmetatable(L, vec3_tname); - lua_setmetatable(L, -2); + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + glm_vec3_one(*v); + return 0; +} + + +int glm_vec3_dot_bind(lua_State *L) +{ + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + float bind_result = glm_vec3_dot(*a, *b); + lua_pushnumber(L, bind_result); return 1; } -int vec3_set(lua_State *L) +int glm_vec3_cross_bind(lua_State *L) { - float *vec = luaL_checkudata(L, 1, vec3_tname); - int index = luaL_checkinteger(L, 2); - double value = luaL_checknumber(L, 3); - array_set(L, 3, vec, index, value); + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *d = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_cross(*a, *b, *d); return 0; } -int vec3_get(lua_State *L) +int glm_vec3_crossn_bind(lua_State *L) { - float *vec = luaL_checkudata(L, 1, vec3_tname); - int index = luaL_checkinteger(L, 2); - array_get(L, 3, vec, index); + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_crossn(*a, *b, *dest); + return 0; +} + + +int glm_vec3_norm2_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + float bind_result = glm_vec3_norm2(*v); + lua_pushnumber(L, bind_result); return 1; } -int vec3_normalize(lua_State *L) +int glm_vec3_norm_bind(lua_State *L) +{ + vec3 *vec = luaL_checkudata(L, 1, glm_vec3_tname); + float bind_result = glm_vec3_norm(*vec); + lua_pushnumber(L, bind_result); + return 1; +} + + +int glm_vec3_add_bind(lua_State *L) +{ + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_add(*a, *b, *dest); + return 0; +} + + +int glm_vec3_adds_bind(lua_State *L) +{ + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + float s = luaL_checknumber(L, 2); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_adds(*a, s, *dest); + return 0; +} + + +int glm_vec3_sub_bind(lua_State *L) +{ + vec3 *v1 = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *v2 = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_sub(*v1, *v2, *dest); + return 0; +} + + +int glm_vec3_subs_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + float s = luaL_checknumber(L, 2); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_subs(*v, s, *dest); + return 0; +} + + +int glm_vec3_mul_bind(lua_State *L) +{ + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *d = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_mul(*a, *b, *d); + return 0; +} + + +int glm_vec3_scale_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + float s = luaL_checknumber(L, 2); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_scale(*v, s, *dest); + return 0; +} + + +int glm_vec3_scale_as_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + float s = luaL_checknumber(L, 2); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_scale_as(*v, s, *dest); + return 0; +} + + +int glm_vec3_div_bind(lua_State *L) { - float *vec = luaL_checkudata(L, 1, vec3_tname); - glm_vec3_normalize(vec); + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_div(*a, *b, *dest); return 0; } -int vec3_add(lua_State *L) +int glm_vec3_divs_bind(lua_State *L) { - float *a = luaL_checkudata(L, 1, vec3_tname); - float *b = luaL_checkudata(L, 2, vec3_tname); - float *dest = luaL_checkudata(L, 3, vec3_tname); + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + float s = luaL_checknumber(L, 2); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_divs(*v, s, *dest); + return 0; +} + - glm_vec3_add(a, b, dest); +int glm_vec3_addadd_bind(lua_State *L) +{ + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_addadd(*a, *b, *dest); return 0; } -int vec3_sub(lua_State *L) +int glm_vec3_subadd_bind(lua_State *L) { - float *a = luaL_checkudata(L, 1, vec3_tname); - float *b = luaL_checkudata(L, 2, vec3_tname); - float *dest = luaL_checkudata(L, 3, vec3_tname); + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_subadd(*a, *b, *dest); + return 0; +} - glm_vec3_sub(a, b, dest); + +int glm_vec3_muladd_bind(lua_State *L) +{ + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_muladd(*a, *b, *dest); return 0; } -int vec3_scale(lua_State *L) + +int glm_vec3_muladds_bind(lua_State *L) { - float *v = luaL_checkudata(L, 1, vec3_tname); + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); float s = luaL_checknumber(L, 2); - float *dest = luaL_checkudata(L, 3, vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_muladds(*a, s, *dest); + return 0; +} + + +int glm_vec3_maxadd_bind(lua_State *L) +{ + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_maxadd(*a, *b, *dest); + return 0; +} + + +int glm_vec3_minadd_bind(lua_State *L) +{ + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_minadd(*a, *b, *dest); + return 0; +} + + +int glm_vec3_flipsign_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + glm_vec3_flipsign(*v); + return 0; +} + + +int glm_vec3_flipsign_to_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 2, glm_vec3_tname); + glm_vec3_flipsign_to(*v, *dest); + return 0; +} + + +int glm_vec3_inv_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + glm_vec3_inv(*v); + return 0; +} + + +int glm_vec3_inv_to_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 2, glm_vec3_tname); + glm_vec3_inv_to(*v, *dest); + return 0; +} + + +int glm_vec3_negate_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + glm_vec3_negate(*v); + return 0; +} + + +int glm_vec3_negate_to_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 2, glm_vec3_tname); + glm_vec3_negate_to(*v, *dest); + return 0; +} + + +int glm_vec3_normalize_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + glm_vec3_normalize(*v); + return 0; +} + + +int glm_vec3_normalize_to_bind(lua_State *L) +{ + vec3 *vec = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 2, glm_vec3_tname); + glm_vec3_normalize_to(*vec, *dest); + return 0; +} + + +int glm_vec3_angle_bind(lua_State *L) +{ + vec3 *v1 = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *v2 = luaL_checkudata(L, 2, glm_vec3_tname); + float bind_result = glm_vec3_angle(*v1, *v2); + lua_pushnumber(L, bind_result); + return 1; +} + + +int glm_vec3_rotate_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + float angle = luaL_checknumber(L, 2); + vec3 *axis = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_rotate(*v, angle, *axis); + return 0; +} + + +int glm_vec3_rotate_m4_bind(lua_State *L) +{ + mat4 *m = luaL_checkudata(L, 1, glm_mat4_tname); + vec3 *v = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_rotate_m4(*m, *v, *dest); + return 0; +} + + +int glm_vec3_rotate_m3_bind(lua_State *L) +{ + mat3 *m = luaL_checkudata(L, 1, glm_mat3_tname); + vec3 *v = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_rotate_m3(*m, *v, *dest); + return 0; +} + + +int glm_vec3_proj_bind(lua_State *L) +{ + vec3 *a = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *b = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_proj(*a, *b, *dest); + return 0; +} + - glm_vec3_scale(v, s, dest); +int glm_vec3_center_bind(lua_State *L) +{ + vec3 *v1 = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *v2 = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_center(*v1, *v2, *dest); return 0; } -int vec3_dot(lua_State *L) +int glm_vec3_distance2_bind(lua_State *L) { - float *a = luaL_checkudata(L, 1, vec3_tname); - float *b = luaL_checkudata(L, 2, vec3_tname); + vec3 *v1 = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *v2 = luaL_checkudata(L, 2, glm_vec3_tname); + float bind_result = glm_vec3_distance2(*v1, *v2); + lua_pushnumber(L, bind_result); + return 1; +} - float result = glm_vec3_dot(a, b); - lua_pushnumber(L, result); + +int glm_vec3_distance_bind(lua_State *L) +{ + vec3 *v1 = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *v2 = luaL_checkudata(L, 2, glm_vec3_tname); + float bind_result = glm_vec3_distance(*v1, *v2); + lua_pushnumber(L, bind_result); return 1; } -int vec3_cross(lua_State *L) +int glm_vec3_maxv_bind(lua_State *L) +{ + vec3 *v1 = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *v2 = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_maxv(*v1, *v2, *dest); + return 0; +} + + +int glm_vec3_minv_bind(lua_State *L) +{ + vec3 *v1 = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *v2 = luaL_checkudata(L, 2, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 3, glm_vec3_tname); + glm_vec3_minv(*v1, *v2, *dest); + return 0; +} + + +int glm_vec3_ortho_bind(lua_State *L) +{ + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *dest = luaL_checkudata(L, 2, glm_vec3_tname); + glm_vec3_ortho(*v, *dest); + return 0; +} + + +int glm_vec3_clamp_bind(lua_State *L) { - float *a = luaL_checkudata(L, 1, vec3_tname); - float *b = luaL_checkudata(L, 2, vec3_tname); - float *dest = luaL_checkudata(L, 3, vec3_tname); + vec3 *v = luaL_checkudata(L, 1, glm_vec3_tname); + float minVal = luaL_checknumber(L, 2); + float maxVal = luaL_checknumber(L, 3); + glm_vec3_clamp(*v, minVal, maxVal); + return 0; +} + - glm_vec3_cross(a, b, dest); +int glm_vec3_lerp_bind(lua_State *L) +{ + vec3 *from = luaL_checkudata(L, 1, glm_vec3_tname); + vec3 *to = luaL_checkudata(L, 2, glm_vec3_tname); + float t = luaL_checknumber(L, 3); + vec3 *dest = luaL_checkudata(L, 4, glm_vec3_tname); + glm_vec3_lerp(*from, *to, t, *dest); return 0; } |