@awayjs/renderer
Version:
Renderer for AwayJS
102 lines (101 loc) • 4.47 kB
JavaScript
import { __extends } from "tslib";
import { AbstractionBase, WeakAssetSet } from '@awayjs/core';
import { RenderableEvent } from '../events/RenderableEvent';
/**
* @class away.pool.RenderEntity
*/
var RenderEntity = /** @class */ (function (_super) {
__extends(RenderEntity, _super);
function RenderEntity() {
var _this = _super.call(this) || this;
_this._onInvalidateElementsDelegate = function (event) { return _this._onInvalidateElements(event); };
_this._onInvalidateMaterialDelegate = function (event) { return _this._onInvalidateMaterial(event); };
_this._onInvalidateStyleDelegate = function (event) { return _this._onInvalidateStyle(event); };
return _this;
}
Object.defineProperty(RenderEntity.prototype, "node", {
/**
*
* @returns {ContainerNode}
*/
get: function () {
return this._asset;
},
enumerable: false,
configurable: true
});
Object.defineProperty(RenderEntity.prototype, "renderer", {
/**
*
* @returns {RendererBase}
*/
get: function () {
return this._pool;
},
enumerable: false,
configurable: true
});
/**
* //TODO
*
* @param materialClassGL
*/
RenderEntity.prototype.init = function (node, renderer) {
_super.prototype.init.call(this, node, renderer);
this.stage = renderer.stage;
this._renderables = new WeakAssetSet('_Render_RenderableBase');
this._pool.addRenderEntity(this);
this._asset.container.addEventListener(RenderableEvent.INVALIDATE_ELEMENTS, this._onInvalidateElementsDelegate);
this._asset.container.addEventListener(RenderableEvent.INVALIDATE_MATERIAL, this._onInvalidateMaterialDelegate);
this._asset.container.addEventListener(RenderableEvent.INVALIDATE_STYLE, this._onInvalidateStyleDelegate);
};
RenderEntity.prototype.onClear = function (event) {
this._asset.container.removeEventListener(RenderableEvent.INVALIDATE_ELEMENTS, this._onInvalidateElementsDelegate);
this._asset.container.removeEventListener(RenderableEvent.INVALIDATE_MATERIAL, this._onInvalidateMaterialDelegate);
this._asset.container.removeEventListener(RenderableEvent.INVALIDATE_STYLE, this._onInvalidateStyleDelegate);
this._renderables.forEach(function (renderable) { return renderable.onClear(event); });
this._pool.removeRenderEntity(this);
this._renderables = null;
_super.prototype.onClear.call(this, event);
};
RenderEntity.prototype.onInvalidate = function (event) {
_super.prototype.onInvalidate.call(this, event);
};
RenderEntity.prototype.addRenderable = function (renderable) {
this._renderables.add(renderable);
};
RenderEntity.prototype.removeRenderable = function (renderable) {
this._renderables.remove(renderable);
};
RenderEntity.prototype._onInvalidateElements = function (event) {
// for (const key in this._abstractionPool)
// (this._abstractionPool[key] as _Render_RenderableBase)._onInvalidateElements();
};
RenderEntity.prototype._onInvalidateMaterial = function (event) {
// for (const key in this._abstractionPool)
// (this._abstractionPool[key] as _Render_RenderableBase)._onInvalidateMaterial();
};
RenderEntity.prototype._onInvalidateStyle = function (event) {
// for (const key in this._abstractionPool)
// (this._abstractionPool[key] as _Render_RenderableBase)._onInvalidateStyle();
};
RenderEntity.prototype.requestAbstraction = function (asset) {
var store = RenderEntity._store[asset.assetType];
return store.length ? store.pop() : new RenderEntity._renderRenderableClassPool[asset.assetType]();
};
RenderEntity.prototype.storeAbstraction = function (abstraction) {
RenderEntity._store[abstraction.asset.assetType].push(abstraction);
};
/**
*
* @param imageObjectClass
*/
RenderEntity.registerRenderable = function (renderStateClass, assetClass) {
RenderEntity._renderRenderableClassPool[assetClass.assetType] = renderStateClass;
RenderEntity._store[assetClass.assetType] = [];
};
RenderEntity._store = {};
RenderEntity._renderRenderableClassPool = new Object();
return RenderEntity;
}(AbstractionBase));
export { RenderEntity };