@awayjs/stage
Version:
Stage for AwayJS
64 lines (63 loc) • 1.81 kB
JavaScript
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 };