playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
32 lines (31 loc) • 789 B
JavaScript
import { DynamicBuffer } from "../dynamic-buffer.js";
class WebgpuDynamicBuffer extends DynamicBuffer {
buffer = null;
mappedRange = null;
constructor(device, size, isStaging) {
super(device);
this.buffer = device.wgpu.createBuffer({
size,
usage: isStaging ? GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC : GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
mappedAtCreation: isStaging
});
if (isStaging) {
this.onAvailable();
}
device._vram.ub += size;
}
destroy(device) {
device._vram.ub -= this.buffer.size;
this.buffer.destroy();
this.buffer = null;
}
onAvailable() {
this.mappedRange = this.buffer.getMappedRange();
}
alloc(offset, size) {
return new Int32Array(this.mappedRange, offset, size / 4);
}
}
export {
WebgpuDynamicBuffer
};