UNPKG

@awayjs/renderer

Version:
102 lines (101 loc) 4.47 kB
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 };