In class _BinaryWriter
of the gltf exporter, a loop is used to copy contents in old buffer to new buffer, which is benchmarked to be slow.
TypedArray.prototype.set() can be used for faster memory copying while having the same Browser compatibility of TypedArray.
Proposed code:
BABYLON.GLTF2.Exporter._BinaryWriter.prototype._resizeBuffer = function _resizeBuffer(byteLength) {
const newBuffer = new ArrayBuffer(byteLength);
let oldUint8Array = new Uint8Array(this._arrayBuffer);
const newUint8Array = new Uint8Array(newBuffer);
if (oldUint8Array.length > newUint8Array.length) {
oldUint8Array = oldUint8Array.subarray(0, newUint8Array.length);
}
newUint8Array.set(oldUint8Array, 0);
this._arrayBuffer = newBuffer;
this._dataView = new DataView(this._arrayBuffer);
return newBuffer;
}
Benchmark before:
Benchmark after:
The model used for benchmarking:
Arm.zip (3.0 MB)
source of this model