UNPKG

@awayjs/stage

Version:
64 lines (63 loc) 1.81 kB
import { ProgramData } from '../image/ProgramData'; /** * @class away.pool.ProgramDataPool */ var ProgramDataPool = /** @class */ (function () { /** * //TODO * * @param {Stage} stage */ function ProgramDataPool(stage) { this._pool = {}; // Killing pool this._disposedPool = {}; /** * Time to alive Program data after disposing, sec */ this.keepAlive = 1000; //1 sec in ms this._stage = stage; } /** * Collect `disposed` progs and dispose it finaly */ ProgramDataPool.prototype.collect = function () { var now = Date.now(); for (var key in this._disposedPool) { var prog = this._disposedPool[key]; if (!prog.usages && (prog.disposedAt + this.keepAlive < now) || prog.disposed) { delete this._pool[key]; delete this._disposedPool[key]; prog.disposeFinaly(); } } }; /** * //TODO * * @param materialOwner * @returns ITexture */ ProgramDataPool.prototype.getItem = function (vertexString, fragmentString) { var key = vertexString + fragmentString; var prog = this._pool[key] || (this._pool[key] = new ProgramData(this, this._stage, vertexString, fragmentString)); prog.disposedAt = -1; delete this._disposedPool[key]; this.collect(); return prog; }; /** * //TODO * * @param materialOwner */ ProgramDataPool.prototype.disposeItem = function (key) { var entry = this._pool[key]; if (entry) { entry.disposedAt = Date.now(); this._disposedPool[key] = entry; } }; return ProgramDataPool; }()); export { ProgramDataPool };