export const deepZoomTileCache = new Map() /** The current Tile implementation simply uses PIXI.Sprites. * * BTW: PIXI.extras.TilingSprite is not appropriate. It should be used for * repeating patterns. **/ export class Tile extends PIXI.Sprite { constructor(texture, url) { super(texture) this.url = url this.register(url) } static fromImage(imageId, crossorigin, scaleMode) { return new Tile(PIXI.Texture.fromImage(imageId, crossorigin, scaleMode), imageId) } /** * Registers the tile in the global reference counter for textures * * @param {*} url * @param {boolean} [debug=false] * @memberof Tile */ register(url, debug = false) { if (deepZoomTileCache.has(url)) { let tiles = deepZoomTileCache.get(url) tiles.add(this) if (debug) console.log("Tile.register", url, tiles.size) } else { deepZoomTileCache.set(url, new Set([this])) if (debug) console.log("Tile.register", url, 1) } } /** * Unregisters the rile in the global reference counter for textures * * @returns {number} The number of how often a texture is used. * @memberof Tile */ unregister() { let tiles = deepZoomTileCache.get(this.url) tiles.delete(this) if (tiles.size == 0) { deepZoomTileCache.delete(this.url) } return tiles.size } /** * Destroys this sprite and optionally its texture and children * * @param {*} options Part of the PIXI API, but ignored in the implementation * @memberof Tile */ destroy(options, debug = false) { if (this.parent != null) { } let count = this.unregister() if (count <= 0) { let opts = { children: true, texture: true, baseTexture: true } super.destroy(opts) if (debug) console.log("Tile.destroy", deepZoomTileCache.size, opts) } else { let opts = { children: true, texture: false, baseTexture: false } if (debug) console.log("Tile.destroy", deepZoomTileCache.size, opts) super.destroy(opts) } } }