gl-cross
v1.2.0
Published
High-performance 3D cross product library for JavaScript/TypeScript (ESM, CJS, IIFE)
Downloads
10
Maintainers
Readme
gl-cross
A high-performance 3D cross product library for JavaScript/TypeScript, supporting ESM, CommonJS, and IIFE formats. Optimized for both regular arrays and Float64Arrayand Float32Array with zero memory allocation in critical paths.
Features
- Dual APIs:
cross(for regular arrays) andcross64(forFloat64Array)andcross32(forFloat32Array). - Zero Allocation: Reuses output vectors to avoid garbage collection.
- Multi-Format Support: ESM, CommonJS, and IIFE (global variable:
crossproduct). - Type Safety: Strict TypeScript types (included in distribution).
Installation
via npm
npm install gl-crossvia CDN (IIFE)
<script src="https://unpkg.com/gl-cross@latest/dist/index.global.js"></script>
<!-- Exposes global variable: crossproduct -->Usage
1. ESM (ES Modules)
// Import both functions
import { cross, cross64,cross32 } from 'gl-cross';
// Regular array usage
const outArray: [number, number, number] = [0, 0, 0];
cross(outArray, [1, 2, 3], [4, 5, 6]);
console.log(outArray); // [-3, 6, -3]
// Float64Array usage (high performance)
const out64 = new Float64Array(3);
cross64(out64, new Float64Array([1, 2, 3]), new Float64Array([4, 5, 6]));
console.log(Array.from(out64)); // [-3, 6, -3]
// Float32Array usage (high performance)
const out32 = new Float32Array(3);
cross64(out64, new Float32Array([1, 2, 3]), new Float32Array([4, 5, 6]));
console.log(Array.from(out32)); // [-3, 6, -3]2. CommonJS
const { cross, cross64 } = require('gl-cross');
// Regular array example
const out = [0, 0, 0];
cross(out, [1, 0, 0], [0, 1, 0]);
console.log(out); // [0, 0, 1]3. IIFE (Global Variable)
<script src="https://unpkg.com/gl-cross@latest/dist/index.global.js"></script>
<script>
// Use via global variable "glcross"
const out = [0, 0, 0];
glcross.cross(out, [3, 4, 5], [6, 7, 8]);
console.log(out); // [4*8 - 5*7, 5*6 - 3*8, 3*7 - 4*6] → [-3, 6, -3]
</script>API
cross(out, a, b)
Computes the cross product of two 3D arrays.
- Parameters:
out:[number, number, number]— Output array (will be overwritten, required).a:[number, number, number]— First input vector.b:[number, number, number]— Second input vector.
- Returns: The
outarray (same reference as input).
cross64(out, a, b)
Computes the cross product of two 3D Float64Array vectors (optimized for performance).
- Parameters:
out:Float64Array— Output buffer (length 3, will be overwritten, required).a:Float64Array— First input vector (length 3).b:Float64Array— Second input vector (length 3).
- Returns: The
outbuffer (same reference as input).
cross32(out, a, b)
Computes the cross product of two 3D Float32Array vectors (optimized for performance).
- Parameters:
out:Float32Array— Output buffer (length 3, will be overwritten, required).a:Float32Array— First input vector (length 3).b:Float32Array— Second input vector (length 3).
- Returns: The
outbuffer (same reference as input).
Module Formats
- ESM:
dist/esm/index.js(for modern bundlers like Webpack, Rollup). - CommonJS:
dist/cjs/index.js(for Node.js). - IIFE:
dist/iife/gl-cross.js(global variable:crossproduct).
Minified version:dist/iife/gl-cross.min.js.
Performance
- Operations per Second: ~180 million (for
cross64in Node.js 20+). - Memory Efficiency:
cross64uses 50% less memory than array-based approaches (24 bytes per vector vs. ~48 bytes). - GC Friendly: No temporary allocations when reusing
outvectors.
