pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 6.88 kB
Source Map (JSON)
{"version":3,"file":"GpuBufferSystem.mjs","sources":["../../../../../src/rendering/renderers/gpu/buffer/GpuBufferSystem.ts"],"sourcesContent":["import { ExtensionType } from '../../../../extensions/Extensions';\nimport { type GPUData } from '../../../../scene/view/ViewContainer';\nimport { GCManagedHash } from '../../../../utils/data/GCManagedHash';\nimport { uid } from '../../../../utils/data/uid';\nimport { fastCopy } from '../../shared/buffer/utils/fastCopy';\n\nimport type { Buffer } from '../../shared/buffer/Buffer';\nimport type { System } from '../../shared/system/System';\nimport type { GPU } from '../GpuDeviceSystem';\nimport type { WebGPURenderer } from '../WebGPURenderer';\n\n/** @internal */\nexport class GpuBufferData implements GPUData\n{\n public gpuBuffer: GPUBuffer;\n\n constructor(gpuBuffer: GPUBuffer)\n {\n this.gpuBuffer = gpuBuffer;\n }\n\n public destroy()\n {\n this.gpuBuffer.destroy();\n this.gpuBuffer = null;\n }\n}\n\n/**\n * System plugin to the renderer to manage buffers.\n * @category rendering\n * @advanced\n */\nexport class GpuBufferSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGPUSystem,\n ],\n name: 'buffer',\n } as const;\n\n protected CONTEXT_UID: number;\n private readonly _renderer: WebGPURenderer;\n private readonly _managedBuffers: GCManagedHash<Buffer>;\n\n private _gpu: GPU;\n\n constructor(renderer: WebGPURenderer)\n {\n this._renderer = renderer;\n this._managedBuffers = new GCManagedHash({\n renderer,\n type: 'resource',\n onUnload: this.onBufferUnload.bind(this),\n name: 'gpuBuffer'\n });\n }\n\n protected contextChange(gpu: GPU): void\n {\n this._gpu = gpu;\n }\n\n public getGPUBuffer(buffer: Buffer): GPUBuffer\n {\n buffer._gcLastUsed = this._renderer.gc.now;\n\n return (buffer._gpuData[this._renderer.uid] as GpuBufferData)?.gpuBuffer || this.createGPUBuffer(buffer);\n }\n\n public updateBuffer(buffer: Buffer): GPUBuffer\n {\n const gpuBuffer = this.getGPUBuffer(buffer);\n\n const data = buffer.data;\n\n // TODO this can be better...\n if (buffer._updateID && data)\n {\n buffer._updateID = 0;\n\n // make sure\n this._gpu.device.queue.writeBuffer(\n gpuBuffer, 0, data.buffer, 0,\n // round to the nearest 4 bytes\n ((buffer._updateSize || data.byteLength) + 3) & ~3\n );\n }\n\n return gpuBuffer;\n }\n\n /** dispose all WebGL resources of all managed buffers */\n public destroyAll(): void\n {\n this._managedBuffers.removeAll();\n }\n\n protected onBufferUnload(buffer: Buffer): void\n {\n buffer.off('update', this.updateBuffer, this);\n buffer.off('change', this.onBufferChange, this);\n }\n\n public createGPUBuffer(buffer: Buffer): GPUBuffer\n {\n const gpuBuffer = this._gpu.device.createBuffer(buffer.descriptor);\n\n buffer._updateID = 0;\n buffer._resourceId = uid('resource');\n\n if (buffer.data)\n {\n // TODO if data is static, this can be mapped at creation\n fastCopy(\n buffer.data.buffer as ArrayBuffer,\n gpuBuffer.getMappedRange(),\n buffer.data.byteOffset,\n buffer.data.byteLength\n );\n\n gpuBuffer.unmap();\n }\n\n buffer._gpuData[this._renderer.uid] = new GpuBufferData(gpuBuffer);\n if (this._managedBuffers.add(buffer))\n {\n buffer.on('update', this.updateBuffer, this);\n buffer.on('change', this.onBufferChange, this);\n }\n\n return gpuBuffer;\n }\n\n protected onBufferChange(buffer: Buffer)\n {\n this._managedBuffers.remove(buffer);\n buffer._updateID = 0;\n this.createGPUBuffer(buffer);\n }\n\n public destroy(): void\n {\n this._managedBuffers.destroy();\n (this._renderer as null) = null;\n this._gpu = null;\n }\n}\n\n"],"names":[],"mappings":"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"}