munum 0.2.0

Micro 3D Math Library
Documentation
package munum:core;

world root {
    type parray = u32;
    type pvec2 = u32;
    type pvec3 = u32;
    type pvec4 = u32;
    type pquat = u32;
    type pmat2 = u32;
    type pmat3 = u32;
    type pmat4 = u32;

    import libmath: interface {
        acos: func(theta: f64) -> f64;
        cos: func(theta: f64) -> f64;
        sin: func(theta: f64) -> f64;
        sqrt: func(x: f64) -> f64;
        tan: func(theta: f64) -> f64;
    }

    export create: func(size: u32) -> parray;
    export free: func(src: parray, size: u32);

    export vec2add: func(out: pvec2, a: pvec2, b: pvec2) -> pvec2;
    export vec2sub: func(out: pvec2, a: pvec2, b: pvec2) -> pvec2;
    export vec2mul: func(out: pvec2, m2: pmat2, a: pvec2) -> pvec2;
    export vec2scale: func(out: pvec2, a: pvec2, s: f64) -> pvec2;
    export vec2norm: func(out: pvec2, a: pvec2) -> bool;
    export vec2dot: func(a: pvec2, b: pvec2) -> f64;
    export vec2lerp: func(out: pvec2, a: pvec2, b: pvec2, t: f64) -> pvec2;
    export mat3vec2mul: func(out: pvec2, m3: pmat3, a: pvec2) -> pvec2;

    export vec3add: func(out: pvec3, a: pvec3, b: pvec3) -> pvec3;
    export vec3sub: func(out: pvec3, a: pvec3, b: pvec3) -> pvec3;
    export vec3mul: func(out: pvec3, m3: pmat3, a: pvec3) -> pvec3;
    export vec3scale: func(out: pvec3, a: pvec3, s: f64) -> pvec3;
    export vec3norm: func(out: pvec3, a: pvec3) -> bool;
    export vec3dot: func(a: pvec3, b: pvec3) -> f64;
    export vec3lerp: func(out: pvec3, a: pvec3, b: pvec3, t: f64) -> pvec3;
    export vec3cross: func(out: pvec3, a: pvec3, b: pvec3) -> pvec3;
    export mat4vec3mul: func(out: pvec3, m4: pmat4, a: pvec3) -> pvec3;

    export vec4add: func(out: pvec4, a: pvec4, b: pvec4) -> pvec4;
    export vec4sub: func(out: pvec4, a: pvec4, b: pvec4) -> pvec4;
    export vec4mul: func(out: pvec4, m4: pmat4, a: pvec4) -> pvec4;
    export vec4scale: func(out: pvec4, a: pvec4, s: f64) -> pvec4;
    export vec4norm: func(out: pvec4, a: pvec4) -> bool;
    export vec4dot: func(a: pvec4, b: pvec4) -> f64;
    export vec4lerp: func(out: pvec4, a: pvec4, b: pvec4, t: f64) -> pvec4;

    export quatfromunitvecs: func(fromvec: pvec3, tovec: pvec3) -> pquat;
    export quatfromaxisangle: func(axis: pvec3, angle: f64) -> pquat;
    export quatfromanglex: func(angle: f64) -> pquat;
    export quatfromangley: func(angle: f64) -> pquat;
    export quatfromanglez: func(angle: f64) -> pquat;
    export quatidentity: func() -> pquat;
    export quatmul: func(out: pquat, a: pquat, b: pquat) -> pquat;
    export quatvec3rotate: func(out: pvec3, q: pquat, v: pvec3) -> pvec3;
    export quatnorm: func(out: pquat, a: pquat) -> bool;
    export quatdot: func(a: pquat, b: pquat) -> f64;
    export quatinvert: func(out: pquat, a: pquat) -> bool;
    export quatlerp: func(out: pquat, a: pquat, b: pquat, t: f64) -> pquat;
    export quatslerp: func(out: pquat, a: pquat, b: pquat, t: f64) -> pquat;

    export mat2frommat3: func(src: pmat3) -> pmat2;
    export mat2identity: func() -> pmat2;
    export mat2add: func(out: pmat2, a: pmat2, b: pmat2) -> pmat2;
    export mat2sub: func(out: pmat2, a: pmat2, b: pmat2) -> pmat2;
    export mat2mul: func(out: pmat2, m2: pmat2, a: pmat2) -> pmat2;
    export mat2scale: func(out: pmat2, a: pmat2, s: f64) -> pmat2;
    export mat2transpose: func(out: pmat2, a: pmat2) -> pmat2;
    export mat2invert: func(out: pmat2, a: pmat2) -> bool;
    export mat2det: func(a: pmat2) -> f64;

    export normalmat3: func(out: pmat3, a: pmat3) -> bool;
    export mat3frommat2: func(src: pmat2) -> pmat3;
    export mat3frommat4: func(src: pmat4) -> pmat3;
    export mat3identity: func() -> pmat3;
    export mat3add: func(out: pmat3, a: pmat3, b: pmat3) -> pmat3;
    export mat3sub: func(out: pmat3, a: pmat3, b: pmat3) -> pmat3;
    export mat3mul: func(out: pmat3, m2: pmat3, a: pmat3) -> pmat3;
    export mat3scale: func(out: pmat3, a: pmat3, s: f64) -> pmat3;
    export mat3transpose: func(out: pmat3, a: pmat3) -> pmat3;
    export mat3invert: func(out: pmat3, a: pmat3) -> bool;
    export mat3det: func(a: pmat3) -> f64;

    export mat4frommat3: func(src: pmat3) -> pmat4;
    export mat4identity: func() -> pmat4;
    export mat4add: func(out: pmat4, a: pmat4, b: pmat4) -> pmat4;
    export mat4sub: func(out: pmat4, a: pmat4, b: pmat4) -> pmat4;
    export mat4mul: func(out: pmat4, m2: pmat4, a: pmat4) -> pmat4;
    export mat4scale: func(out: pmat4, a: pmat4, s: f64) -> pmat4;
    export mat4transpose: func(out: pmat4, a: pmat4) -> pmat4;
    export mat4invert: func(out: pmat4, a: pmat4) -> bool;
    export mat4det: func(a: pmat4) -> f64;

    export translation2d: func(out: pmat3, v: pvec2) -> pmat3;
    export scaling2d: func(out: pmat3, v: pvec2) -> pmat3;
    export rotation2d: func(out: pmat3, theta: f64) -> pmat3;
    export transformation2d: func(out: pmat3, translate: pvec2, rotate: f64, scale: pvec2) -> pmat3;

    export translation: func(out: pmat4, v: pvec3) -> pmat4;
    export scaling: func(out: pmat4, v: pvec3) -> pmat4;
    export rotation: func(out: pmat4, q: pquat) -> pmat4;
    export translationof: func(out: pvec3, m: pmat4) -> pvec3;
    export scalingof: func(out: pvec3, m: pmat4) -> pvec3;
    export rotationof: func(out: pquat, m: pmat4) -> pquat;

    export transformation: func(out: pmat4, translate: pvec3, rotate: pquat, scale: pvec3) -> pmat4;
    export inverttrs: func(out: pmat4, trs: pmat4) -> bool;

    export ortho: func(out: pmat4, left: f64, right: f64, bottom: f64, top: f64, znear: f64, zfar: f64) -> pmat4;
    export perspective: func(out: pmat4, aspect: f64, yfov: f64, znear: f64, zfar: f64) -> pmat4;
    export perspectiveviewport: func(out: pmat4, left: f64, right: f64, bottom: f64, top: f64, znear: f64, zfar: f64) -> pmat4;

    export targetto: func(out: pmat4, eye: pvec3, center: pvec3, up: pvec3) -> pmat4;
    export lookat: func(out: pmat4, eye: pvec3, center: pvec3, up: pvec3) -> pmat4;
    export lookatdir: func(out: pvec3, pitch: f64, yaw: f64) -> pvec3;
}