diff --git a/src/core/renderers/webgl/TextureGarbageCollector.js b/src/core/renderers/webgl/TextureGarbageCollector.js index 550fadf..f41a514 100644 --- a/src/core/renderers/webgl/TextureGarbageCollector.js +++ b/src/core/renderers/webgl/TextureGarbageCollector.js @@ -28,29 +28,37 @@ this.count++; this.checkCount++; - + if(this.checkCount > this.checkCountMax) { this.checkCount = 0; this.run(); - } + } } TextueGarbageCollector.prototype.run = function() { - var managedTextures = this.renderer.textureManager._managedTextures; + var tm = this.renderer.textureManager; + var managedTextures = tm._managedTextures; + var wasRemoved = false; for (var i = 0; i < managedTextures.length; i++) { - var texture = managedTextures[i]; - // only supports non generated textures at the moment! - if( !texture._glRenderTargets && this.count - texture.touched > this.maxIdle) - { - texture.dispose(); - i--; + if (!texture._glRenderTargets && this.count - texture.touched > this.maxIdle) { + tm.destroyTexture(texture, true); + managedTextures[i] = null; + wasRemoved = true; } - - }; + } + if (wasRemoved) { + var j = 0; + for (var i = 0; i < managedTextures.length; i++) { + if (managedTextures[i] !== null) { + managedTextures[j++] = managedTextures[i]; + } + } + managedTextures.length = j; + } } diff --git a/src/core/renderers/webgl/TextureGarbageCollector.js b/src/core/renderers/webgl/TextureGarbageCollector.js index 550fadf..f41a514 100644 --- a/src/core/renderers/webgl/TextureGarbageCollector.js +++ b/src/core/renderers/webgl/TextureGarbageCollector.js @@ -28,29 +28,37 @@ this.count++; this.checkCount++; - + if(this.checkCount > this.checkCountMax) { this.checkCount = 0; this.run(); - } + } } TextueGarbageCollector.prototype.run = function() { - var managedTextures = this.renderer.textureManager._managedTextures; + var tm = this.renderer.textureManager; + var managedTextures = tm._managedTextures; + var wasRemoved = false; for (var i = 0; i < managedTextures.length; i++) { - var texture = managedTextures[i]; - // only supports non generated textures at the moment! - if( !texture._glRenderTargets && this.count - texture.touched > this.maxIdle) - { - texture.dispose(); - i--; + if (!texture._glRenderTargets && this.count - texture.touched > this.maxIdle) { + tm.destroyTexture(texture, true); + managedTextures[i] = null; + wasRemoved = true; } - - }; + } + if (wasRemoved) { + var j = 0; + for (var i = 0; i < managedTextures.length; i++) { + if (managedTextures[i] !== null) { + managedTextures[j++] = managedTextures[i]; + } + } + managedTextures.length = j; + } } diff --git a/src/core/renderers/webgl/TextureManager.js b/src/core/renderers/webgl/TextureManager.js index 8987c3d..50bcc6b 100644 --- a/src/core/renderers/webgl/TextureManager.js +++ b/src/core/renderers/webgl/TextureManager.js @@ -120,8 +120,8 @@ } } else - { - // the textur ealrady exists so we only need to update it.. + { + // the textur ealrady exists so we only need to update it.. if(isRenderTexture) { texture._glRenderTargets[this.renderer.CONTEXT_UID].resize(texture.width, texture.height);