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;
|