forked from xxq250/Nasal-Interpreter
58 lines
2.4 KiB
Plaintext
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);}
|
|
}
|
|
};
|
|
}(); |