UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

37 lines (34 loc) 1.2 kB
import { BUFFERUSAGE_INDIRECT, BUFFERUSAGE_COPY_DST } from '../constants.js'; import { StorageBuffer } from '../storage-buffer.js'; class WebgpuDrawCommands { constructor(device){ this.gpuIndirect = null; this.gpuIndirectSigned = null; this.storage = null; this.device = device; } allocate(maxCount) { this.gpuIndirect = new Uint32Array(5 * maxCount); this.gpuIndirectSigned = new Int32Array(this.gpuIndirect.buffer); this.storage = new StorageBuffer(this.device, this.gpuIndirect.byteLength, BUFFERUSAGE_INDIRECT | BUFFERUSAGE_COPY_DST); } add(i, indexOrVertexCount, instanceCount, firstIndexOrVertex, baseVertex = 0, firstInstance = 0) { const o = i * 5; this.gpuIndirect[o + 0] = indexOrVertexCount; this.gpuIndirect[o + 1] = instanceCount; this.gpuIndirect[o + 2] = firstIndexOrVertex; this.gpuIndirectSigned[o + 3] = baseVertex; this.gpuIndirect[o + 4] = firstInstance; } update(count) { if (this.storage && count > 0) { const used = count * 5; this.storage.write(0, this.gpuIndirect, 0, used); } } destroy() { this.storage?.destroy(); this.storage = null; } } export { WebgpuDrawCommands };