'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