UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

30 lines (27 loc) 845 B
import { DynamicBuffer } from '../dynamic-buffer.js'; class WebgpuDynamicBuffer extends DynamicBuffer { constructor(device, size, isStaging){ super(device), this.buffer = null, this.mappedRange = null; this.buffer = device.wgpu.createBuffer({ size: 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 };