| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | import defined from "../Core/defined.js";import destroyObject from "../Core/destroyObject.js";/** * @private */function TextureCache() {  this._textures = {};  this._numberOfTextures = 0;  this._texturesToRelease = {};}Object.defineProperties(TextureCache.prototype, {  numberOfTextures: {    get: function () {      return this._numberOfTextures;    },  },});TextureCache.prototype.getTexture = function (keyword) {  const cachedTexture = this._textures[keyword];  if (!defined(cachedTexture)) {    return undefined;  }  // No longer want to release this if it was previously released.  delete this._texturesToRelease[keyword];  ++cachedTexture.count;  return cachedTexture.texture;};TextureCache.prototype.addTexture = function (keyword, texture) {  const cachedTexture = {    texture: texture,    count: 1,  };  texture.finalDestroy = texture.destroy;  const that = this;  texture.destroy = function () {    if (--cachedTexture.count === 0) {      that._texturesToRelease[keyword] = cachedTexture;    }  };  this._textures[keyword] = cachedTexture;  ++this._numberOfTextures;};TextureCache.prototype.destroyReleasedTextures = function () {  const texturesToRelease = this._texturesToRelease;  for (const keyword in texturesToRelease) {    if (texturesToRelease.hasOwnProperty(keyword)) {      const cachedTexture = texturesToRelease[keyword];      delete this._textures[keyword];      cachedTexture.texture.finalDestroy();      --this._numberOfTextures;    }  }  this._texturesToRelease = {};};TextureCache.prototype.isDestroyed = function () {  return false;};TextureCache.prototype.destroy = function () {  const textures = this._textures;  for (const keyword in textures) {    if (textures.hasOwnProperty(keyword)) {      textures[keyword].texture.finalDestroy();    }  }  return destroyObject(this);};export default TextureCache;
 |