@visactor/vrender-core
Version:
## Description
75 lines (67 loc) • 2.3 kB
JavaScript
;
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