{"version":3,"file":"Matrix3d.mjs","sources":["../../src/proj3d/Matrix3d.ts"],"sourcesContent":["/* eslint-disable no-mixed-operators,max-statements-per-line */\r\n// according to https://jsperf.com/obj-vs-array-view-access/1 , Float64Array is the best here\r\n\r\nimport { IPointData, Matrix, Point } from '@pixi/math';\r\nimport { Matrix2d } from '../proj2d';\r\nimport { Point3d } from './Point3d';\r\nimport { AFFINE } from '../base';\r\n\r\nconst mat4id = [1, 0, 0, 0,\r\n    0, 1, 0, 0,\r\n    0, 0, 1, 0,\r\n    0, 0, 0, 1];\r\n\r\nexport class Matrix3d\r\n{\r\n    /**\r\n     * A default (identity) matrix\r\n     *\r\n     * @static\r\n     * @const\r\n     */\r\n    static readonly IDENTITY = new Matrix3d();\r\n\r\n    /**\r\n     * A temp matrix\r\n     *\r\n     * @static\r\n     * @const\r\n     */\r\n    static readonly TEMP_MATRIX = new Matrix3d();\r\n\r\n    /**\r\n     * mat4 implementation through array of 16 elements\r\n     */\r\n    mat4: Float64Array;\r\n\r\n    floatArray: Float32Array = null;\r\n\r\n    _dirtyId = 0;\r\n    _updateId = -1;\r\n    _mat4inv: Float64Array = null;\r\n    cacheInverse = false;\r\n\r\n    constructor(backingArray?: ArrayLike<number>)\r\n    {\r\n        this.mat4 = new Float64Array(backingArray || mat4id);\r\n    }\r\n\r\n    get a(): number\r\n    {\r\n        return this.mat4[0] / this.mat4[15];\r\n    }\r\n\r\n    set a(value: number)\r\n    {\r\n        this.mat4[0] = value * this.mat4[15];\r\n    }\r\n\r\n    get b(): number\r\n    {\r\n        return this.mat4[1] / this.mat4[15];\r\n    }\r\n\r\n    set b(value: number)\r\n    {\r\n        this.mat4[1] = value * this.mat4[15];\r\n    }\r\n\r\n    get c(): number\r\n    {\r\n        return this.mat4[4] / this.mat4[15];\r\n    }\r\n\r\n    set c(value: number)\r\n    {\r\n        this.mat4[4] = value * this.mat4[15];\r\n    }\r\n\r\n    get d(): number\r\n    {\r\n        return this.mat4[5] / this.mat4[15];\r\n    }\r\n\r\n    set d(value: number)\r\n    {\r\n        this.mat4[5] = value * this.mat4[15];\r\n    }\r\n\r\n    get tx(): number\r\n    {\r\n        return this.mat4[12] / this.mat4[15];\r\n    }\r\n\r\n    set tx(value: number)\r\n    {\r\n        this.mat4[12] = value * this.mat4[15];\r\n    }\r\n\r\n    get ty(): number\r\n    {\r\n        return this.mat4[13] / this.mat4[15];\r\n    }\r\n\r\n    set ty(value: number)\r\n    {\r\n        this.mat4[13] = value * this.mat4[15];\r\n    }\r\n\r\n    set(a: number, b: number, c: number, d: number, tx: number, ty: number): this\r\n    {\r\n        const mat4 = this.mat4;\r\n\r\n        mat4[0] = a;\r\n        mat4[1] = b;\r\n        mat4[2] = 0;\r\n        mat4[3] = 0;\r\n        mat4[4] = c;\r\n        mat4[5] = d;\r\n        mat4[6] = 0;\r\n        mat4[7] = 0;\r\n        mat4[8] = 0;\r\n        mat4[9] = 0;\r\n        mat4[10] = 1;\r\n        mat4[11] = 0;\r\n        mat4[12] = tx;\r\n        mat4[13] = ty;\r\n        mat4[14] = 0;\r\n        mat4[15] = 1;\r\n\r\n        return this;\r\n    }\r\n\r\n    toArray(transpose?: boolean, out?: Float32Array): Float32Array\r\n    {\r\n        if (!this.floatArray)\r\n        {\r\n            this.floatArray = new Float32Array(9);\r\n        }\r\n\r\n        const array = out || this.floatArray;\r\n        const mat3 = this.mat4;\r\n\r\n        if (transpose)\r\n        {\r\n            array[0] = mat3[0];\r\n            array[1] = mat3[1];\r\n            array[2] = mat3[3];\r\n            array[3] = mat3[4];\r\n            array[4] = mat3[5];\r\n            array[5] = mat3[7];\r\n            array[6] = mat3[12];\r\n            array[7] = mat3[13];\r\n            array[8] = mat3[15];\r\n        }\r\n        else\r\n        {\r\n            // this branch is NEVER USED in pixi\r\n            array[0] = mat3[0];\r\n            array[1] = mat3[4];\r\n            array[2] = mat3[12];\r\n            array[3] = mat3[2];\r\n            array[4] = mat3[6];\r\n            array[5] = mat3[13];\r\n            array[6] = mat3[3];\r\n            array[7] = mat3[7];\r\n            array[8] = mat3[15];\r\n        }\r\n\r\n        return array;\r\n    }\r\n\r\n    setToTranslation(tx: number, ty: number, tz: number): void\r\n    {\r\n        const mat4 = this.mat4;\r\n\r\n        mat4[0] = 1;\r\n        mat4[1] = 0;\r\n        mat4[2] = 0;\r\n        mat4[3] = 0;\r\n\r\n        mat4[4] = 0;\r\n        mat4[5] = 1;\r\n        mat4[6] = 0;\r\n        mat4[7] = 0;\r\n\r\n        mat4[8] = 0;\r\n        mat4[9] = 0;\r\n        mat4[10] = 1;\r\n        mat4[11] = 0;\r\n\r\n        mat4[12] = tx;\r\n        mat4[13] = ty;\r\n        mat4[14] = tz;\r\n        mat4[15] = 1;\r\n    }\r\n\r\n    // eslint-disable-next-line max-len\r\n    setToRotationTranslationScale(quat: Float64Array, tx: number, ty: number, tz: number, sx: number, sy: number, sz: number): Float64Array\r\n    {\r\n        const out = this.mat4;\r\n\r\n        const x = quat[0]; const y = quat[1]; const z = quat[2]; const\r\n            w = quat[3];\r\n        const x2 = x + x;\r\n        const y2 = y + y;\r\n        const z2 = z + z;\r\n\r\n        const xx = x * x2;\r\n        const xy = x * y2;\r\n        const xz = x * z2;\r\n        const yy = y * y2;\r\n        const yz = y * z2;\r\n        const zz = z * z2;\r\n        const wx = w * x2;\r\n        const wy = w * y2;\r\n        const wz = w * z2;\r\n\r\n        out[0] = (1 - (yy + zz)) * sx;\r\n        out[1] = (xy + wz) * sx;\r\n        out[2] = (xz - wy) * sx;\r\n        out[3] = 0;\r\n        out[4] = (xy - wz) * sy;\r\n        out[5] = (1 - (xx + zz)) * sy;\r\n        out[6] = (yz + wx) * sy;\r\n        out[7] = 0;\r\n        out[8] = (xz + wy) * sz;\r\n        out[9] = (yz - wx) * sz;\r\n        out[10] = (1 - (xx + yy)) * sz;\r\n        out[11] = 0;\r\n        out[12] = tx;\r\n        out[13] = ty;\r\n        out[14] = tz;\r\n        out[15] = 1;\r\n\r\n        return out;\r\n    }\r\n\r\n    apply(pos: IPointData, newPos: IPointData): IPointData\r\n    {\r\n        newPos = newPos || new Point3d();\r\n\r\n        const mat4 = this.mat4;\r\n        const x = pos.x;\r\n        const y = pos.y;\r\n        // TODO: pixi 6.1.0 global mixin\r\n        const z = (pos as any).z || 0;\r\n\r\n        // TODO: apply for 2d point\r\n\r\n        const w = 1.0 / (mat4[3] * x + mat4[7] * y + mat4[11] * z + mat4[15]);\r\n\r\n        newPos.x = w * (mat4[0] * x + mat4[4] * y + mat4[8] * z + mat4[12]);\r\n        newPos.y = w * (mat4[1] * x + mat4[5] * y + mat4[9] * z + mat4[13]);\r\n        // TODO: pixi 6.1.0 global mixin\r\n        (newPos as any).z = w * (mat4[2] * x + mat4[6] * y + mat4[10] * z + mat4[14]);\r\n\r\n        return newPos;\r\n    }\r\n\r\n    translate(tx: number, ty: number, tz: number): this\r\n    {\r\n        const a = this.mat4;\r\n\r\n        a[12] = a[0] * tx + a[4] * ty + a[8] * tz + a[12];\r\n        a[13] = a[1] * tx + a[5] * ty + a[9] * tz + a[13];\r\n        a[14] = a[2] * tx + a[6] * ty + a[10] * tz + a[14];\r\n        a[15] = a[3] * tx + a[7] * ty + a[11] * tz + a[15];\r\n\r\n        return this;\r\n    }\r\n\r\n    scale(x: number, y: number, z?: number): this\r\n    {\r\n        const mat4 = this.mat4;\r\n\r\n        mat4[0] *= x;\r\n        mat4[1] *= x;\r\n        mat4[2] *= x;\r\n        mat4[3] *= x;\r\n\r\n        mat4[4] *= y;\r\n        mat4[5] *= y;\r\n        mat4[6] *= y;\r\n        mat4[7] *= y;\r\n\r\n        if (z !== undefined)\r\n        {\r\n            mat4[8] *= z;\r\n            mat4[9] *= z;\r\n            mat4[10] *= z;\r\n            mat4[11] *= z;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    scaleAndTranslate(scaleX: number, scaleY: number, scaleZ: number, tx: number, ty: number, tz: number): void\r\n    {\r\n        const mat4 = this.mat4;\r\n\r\n        mat4[0] = scaleX * mat4[0] + tx * mat4[3];\r\n        mat4[1] = scaleY * mat4[1] + ty * mat4[3];\r\n        mat4[2] = scaleZ * mat4[2] + tz * mat4[3];\r\n\r\n        mat4[4] = scaleX * mat4[4] + tx * mat4[7];\r\n        mat4[5] = scaleY * mat4[5] + ty * mat4[7];\r\n        mat4[6] = scaleZ * mat4[6] + tz * mat4[7];\r\n\r\n        mat4[8] = scaleX * mat4[8] + tx * mat4[11];\r\n        mat4[9] = scaleY * mat4[9] + ty * mat4[11];\r\n        mat4[10] = scaleZ * mat4[10] + tz * mat4[11];\r\n\r\n        mat4[12] = scaleX * mat4[12] + tx * mat4[15];\r\n        mat4[13] = scaleY * mat4[13] + ty * mat4[15];\r\n        mat4[14] = scaleZ * mat4[14] + tz * mat4[15];\r\n    }\r\n\r\n    // TODO: remove props\r\n    applyInverse<P extends IPointData = Point>(pos: IPointData, newPos?: P): P\r\n    {\r\n        newPos = (newPos || new Point3d()) as any;\r\n        if (!this._mat4inv)\r\n        {\r\n            this._mat4inv = new Float64Array(16);\r\n        }\r\n\r\n        const mat4 = this._mat4inv;\r\n        const a = this.mat4;\r\n        const x = pos.x;\r\n        const y = pos.y;\r\n        // TODO: pixi 6.1.0 global mixin\r\n        let z = (pos as any).z || 0;\r\n\r\n        if (!this.cacheInverse || this._updateId !== this._dirtyId)\r\n        {\r\n            this._updateId = this._dirtyId;\r\n            Matrix3d.glMatrixMat4Invert(mat4, a);\r\n        }\r\n\r\n        const w1 = 1.0 / (mat4[3] * x + mat4[7] * y + mat4[11] * z + mat4[15]);\r\n        const x1 = w1 * (mat4[0] * x + mat4[4] * y + mat4[8] * z + mat4[12]);\r\n        const y1 = w1 * (mat4[1] * x + mat4[5] * y + mat4[9] * z + mat4[13]);\r\n        const z1 = w1 * (mat4[2] * x + mat4[6] * y + mat4[10] * z + mat4[14]);\r\n\r\n        z += 1.0;\r\n\r\n        const w2 = 1.0 / (mat4[3] * x + mat4[7] * y + mat4[11] * z + mat4[15]);\r\n        const x2 = w2 * (mat4[0] * x + mat4[4] * y + mat4[8] * z + mat4[12]);\r\n        const y2 = w2 * (mat4[1] * x + mat4[5] * y + mat4[9] * z + mat4[13]);\r\n        const z2 = w2 * (mat4[2] * x + mat4[6] * y + mat4[10] * z + mat4[14]);\r\n\r\n        if (Math.abs(z1 - z2) < 1e-10)\r\n        {\r\n            (newPos as any).set(NaN, NaN, 0);\r\n        }\r\n\r\n        const alpha = (0 - z1) / (z2 - z1);\r\n\r\n        (newPos as any).set((x2 - x1) * alpha + x1, (y2 - y1) * alpha + y1, 0.0);\r\n\r\n        return newPos;\r\n    }\r\n\r\n    invert(): Matrix3d\r\n    {\r\n        Matrix3d.glMatrixMat4Invert(this.mat4, this.mat4);\r\n\r\n        return this;\r\n    }\r\n\r\n    invertCopyTo(matrix: Matrix3d): void\r\n    {\r\n        if (!this._mat4inv)\r\n        {\r\n            this._mat4inv = new Float64Array(16);\r\n        }\r\n\r\n        const mat4 = this._mat4inv;\r\n        const a = this.mat4;\r\n\r\n        if (!this.cacheInverse || this._updateId !== this._dirtyId)\r\n        {\r\n            this._updateId = this._dirtyId;\r\n            Matrix3d.glMatrixMat4Invert(mat4, a);\r\n        }\r\n\r\n        matrix.mat4.set(mat4);\r\n    }\r\n\r\n    identity(): Matrix3d\r\n    {\r\n        const mat3 = this.mat4;\r\n\r\n        mat3[0] = 1;\r\n        mat3[1] = 0;\r\n        mat3[2] = 0;\r\n        mat3[3] = 0;\r\n\r\n        mat3[4] = 0;\r\n        mat3[5] = 1;\r\n        mat3[6] = 0;\r\n        mat3[7] = 0;\r\n\r\n        mat3[8] = 0;\r\n        mat3[9] = 0;\r\n        mat3[10] = 1;\r\n        mat3[11] = 0;\r\n\r\n        mat3[12] = 0;\r\n        mat3[13] = 0;\r\n        mat3[14] = 0;\r\n        mat3[15] = 1;\r\n\r\n        return this;\r\n    }\r\n\r\n    clone(): Matrix3d\r\n    {\r\n        return new Matrix3d(this.mat4);\r\n    }\r\n\r\n    copyTo3d(matrix: Matrix3d): Matrix3d\r\n    {\r\n        const mat3 = this.mat4;\r\n        const ar2 = matrix.mat4;\r\n\r\n        ar2[0] = mat3[0];\r\n        ar2[1] = mat3[1];\r\n        ar2[2] = mat3[2];\r\n        ar2[3] = mat3[3];\r\n        ar2[4] = mat3[4];\r\n        ar2[5] = mat3[5];\r\n        ar2[6] = mat3[6];\r\n        ar2[7] = mat3[7];\r\n        ar2[8] = mat3[8];\r\n\r\n        return matrix;\r\n    }\r\n\r\n    copyTo2d(matrix: Matrix2d): Matrix2d\r\n    {\r\n        const mat3 = this.mat4;\r\n        const ar2 = matrix.mat3;\r\n\r\n        ar2[0] = mat3[0];\r\n        ar2[1] = mat3[1];\r\n        ar2[2] = mat3[3];\r\n        ar2[3] = mat3[4];\r\n        ar2[4] = mat3[5];\r\n        ar2[5] = mat3[7];\r\n        ar2[6] = mat3[12];\r\n        ar2[7] = mat3[13];\r\n        ar2[8] = mat3[15];\r\n\r\n        return matrix;\r\n    }\r\n\r\n    copyTo2dOr3d<P extends Matrix2d | Matrix3d>(matrix: P): P\r\n    {\r\n        if (matrix instanceof Matrix2d)\r\n        {\r\n            return this.copyTo2d(matrix) as any;\r\n        }\r\n\r\n        return this.copyTo3d(matrix as any) as any;\r\n    }\r\n\r\n    /**\r\n     * legacy method, change the values of given pixi matrix\r\n     * @param matrix\r\n     * @param affine\r\n     * @param preserveOrientation\r\n     * @return matrix\r\n     */\r\n    copyTo(matrix: Matrix, affine?: AFFINE, preserveOrientation?: boolean): Matrix\r\n    {\r\n        const mat3 = this.mat4;\r\n        const d = 1.0 / mat3[15];\r\n        const tx = mat3[12] * d; const\r\n            ty = mat3[13] * d;\r\n\r\n        matrix.a = (mat3[0] - mat3[3] * tx) * d;\r\n        matrix.b = (mat3[1] - mat3[3] * ty) * d;\r\n        matrix.c = (mat3[4] - mat3[7] * tx) * d;\r\n        matrix.d = (mat3[5] - mat3[7] * ty) * d;\r\n        matrix.tx = tx;\r\n        matrix.ty = ty;\r\n\r\n        if (affine >= 2)\r\n        {\r\n            let D = matrix.a * matrix.d - matrix.b * matrix.c;\r\n\r\n            if (!preserveOrientation)\r\n            {\r\n                D = Math.abs(D);\r\n            }\r\n            if (affine === AFFINE.POINT)\r\n            {\r\n                if (D > 0)\r\n                {\r\n                    D = 1;\r\n                }\r\n                else D = -1;\r\n                matrix.a = D;\r\n                matrix.b = 0;\r\n                matrix.c = 0;\r\n                matrix.d = D;\r\n            }\r\n            else if (affine === AFFINE.AXIS_X)\r\n            {\r\n                D /= Math.sqrt(matrix.b * matrix.b + matrix.d * matrix.d);\r\n                matrix.c = 0;\r\n                matrix.d = D;\r\n            }\r\n            else if (affine === AFFINE.AXIS_Y)\r\n            {\r\n                D /= Math.sqrt(matrix.a * matrix.a + matrix.c * matrix.c);\r\n                matrix.a = D;\r\n                matrix.c = 0;\r\n            }\r\n        }\r\n\r\n        return matrix;\r\n    }\r\n\r\n    /**\r\n     * legacy method, change the values of given pixi matrix\r\n     * @param matrix\r\n     * @return\r\n     */\r\n    copyFrom(matrix: Matrix): this\r\n    {\r\n        const mat3 = this.mat4;\r\n\r\n        mat3[0] = matrix.a;\r\n        mat3[1] = matrix.b;\r\n        mat3[2] = 0;\r\n        mat3[3] = 0;\r\n\r\n        mat3[4] = matrix.c;\r\n        mat3[5] = matrix.d;\r\n        mat3[6] = 0;\r\n        mat3[7] = 0;\r\n\r\n        mat3[8] = 0;\r\n        mat3[9] = 0;\r\n        mat3[10] = 1;\r\n        mat3[11] = 0;\r\n\r\n        mat3[12] = matrix.tx;\r\n        mat3[13] = matrix.ty;\r\n        mat3[14] = 0;\r\n        mat3[15] = 1;\r\n\r\n        this._dirtyId++;\r\n\r\n        return this;\r\n    }\r\n\r\n    setToMultLegacy(pt: Matrix, lt: Matrix3d): this\r\n    {\r\n        const out = this.mat4;\r\n        const b = lt.mat4;\r\n\r\n        const a00 = pt.a; const a01 = pt.b;\r\n        const a10 = pt.c; const a11 = pt.d;\r\n        const a30 = pt.tx; const\r\n            a31 = pt.ty;\r\n\r\n        let b0 = b[0]; let b1 = b[1]; let b2 = b[2]; let\r\n            b3 = b[3];\r\n\r\n        out[0] = b0 * a00 + b1 * a10 + b3 * a30;\r\n        out[1] = b0 * a01 + b1 * a11 + b3 * a31;\r\n        out[2] = b2;\r\n        out[3] = b3;\r\n\r\n        b0 = b[4];\r\n        b1 = b[5];\r\n        b2 = b[6];\r\n        b3 = b[7];\r\n        out[4] = b0 * a00 + b1 * a10 + b3 * a30;\r\n        out[5] = b0 * a01 + b1 * a11 + b3 * a31;\r\n        out[6] = b2;\r\n        out[7] = b3;\r\n\r\n        b0 = b[8];\r\n        b1 = b[9];\r\n        b2 = b[10];\r\n        b3 = b[11];\r\n        out[8] = b0 * a00 + b1 * a10 + b3 * a30;\r\n        out[9] = b0 * a01 + b1 * a11 + b3 * a31;\r\n        out[10] = b2;\r\n        out[11] = b3;\r\n\r\n        b0 = b[12];\r\n        b1 = b[13];\r\n        b2 = b[14];\r\n        b3 = b[15];\r\n        out[12] = b0 * a00 + b1 * a10 + b3 * a30;\r\n        out[13] = b0 * a01 + b1 * a11 + b3 * a31;\r\n        out[14] = b2;\r\n        out[15] = b3;\r\n\r\n        this._dirtyId++;\r\n\r\n        return this;\r\n    }\r\n\r\n    setToMultLegacy2(pt: Matrix3d, lt: Matrix): this\r\n    {\r\n        const out = this.mat4;\r\n        const a = pt.mat4;\r\n\r\n        const a00 = a[0]; const a01 = a[1]; const a02 = a[2]; const\r\n            a03 = a[3];\r\n        const a10 = a[4]; const a11 = a[5]; const a12 = a[6]; const\r\n            a13 = a[7];\r\n\r\n        const b00 = lt.a; const b01 = lt.b;\r\n        const b10 = lt.c; const b11 = lt.d;\r\n        const b30 = lt.tx; const\r\n            b31 = lt.ty;\r\n\r\n        out[0] = b00 * a00 + b01 * a10;\r\n        out[1] = b00 * a01 + b01 * a11;\r\n        out[2] = b00 * a02 + b01 * a12;\r\n        out[3] = b00 * a03 + b01 * a13;\r\n\r\n        out[4] = b10 * a00 + b11 * a10;\r\n        out[5] = b10 * a01 + b11 * a11;\r\n        out[6] = b10 * a02 + b11 * a12;\r\n        out[7] = b10 * a03 + b11 * a13;\r\n\r\n        out[8] = a[8];\r\n        out[9] = a[9];\r\n        out[10] = a[10];\r\n        out[11] = a[11];\r\n\r\n        out[12] = b30 * a00 + b31 * a10 + a[12];\r\n        out[13] = b30 * a01 + b31 * a11 + a[13];\r\n        out[14] = b30 * a02 + b31 * a12 + a[14];\r\n        out[15] = b30 * a03 + b31 * a13 + a[15];\r\n\r\n        this._dirtyId++;\r\n\r\n        return this;\r\n    }\r\n\r\n    // that's transform multiplication we use\r\n    setToMult(pt: Matrix3d, lt: Matrix3d): this\r\n    {\r\n        Matrix3d.glMatrixMat4Multiply(this.mat4, pt.mat4, lt.mat4);\r\n\r\n        this._dirtyId++;\r\n\r\n        return this;\r\n    }\r\n\r\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\n    prepend(lt: any): void\r\n    {\r\n        if (lt.mat4)\r\n        {\r\n            this.setToMult(lt, this);\r\n        }\r\n        else\r\n        {\r\n            this.setToMultLegacy(lt, this);\r\n        }\r\n    }\r\n\r\n    static glMatrixMat4Invert(out: Float64Array, a: Float64Array): Float64Array\r\n    {\r\n        const a00 = a[0]; const a01 = a[1]; const a02 = a[2]; const\r\n            a03 = a[3];\r\n        const a10 = a[4]; const a11 = a[5]; const a12 = a[6]; const\r\n            a13 = a[7];\r\n        const a20 = a[8]; const a21 = a[9]; const a22 = a[10]; const\r\n            a23 = a[11];\r\n        const a30 = a[12]; const a31 = a[13]; const a32 = a[14]; const\r\n            a33 = a[15];\r\n\r\n        const b00 = a00 * a11 - a01 * a10;\r\n        const b01 = a00 * a12 - a02 * a10;\r\n        const b02 = a00 * a13 - a03 * a10;\r\n        const b03 = a01 * a12 - a02 * a11;\r\n        const b04 = a01 * a13 - a03 * a11;\r\n        const b05 = a02 * a13 - a03 * a12;\r\n        const b06 = a20 * a31 - a21 * a30;\r\n        const b07 = a20 * a32 - a22 * a30;\r\n        const b08 = a20 * a33 - a23 * a30;\r\n        const b09 = a21 * a32 - a22 * a31;\r\n        const b10 = a21 * a33 - a23 * a31;\r\n        const b11 = a22 * a33 - a23 * a32;\r\n\r\n        // Calculate the determinant\r\n        let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\r\n\r\n        if (!det)\r\n        {\r\n            return null;\r\n        }\r\n        det = 1.0 / det;\r\n\r\n        out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\r\n        out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\r\n        out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\r\n        out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\r\n        out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\r\n        out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\r\n        out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\r\n        out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\r\n        out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\r\n        out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\r\n        out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\r\n        out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\r\n        out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\r\n        out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\r\n        out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\r\n        out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\r\n\r\n        return out;\r\n    }\r\n\r\n    static glMatrixMat4Multiply(out: Float64Array, a: Float64Array, b: Float64Array): Float64Array\r\n    {\r\n        const a00 = a[0]; const a01 = a[1]; const a02 = a[2]; const\r\n            a03 = a[3];\r\n        const a10 = a[4]; const a11 = a[5]; const a12 = a[6]; const\r\n            a13 = a[7];\r\n        const a20 = a[8]; const a21 = a[9]; const a22 = a[10]; const\r\n            a23 = a[11];\r\n        const a30 = a[12]; const a31 = a[13]; const a32 = a[14]; const\r\n            a33 = a[15];\r\n\r\n        // Cache only the current line of the second matrix\r\n        let b0 = b[0]; let b1 = b[1]; let b2 = b[2]; let\r\n            b3 = b[3];\r\n\r\n        out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n        out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n        out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n        out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n        b0 = b[4];\r\n        b1 = b[5];\r\n        b2 = b[6];\r\n        b3 = b[7];\r\n        out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n        out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n        out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n        out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n        b0 = b[8];\r\n        b1 = b[9];\r\n        b2 = b[10];\r\n        b3 = b[11];\r\n        out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n        out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n        out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n        out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n        b0 = b[12];\r\n        b1 = b[13];\r\n        b2 = b[14];\r\n        b3 = b[15];\r\n        out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\r\n        out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\r\n        out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\r\n        out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\r\n\r\n        return out;\r\n    }\r\n}\r\n"],"names":[],"mappings":"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"}