UNPKG

playcanvas

Version:

Open-source WebGL/WebGPU 3D engine for the web

32 lines (31 loc) 789 B
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 };