@awayjs/renderer
Version:
Renderer for AwayJS
44 lines (43 loc) • 1.82 kB
JavaScript
import { UUID, } from '@awayjs/core';
import { AbstractionSet } from '@awayjs/core/dist/lib/base/AbstractionSet';
var RenderGroup = /** @class */ (function () {
function RenderGroup(rendererClass) {
this._store = [];
this.materialStore = {};
this.materialClassPool = {};
this.id = UUID.Next();
this.abstractions = new AbstractionSet(this);
this._rendererClass = rendererClass;
}
RenderGroup.prototype.requestAbstraction = function (asset) {
return this._store.length ? this._store.pop() : new this._rendererClass();
};
RenderGroup.prototype.storeAbstraction = function (abstraction) {
this._store.push(abstraction);
};
RenderGroup.prototype.getRenderer = function (node) {
return this.abstractions.getAbstraction(node);
};
RenderGroup.getInstance = function (rendererClass) {
return RenderGroup._renderGroupPool[rendererClass.assetType]
|| (RenderGroup._renderGroupPool[rendererClass.assetType] = new RenderGroup(rendererClass));
};
RenderGroup.prototype.registerMaterial = function (renderMaterialClass, materialClass) {
this.materialClassPool[materialClass.assetType] = renderMaterialClass;
this.materialStore[materialClass.assetType] = [];
};
/**
*
* @param imageObjectClass
*/
RenderGroup.registerElements = function (renderElementsClass, elementsClass) {
RenderGroup._renderElementsClassPool[elementsClass.assetType] = renderElementsClass;
};
RenderGroup.getRenderElementsClass = function (asset) {
return RenderGroup._renderElementsClassPool[asset.assetType];
};
RenderGroup._renderGroupPool = {};
RenderGroup._renderElementsClassPool = {};
return RenderGroup;
}());
export { RenderGroup };