Files
Nasal-Interpreter/module/libmat.nas
2022-11-06 23:30:18 +08:00

58 lines
2.4 KiB
Plaintext

var libmat=func(){
var dl=dylib.dlopen("libmat."~(os.platform()=="windows"?"dll":"so"));
var vec2=dylib.dlsym(dl,"nas_vec2");
var vec3=dylib.dlsym(dl,"nas_vec3");
var (vec2add,vec2sub,vec2mul,vec2div,vec2neg,vec2norm,vec2len,vec2dot)=(
dylib.dlsym(dl,"nas_vec2_add"),
dylib.dlsym(dl,"nas_vec2_sub"),
dylib.dlsym(dl,"nas_vec2_mult"),
dylib.dlsym(dl,"nas_vec2_div"),
dylib.dlsym(dl,"nas_vec2_neg"),
dylib.dlsym(dl,"nas_vec2_norm"),
dylib.dlsym(dl,"nas_vec2_len"),
dylib.dlsym(dl,"nas_vec2_dot")
);
var (vec3add,vec3sub,vec3mul,vec3div,vec3neg,vec3norm,vec3len,vec3dot)=(
dylib.dlsym(dl,"nas_vec3_add"),
dylib.dlsym(dl,"nas_vec3_sub"),
dylib.dlsym(dl,"nas_vec3_mult"),
dylib.dlsym(dl,"nas_vec3_div"),
dylib.dlsym(dl,"nas_vec3_neg"),
dylib.dlsym(dl,"nas_vec3_norm"),
dylib.dlsym(dl,"nas_vec3_len"),
dylib.dlsym(dl,"nas_vec3_dot")
);
var (rotate_x,rotate_y,rotate_z)=(
dylib.dlsym(dl,"nas_rotate_x"),
dylib.dlsym(dl,"nas_rotate_y"),
dylib.dlsym(dl,"nas_rotate_z")
);
var call=dylib.dlcall;
return {
vec2:{
new:func(x,y){return call(vec2,x,y);},
add:func(v0,v1){return call(vec2add,v0,v1);},
sub:func(v0,v1){return call(vec2sub,v0,v1);},
mul:func(v0,v1){return call(vec2mul,v0,v1);},
div:func(v0,v1){return call(vec2div,v0,v1);},
neg:func(v0){return call(vec2neg,v0);},
norm:func(v0){return call(vec2norm,v0);},
len:func(v0){return call(vec2len,v0);},
dot:func(v0,v1){return call(vec2dot,v0,v1);}
},
vec3:{
new:func(x,y,z){return call(vec3,x,y,z);},
add:func(v0,v1){return call(vec3add,v0,v1);},
sub:func(v0,v1){return call(vec3sub,v0,v1);},
mul:func(v0,v1){return call(vec3mul,v0,v1);},
div:func(v0,v1){return call(vec3div,v0,v1);},
neg:func(v0){return call(vec3neg,v0);},
norm:func(v0){return call(vec3norm,v0);},
len:func(v0){return call(vec3len,v0);},
rx:func(v0,angle){return call(rotate_x,v0,angle);},
ry:func(v0,angle){return call(rotate_y,v0,angle);},
rz:func(v0,angle){return call(rotate_z,v0,angle);},
dot:func(v0,v1){return call(vec3dot,v0,v1);}
}
};
}();