diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index 3922e52..3a472be 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -521,7 +521,11 @@ { for (let i = 0; i < texture.textureCacheIds.length; ++i) { - delete TextureCache[texture.textureCacheIds[i]]; + // Check that texture matches the one being passed in before deleting it from the cache. + if (TextureCache[texture.textureCacheIds[i]] === texture) + { + delete TextureCache[texture.textureCacheIds[i]]; + } } texture.textureCacheIds.length = 0; diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index 3922e52..3a472be 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -521,7 +521,11 @@ { for (let i = 0; i < texture.textureCacheIds.length; ++i) { - delete TextureCache[texture.textureCacheIds[i]]; + // Check that texture matches the one being passed in before deleting it from the cache. + if (TextureCache[texture.textureCacheIds[i]] === texture) + { + delete TextureCache[texture.textureCacheIds[i]]; + } } texture.textureCacheIds.length = 0; diff --git a/test/core/Texture.js b/test/core/Texture.js index 0a7919d..1fd9228 100644 --- a/test/core/Texture.js +++ b/test/core/Texture.js @@ -108,6 +108,25 @@ expect(PIXI.utils.TextureCache[NAME2]).to.equal(texture); }); + it('should not remove Texture from cache if Texture instance has been replaced', function () + { + cleanCache(); + + const texture = new PIXI.Texture(new PIXI.BaseTexture()); + const texture2 = new PIXI.Texture(new PIXI.BaseTexture()); + + PIXI.Texture.addToCache(texture, NAME); + expect(texture.textureCacheIds.indexOf(NAME)).to.equal(0); + expect(PIXI.utils.TextureCache[NAME]).to.equal(texture); + PIXI.Texture.addToCache(texture2, NAME); + expect(texture2.textureCacheIds.indexOf(NAME)).to.equal(0); + expect(PIXI.utils.TextureCache[NAME]).to.equal(texture2); + PIXI.Texture.removeFromCache(texture); + expect(texture.textureCacheIds.indexOf(NAME)).to.equal(-1); + expect(texture2.textureCacheIds.indexOf(NAME)).to.equal(0); + expect(PIXI.utils.TextureCache[NAME]).to.equal(texture2); + }); + it('destroying a destroyed texture should not throw an error', function () { const texture = new PIXI.Texture(new PIXI.BaseTexture());