'use strict'; exports.__esModule = true; var _const = require('../../const'); var _settings = require('../../settings'); var _settings2 = _interopRequireDefault(_settings); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * TextureGarbageCollector. This class manages the GPU and ensures that it does not get clogged * up with textures that are no longer being used. * * @class * @memberof PIXI */ var TextureGarbageCollector = function () { /** * @param {PIXI.WebGLRenderer} renderer - The renderer this manager works for. */ function TextureGarbageCollector(renderer) { _classCallCheck(this, TextureGarbageCollector); this.renderer = renderer; this.count = 0; this.checkCount = 0; this.maxIdle = _settings2.default.GC_MAX_IDLE; this.checkCountMax = _settings2.default.GC_MAX_CHECK_COUNT; this.mode = _settings2.default.GC_MODE; } /** * Checks to see when the last time a texture was used * if the texture has not been used for a specified amount of time it will be removed from the GPU */ TextureGarbageCollector.prototype.update = function update() { this.count++; if (this.mode === _const.GC_MODES.MANUAL) { return; } this.checkCount++; if (this.checkCount > this.checkCountMax) { this.checkCount = 0; this.run(); } }; /** * Checks to see when the last time a texture was used * if the texture has not been used for a specified amount of time it will be removed from the GPU */ TextureGarbageCollector.prototype.run = function run() { 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) { 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; } }; /** * Removes all the textures within the specified displayObject and its children from the GPU * * @param {PIXI.DisplayObject} displayObject - the displayObject to remove the textures from. */ TextureGarbageCollector.prototype.unload = function unload(displayObject) { var tm = this.renderer.textureManager; // only destroy non generated textures if (displayObject._texture && displayObject._texture._glRenderTargets) { tm.destroyTexture(displayObject._texture, true); } for (var i = displayObject.children.length - 1; i >= 0; i--) { this.unload(displayObject.children[i]); } }; return TextureGarbageCollector; }(); exports.default = TextureGarbageCollector; //# sourceMappingURL=TextureGarbageCollector.js.map