All files / engine/Source/Renderer TextureCache.js

97.36% Statements 37/38
62.5% Branches 5/8
100% Functions 8/8
97.36% Lines 37/38

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82              750x 750x 750x     1x     5x         1x 2x 2x         2x   2x 2x     1x 4x         4x   4x 4x 5x 4x       4x 4x     1x 71x   71x 3x 3x 3x 3x 3x       71x     1x 1x     1x 734x 734x 1x 1x     734x      
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];
  Iif (!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) {
    Eif (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) {
    Eif (textures.hasOwnProperty(keyword)) {
      textures[keyword].texture.finalDestroy();
    }
  }
  return destroyObject(this);
};
export default TextureCache;