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 • 4.31 kB
Source Map (JSON)
{"version":3,"file":"GCManagedHash.mjs","sources":["../../../src/utils/data/GCManagedHash.ts"],"sourcesContent":["import { type GCable, type GCData } from '../../rendering/renderers/shared/GCSystem';\nimport { type Renderer } from '../../rendering/renderers/types';\n\nimport type EventEmitter from 'eventemitter3';\n\n/**\n * Options for the {@link GCManagedHash}.\n * @internal\n */\nexport interface GCManagedHashOptions<T extends GCable & { uid: number } & Pick<EventEmitter, 'once' | 'off'>>\n{\n renderer: Renderer;\n type: GCData['type'];\n onUnload?: (item: T, ...args: any[]) => void;\n priority?: number;\n name: string;\n}\n\n/**\n * A hash for managing renderable and resource resources with GC integration.\n * @internal\n */\nexport class GCManagedHash<T extends GCable & { uid: number } & Pick<EventEmitter, 'once' | 'off'>>\n{\n // Exposed directly for GC system access\n public items: Record<number, T> = Object.create(null);\n private _renderer: Renderer;\n private _onUnload?: (item: T, ...args: unknown[]) => void;\n public readonly name: string;\n\n constructor(options: GCManagedHashOptions<T>)\n {\n const { renderer, type, onUnload, priority, name } = options;\n\n this._renderer = renderer;\n renderer.gc.addResourceHash(this, 'items', type, priority ?? 0);\n this._onUnload = onUnload;\n this.name = name;\n }\n\n /**\n * Add an item to the hash. No-op if already added.\n * @param item\n * @returns true if the item was added, false if it was already in the hash\n */\n public add(item: T): boolean\n {\n if (this.items[item.uid]) return false;\n this.items[item.uid] = item;\n item.once('unload', this.remove, this);\n item._gcLastUsed = this._renderer.gc.now;\n\n return true;\n }\n\n public remove(item: T, ...args: unknown[]): void\n {\n if (!this.items[item.uid]) return;\n\n const gpuData = item._gpuData[this._renderer.uid];\n\n if (!gpuData) return;\n\n this._onUnload?.(item, ...args);\n\n gpuData.destroy();\n item._gpuData[this._renderer.uid] = null;\n this.items[item.uid] = null;\n }\n\n public removeAll(...args: unknown[]): void\n {\n Object.values(this.items).forEach((item) => item && this.remove(item, ...args));\n }\n\n public destroy(...args: unknown[]): void\n {\n this.removeAll(...args);\n this.items = Object.create(null);\n this._renderer = null;\n this._onUnload = null;\n }\n}\n"],"names":[],"mappings":";AAsBO,MAAM,aACb,CAAA;AAAA,EAOI,YAAY,OACZ,EAAA;AANA;AAAA,IAAO,IAAA,CAAA,KAAA,mBAAkC,MAAA,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAOhD,IAAA,MAAM,EAAE,QAAU,EAAA,IAAA,EAAM,QAAU,EAAA,QAAA,EAAU,MAAS,GAAA,OAAA,CAAA;AAErD,IAAA,IAAA,CAAK,SAAY,GAAA,QAAA,CAAA;AACjB,IAAA,QAAA,CAAS,GAAG,eAAgB,CAAA,IAAA,EAAM,OAAS,EAAA,IAAA,EAAM,YAAY,CAAC,CAAA,CAAA;AAC9D,IAAA,IAAA,CAAK,SAAY,GAAA,QAAA,CAAA;AACjB,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,IAAI,IACX,EAAA;AACI,IAAI,IAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,GAAG,CAAA;AAAG,MAAO,OAAA,KAAA,CAAA;AACjC,IAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAG,CAAI,GAAA,IAAA,CAAA;AACvB,IAAA,IAAA,CAAK,IAAK,CAAA,QAAA,EAAU,IAAK,CAAA,MAAA,EAAQ,IAAI,CAAA,CAAA;AACrC,IAAK,IAAA,CAAA,WAAA,GAAc,IAAK,CAAA,SAAA,CAAU,EAAG,CAAA,GAAA,CAAA;AAErC,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EAEO,MAAA,CAAO,SAAY,IAC1B,EAAA;AACI,IAAA,IAAI,CAAC,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,GAAG,CAAA;AAAG,MAAA,OAAA;AAE3B,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,QAAS,CAAA,IAAA,CAAK,UAAU,GAAG,CAAA,CAAA;AAEhD,IAAA,IAAI,CAAC,OAAA;AAAS,MAAA,OAAA;AAEd,IAAK,IAAA,CAAA,SAAA,GAAY,IAAM,EAAA,GAAG,IAAI,CAAA,CAAA;AAE9B,IAAA,OAAA,CAAQ,OAAQ,EAAA,CAAA;AAChB,IAAA,IAAA,CAAK,QAAS,CAAA,IAAA,CAAK,SAAU,CAAA,GAAG,CAAI,GAAA,IAAA,CAAA;AACpC,IAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAG,CAAI,GAAA,IAAA,CAAA;AAAA,GAC3B;AAAA,EAEO,aAAa,IACpB,EAAA;AACI,IAAA,MAAA,CAAO,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA,CAAE,OAAQ,CAAA,CAAC,IAAS,KAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,CAAO,IAAM,EAAA,GAAG,IAAI,CAAC,CAAA,CAAA;AAAA,GAClF;AAAA,EAEO,WAAW,IAClB,EAAA;AACI,IAAK,IAAA,CAAA,SAAA,CAAU,GAAG,IAAI,CAAA,CAAA;AACtB,IAAK,IAAA,CAAA,KAAA,mBAAe,MAAA,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAC/B,IAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAA;AACjB,IAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAA;AAAA,GACrB;AACJ;;;;"}