UNPKG

@awayjs/scene

Version:
75 lines (74 loc) 3.65 kB
import { __extends } from "tslib"; import { PerspectiveProjection, CoordinateSystem, Transform, Vector3D } from '@awayjs/core'; import { BitmapImage2D } from '@awayjs/stage'; import { DefaultRenderer, RenderGroup } from '@awayjs/renderer'; import { DisplayObjectContainer } from '../display/DisplayObjectContainer'; import { View } from '@awayjs/view'; import { Sprite } from '../display/Sprite'; import { FNTGeneratorBase } from './FNTGeneratrorBase'; var FNTGenerator = /** @class */ (function (_super) { __extends(FNTGenerator, _super); function FNTGenerator(stage) { var _this = _super.call(this, stage) || this; //create the projection var projection = new PerspectiveProjection(); projection.coordinateSystem = CoordinateSystem.RIGHT_HANDED; projection.originX = -1; projection.originY = 1; projection.transform = new Transform(); projection.transform.moveTo(0, 0, -1000); projection.transform.lookAt(new Vector3D()); //create the view _this._view = new View(projection, _this._stage); _this._root = new DisplayObjectContainer(); _this._renderer = RenderGroup .getInstance(DefaultRenderer) .getRenderer(_this._view.getNode(_this._root)); //set the view properties _this._renderer.view.projection = projection; //set the renderer properties _this._renderer.renderableSorter = null; //new RenderableSort2D(); return _this; } FNTGenerator.prototype.generate = function (font, maxSize, fontSize, padding) { var outputBitmap; var outputBitmaps = []; var mipSize; //const pixelRatio: number = this._renderer.view.stage.context.pixelRatio; for (var key in font.font_styles) { var shapes = font.font_styles[key].generateFNTTextures(padding, fontSize, maxSize); for (var s = 0; s < shapes.length; s++) { mipSize = maxSize; var fntRenderSprite = new Sprite(); fntRenderSprite.graphics.addShape(shapes[s]); this._root.removeChildren(0, this._root.numChildren); this._root.addChild(fntRenderSprite); // fntRenderSprite.x = -maxSize/2; // fntRenderSprite.y = -maxSize/2; this._renderer.view.projection.scale = 1000 / maxSize; var mipmapSelector = 0; var bitmapSize = (this._stage.glVersion == 1) ? maxSize * 2 : maxSize; outputBitmap = new BitmapImage2D(bitmapSize, bitmapSize, true, 0, true); outputBitmaps.push(outputBitmap); font.font_styles[key].addFNTChannel(outputBitmap); while (mipSize >= 1) { this._view.backgroundAlpha = 0; //1; this._view.backgroundColor = 0; //ColorUtils.ARGBtoFloat32(1, (mipSize/maxSize)*255, 0,0); this._view.target = outputBitmap; this._renderer.render(true, 0, mipmapSelector); //this._scene.view.stage.context.configureBackBuffer(mipSize/2, mipSize/2, 0, true); //mipmapped framebuffers are not possible with WebGL1 if (this._stage.glVersion == 1) break; //outputBitmaps.push(mipBitmap); mipSize *= 0.5; mipmapSelector++; } } //this._bitmapFontTable.addMaterial(mat); } return outputBitmaps; }; return FNTGenerator; }(FNTGeneratorBase)); export { FNTGenerator };