41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
"use strict";
|
|
class UboBatch {
|
|
constructor({ minUniformOffsetAlignment }) {
|
|
this._minUniformOffsetAlignment = 256;
|
|
this.byteIndex = 0;
|
|
this._minUniformOffsetAlignment = minUniformOffsetAlignment;
|
|
this.data = new Float32Array(65535);
|
|
}
|
|
clear() {
|
|
this.byteIndex = 0;
|
|
}
|
|
addEmptyGroup(size) {
|
|
if (size > this._minUniformOffsetAlignment / 4) {
|
|
throw new Error(`UniformBufferBatch: array is too large: ${size * 4}`);
|
|
}
|
|
const start = this.byteIndex;
|
|
let newSize = start + size * 4;
|
|
newSize = Math.ceil(newSize / this._minUniformOffsetAlignment) * this._minUniformOffsetAlignment;
|
|
if (newSize > this.data.length * 4) {
|
|
throw new Error("UniformBufferBatch: ubo batch got too big");
|
|
}
|
|
this.byteIndex = newSize;
|
|
return start;
|
|
}
|
|
addGroup(array) {
|
|
const offset = this.addEmptyGroup(array.length);
|
|
for (let i = 0; i < array.length; i++) {
|
|
this.data[offset / 4 + i] = array[i];
|
|
}
|
|
return offset;
|
|
}
|
|
destroy() {
|
|
this._buffer.destroy();
|
|
this._buffer = null;
|
|
this.data = null;
|
|
}
|
|
}
|
|
|
|
export { UboBatch };
|
|
//# sourceMappingURL=UboBatch.mjs.map
|