(
size: number, usage: GPUBufferUsageFlags, mappedAtCreation = false,
reuse = true)
| 27 | constructor(private device: GPUDevice) {} |
| 28 | |
| 29 | acquireBuffer( |
| 30 | size: number, usage: GPUBufferUsageFlags, mappedAtCreation = false, |
| 31 | reuse = true) { |
| 32 | let buffer; |
| 33 | const key = getBufferKey(size, usage); |
| 34 | |
| 35 | if (reuse) { |
| 36 | if (!this.freeBuffers.has(key)) { |
| 37 | this.freeBuffers.set(key, []); |
| 38 | } |
| 39 | |
| 40 | if (this.freeBuffers.get(key).length > 0) { |
| 41 | buffer = this.freeBuffers.get(key).pop(); |
| 42 | this.numFreeBuffers--; |
| 43 | } else { |
| 44 | buffer = this.device.createBuffer({size, usage, mappedAtCreation}); |
| 45 | this.numBytesAllocated += size; |
| 46 | } |
| 47 | } else { |
| 48 | buffer = this.device.createBuffer({size, usage, mappedAtCreation}); |
| 49 | this.numBytesAllocated += size; |
| 50 | } |
| 51 | |
| 52 | if (!this.usedBuffers.has(key)) { |
| 53 | this.usedBuffers.set(key, []); |
| 54 | } |
| 55 | this.usedBuffers.get(key).push(buffer); |
| 56 | this.numUsedBuffers++; |
| 57 | this.numBytesUsed += size; |
| 58 | |
| 59 | return buffer; |
| 60 | } |
| 61 | |
| 62 | releaseBuffer(buffer: GPUBuffer, reuse = true) { |
| 63 | if (this.freeBuffers.size === 0) { |
no test coverage detected