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">
80 lines (77 loc) • 2.98 kB
JavaScript
import { ExtensionType } from '../../extensions/Extensions.mjs';
import { Texture } from '../../rendering/renderers/shared/texture/Texture.mjs';
import { updateTextBounds } from '../text/utils/updateTextBounds.mjs';
import { BatchableHTMLText } from './BatchableHTMLText.mjs';
;
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(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(batchableHTMLText, htmlText);
}
_getGpuText(htmlText) {
return htmlText._gpuData[this._renderer.uid] || this.initGpuText(htmlText);
}
initGpuText(htmlText) {
const batchableHTMLText = new BatchableHTMLText(this._renderer);
batchableHTMLText.renderable = htmlText;
batchableHTMLText.transform = htmlText.groupTransform;
batchableHTMLText.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: [
ExtensionType.WebGLPipes,
ExtensionType.WebGPUPipes,
ExtensionType.CanvasPipes
],
name: "htmlText"
};
export { HTMLTextPipe };
//# sourceMappingURL=HTMLTextPipe.mjs.map