UNPKG

@visactor/vrender-core

Version:
75 lines (67 loc) 2.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.mat4Allocate = exports.matrixAllocate = exports.DefaultMat4Allocate = exports.DefaultMatrixAllocate = exports.createMat4 = exports.Mat4Allocate = exports.MatrixAllocate = void 0; const vutils_1 = require("@visactor/vutils"), matrix_1 = require("../common/matrix"); function createMat4() { return [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]; } exports.MatrixAllocate = Symbol.for("MatrixAllocate"), exports.Mat4Allocate = Symbol.for("Mat4Allocate"), exports.createMat4 = createMat4; class DefaultMatrixAllocate { constructor() { this.pools = []; } allocate(a, b, c, d, e, f) { if (!this.pools.length) return new vutils_1.Matrix(a, b, c, d, e, f); const m = this.pools.pop(); return m.a = a, m.b = b, m.c = c, m.d = d, m.e = e, m.f = f, m; } allocateByObj(matrix) { if (!this.pools.length) return new vutils_1.Matrix(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f); const m = this.pools.pop(); return m.a = matrix.a, m.b = matrix.b, m.c = matrix.c, m.d = matrix.d, m.e = matrix.e, m.f = matrix.f, m; } free(d) { this.pools.push(d); } get length() { return this.pools.length; } release(...params) { this.pools = []; } } exports.DefaultMatrixAllocate = DefaultMatrixAllocate; class DefaultMat4Allocate { constructor() { this.pools = []; } static identity(out) { return (0, matrix_1.identityMat4)(out); } allocate() { if (!this.pools.length) return createMat4(); const m = this.pools.pop(); return DefaultMat4Allocate.identity(m), m; } allocateByObj(d) { let m; m = this.pools.length ? this.pools.pop() : createMat4(); for (let i = 0; i < m.length; i++) m[i] = d[i]; return m; } free(m) { m && this.pools.push(m); } get length() { return this.pools.length; } release(...params) { this.pools = []; } } exports.DefaultMat4Allocate = DefaultMat4Allocate, exports.matrixAllocate = new DefaultMatrixAllocate, exports.mat4Allocate = new DefaultMat4Allocate; //# sourceMappingURL=matrix-allocate.js.map