sdfsdfs
This commit is contained in:
132
node_modules/pixi.js/lib/scene/text-html/HTMLTextSystem.js
generated
vendored
Normal file
132
node_modules/pixi.js/lib/scene/text-html/HTMLTextSystem.js
generated
vendored
Normal file
@@ -0,0 +1,132 @@
|
||||
'use strict';
|
||||
|
||||
var Extensions = require('../../extensions/Extensions.js');
|
||||
var TexturePool = require('../../rendering/renderers/shared/texture/TexturePool.js');
|
||||
var types = require('../../rendering/renderers/types.js');
|
||||
var isSafari = require('../../utils/browser/isSafari.js');
|
||||
var warn = require('../../utils/logging/warn.js');
|
||||
var PoolGroup = require('../../utils/pool/PoolGroup.js');
|
||||
var getPo2TextureFromSource = require('../text/utils/getPo2TextureFromSource.js');
|
||||
var HTMLTextRenderData = require('./HTMLTextRenderData.js');
|
||||
var HtmlTextStyle = require('./HtmlTextStyle.js');
|
||||
var extractFontFamilies = require('./utils/extractFontFamilies.js');
|
||||
var getFontCss = require('./utils/getFontCss.js');
|
||||
var getSVGUrl = require('./utils/getSVGUrl.js');
|
||||
var getTemporaryCanvasFromImage = require('./utils/getTemporaryCanvasFromImage.js');
|
||||
var loadSVGImage = require('./utils/loadSVGImage.js');
|
||||
var measureHtmlText = require('./utils/measureHtmlText.js');
|
||||
|
||||
"use strict";
|
||||
class HTMLTextSystem {
|
||||
constructor(renderer) {
|
||||
this._activeTextures = {};
|
||||
this._renderer = renderer;
|
||||
this._createCanvas = renderer.type === types.RendererType.WEBGPU;
|
||||
}
|
||||
getTexture(options) {
|
||||
return this._buildTexturePromise(
|
||||
options.text,
|
||||
options.resolution,
|
||||
options.style
|
||||
);
|
||||
}
|
||||
getManagedTexture(text, resolution, style, textKey) {
|
||||
if (this._activeTextures[textKey]) {
|
||||
this._increaseReferenceCount(textKey);
|
||||
return this._activeTextures[textKey].promise;
|
||||
}
|
||||
const promise = this._buildTexturePromise(text, resolution, style).then((texture) => {
|
||||
this._activeTextures[textKey].texture = texture;
|
||||
return texture;
|
||||
});
|
||||
this._activeTextures[textKey] = {
|
||||
texture: null,
|
||||
promise,
|
||||
usageCount: 1
|
||||
};
|
||||
return promise;
|
||||
}
|
||||
async _buildTexturePromise(text, resolution, style) {
|
||||
const htmlTextData = PoolGroup.BigPool.get(HTMLTextRenderData.HTMLTextRenderData);
|
||||
const fontFamilies = extractFontFamilies.extractFontFamilies(text, style);
|
||||
const fontCSS = await getFontCss.getFontCss(
|
||||
fontFamilies,
|
||||
style,
|
||||
HtmlTextStyle.HTMLTextStyle.defaultTextStyle
|
||||
);
|
||||
const measured = measureHtmlText.measureHtmlText(text, style, fontCSS, htmlTextData);
|
||||
const width = Math.ceil(Math.ceil(Math.max(1, measured.width) + style.padding * 2) * resolution);
|
||||
const height = Math.ceil(Math.ceil(Math.max(1, measured.height) + style.padding * 2) * resolution);
|
||||
const image = htmlTextData.image;
|
||||
const uvSafeOffset = 2;
|
||||
image.width = (width | 0) + uvSafeOffset;
|
||||
image.height = (height | 0) + uvSafeOffset;
|
||||
const svgURL = getSVGUrl.getSVGUrl(text, style, resolution, fontCSS, htmlTextData);
|
||||
await loadSVGImage.loadSVGImage(image, svgURL, isSafari.isSafari() && fontFamilies.length > 0);
|
||||
let resource = image;
|
||||
if (this._createCanvas) {
|
||||
resource = getTemporaryCanvasFromImage.getTemporaryCanvasFromImage(image, resolution);
|
||||
}
|
||||
const texture = getPo2TextureFromSource.getPo2TextureFromSource(
|
||||
resource,
|
||||
image.width - uvSafeOffset,
|
||||
image.height - uvSafeOffset,
|
||||
resolution
|
||||
);
|
||||
if (this._createCanvas) {
|
||||
this._renderer.texture.initSource(texture.source);
|
||||
}
|
||||
PoolGroup.BigPool.return(htmlTextData);
|
||||
return texture;
|
||||
}
|
||||
_increaseReferenceCount(textKey) {
|
||||
this._activeTextures[textKey].usageCount++;
|
||||
}
|
||||
decreaseReferenceCount(textKey) {
|
||||
const activeTexture = this._activeTextures[textKey];
|
||||
if (!activeTexture)
|
||||
return;
|
||||
activeTexture.usageCount--;
|
||||
if (activeTexture.usageCount === 0) {
|
||||
if (activeTexture.texture) {
|
||||
this._cleanUp(activeTexture);
|
||||
} else {
|
||||
activeTexture.promise.then((texture) => {
|
||||
activeTexture.texture = texture;
|
||||
this._cleanUp(activeTexture);
|
||||
}).catch(() => {
|
||||
warn.warn("HTMLTextSystem: Failed to clean texture");
|
||||
});
|
||||
}
|
||||
this._activeTextures[textKey] = null;
|
||||
}
|
||||
}
|
||||
_cleanUp(activeTexture) {
|
||||
TexturePool.TexturePool.returnTexture(activeTexture.texture);
|
||||
activeTexture.texture.source.resource = null;
|
||||
activeTexture.texture.source.uploadMethodId = "unknown";
|
||||
}
|
||||
getReferenceCount(textKey) {
|
||||
return this._activeTextures[textKey].usageCount;
|
||||
}
|
||||
destroy() {
|
||||
this._activeTextures = null;
|
||||
}
|
||||
}
|
||||
/** @ignore */
|
||||
HTMLTextSystem.extension = {
|
||||
type: [
|
||||
Extensions.ExtensionType.WebGLSystem,
|
||||
Extensions.ExtensionType.WebGPUSystem,
|
||||
Extensions.ExtensionType.CanvasSystem
|
||||
],
|
||||
name: "htmlText"
|
||||
};
|
||||
HTMLTextSystem.defaultFontOptions = {
|
||||
fontFamily: "Arial",
|
||||
fontStyle: "normal",
|
||||
fontWeight: "normal"
|
||||
};
|
||||
|
||||
exports.HTMLTextSystem = HTMLTextSystem;
|
||||
//# sourceMappingURL=HTMLTextSystem.js.map
|
Reference in New Issue
Block a user