pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
82 lines (78 loc) • 3.09 kB
JavaScript
;
var Extensions = require('../../extensions/Extensions.js');
var Texture = require('../../rendering/renderers/shared/texture/Texture.js');
var updateTextBounds = require('../text/utils/updateTextBounds.js');
var BatchableHTMLText = require('./BatchableHTMLText.js');
;
class HTMLTextPipe {
constructor(renderer) {
this._renderer = renderer;
}
validateRenderable(htmlText) {
return htmlText._didTextUpdate;
}
addRenderable(htmlText, instructionSet) {
const batchableHTMLText = this._getGpuText(htmlText);
if (htmlText._didTextUpdate) {
this._updateGpuText(htmlText).catch((e) => {
console.error(e);
});
htmlText._didTextUpdate = false;
updateTextBounds.updateTextBounds(batchableHTMLText, htmlText);
}
this._renderer.renderPipes.batch.addToBatch(batchableHTMLText, instructionSet);
}
updateRenderable(htmlText) {
const batchableHTMLText = this._getGpuText(htmlText);
batchableHTMLText._batcher.updateElement(batchableHTMLText);
}
async _updateGpuText(htmlText) {
htmlText._didTextUpdate = false;
const batchableHTMLText = this._getGpuText(htmlText);
if (batchableHTMLText.generatingTexture)
return;
if (batchableHTMLText.texturePromise) {
this._renderer.htmlText.returnTexturePromise(batchableHTMLText.texturePromise);
batchableHTMLText.texturePromise = null;
}
batchableHTMLText.generatingTexture = true;
htmlText._resolution = htmlText._autoResolution ? this._renderer.resolution : htmlText.resolution;
const texturePromise = this._renderer.htmlText.getTexturePromise(htmlText);
batchableHTMLText.texturePromise = texturePromise;
batchableHTMLText.texture = await texturePromise;
const renderGroup = htmlText.renderGroup || htmlText.parentRenderGroup;
if (renderGroup) {
renderGroup.structureDidChange = true;
}
batchableHTMLText.generatingTexture = false;
updateTextBounds.updateTextBounds(batchableHTMLText, htmlText);
}
_getGpuText(htmlText) {
return htmlText._gpuData[this._renderer.uid] || this.initGpuText(htmlText);
}
initGpuText(htmlText) {
const batchableHTMLText = new BatchableHTMLText.BatchableHTMLText(this._renderer);
batchableHTMLText.renderable = htmlText;
batchableHTMLText.transform = htmlText.groupTransform;
batchableHTMLText.texture = Texture.Texture.EMPTY;
batchableHTMLText.bounds = { minX: 0, maxX: 1, minY: 0, maxY: 0 };
batchableHTMLText.roundPixels = this._renderer._roundPixels | htmlText._roundPixels;
htmlText._resolution = htmlText._autoResolution ? this._renderer.resolution : htmlText.resolution;
htmlText._gpuData[this._renderer.uid] = batchableHTMLText;
return batchableHTMLText;
}
destroy() {
this._renderer = null;
}
}
/** @ignore */
HTMLTextPipe.extension = {
type: [
Extensions.ExtensionType.WebGLPipes,
Extensions.ExtensionType.WebGPUPipes,
Extensions.ExtensionType.CanvasPipes
],
name: "htmlText"
};
exports.HTMLTextPipe = HTMLTextPipe;
//# sourceMappingURL=HTMLTextPipe.js.map