@awayjs/scene
Version:
AwayJS scene classes
75 lines (74 loc) • 3.65 kB
JavaScript
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 };